什么是依赖纹理读取?

时间:2009-06-28 02:42:04

标签: opengl graphics

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

3 个答案:

答案 0 :(得分:27)

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

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

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

答案 1 :(得分:23)

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

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

直接来自Apple's OpenGL ES programming guide

答案 2 :(得分:10)

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