什么是依赖纹理读取?

Bry*_*man 22 opengl graphics

我一直在阅读有关计算机图形学的论文,而且我经常遇到在着色器代码中查询纹理的上下文中使用的术语"依赖纹理读取"或"依赖纹理提取".什么是依赖纹理读取,这与"普通"纹理读取有什么区别?

Lar*_*itz 27

"依赖纹理读取"是指来自一个纹理查找(或其他着色器内计算)的返回值用于确定从第二个纹理查找的WHERE.一个重要的含义是纹理坐标(你从哪里查看)直到执行着色器的中间才确定...你可以在着色器上做任何静态分析(甚至知道所有参数的值)这会告诉你提前坐标是什么.它还严格对两个纹理读取进行排序,并限制执行顺序可以通过驱动程序中的优化等来改变多少.

在较旧的显卡上,这类产品曾经有很多限制.例如,在某一点(IIRC),您可以从多个纹理中查找,但只能使用少量不同的纹理坐标.硬件实际上是以某种类型的依赖纹理读取要么不可能要么非常低效的方式实现的.

在最新一代或两张卡中,您不必担心这一点.但是,你可能正在阅读几年前的书籍或文章,当时你真的必须密切注意这些事情.

  • 实际上,根据PowerVR,你需要注意一些最新的硬件:-) http://bit.ly/yvSnM (8认同)

ben*_*utt 24

接受的答案(以及它下面的答案)错误地将依赖纹理读取限制为使用另一个纹理读取的输出.那是不对的.

依赖纹理读取是读取的任何纹理,其坐标不是传递到程序的片段着色器的精确坐标.即使是混合也会导致依赖纹理读取.

这可以直接从Apple的OpenGL ES编程指南中获取.

  • @JustinMeiners 这曾经是一个更大的问题,但依赖纹理读取不再对任何支持 OpenGLES 3.0 的硬件带来性能损失(这几乎是目前的一切)。请参阅Apple文档:https://developer.apple.com/library/archive/documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/BestPracticesforShaders/BestPracticesforShaders.html (2认同)

Jim*_*uck 10

普通纹理读取仅使用传递到着色器的纹理坐标.依赖纹理读取具有纹理坐标,该纹理坐标部分地使用从先前在着色器中访问的另一纹理获取的值来计算.因此,第二纹理访问"依赖于"从第一个获取的值.