什么是依赖纹理读取?

问题描述 投票:21回答:3

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

opengl graphics
3个回答
26
投票

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

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

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


23
投票

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

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

这是直接从Apple's OpenGL ES programming guide


10
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.