GLSL中的texture vs texture2D区别

34
当在GLSL中对2D纹理进行采样(使用uniform sampler2D),需要使用texture函数,并且从采样器中推断出维度(在这种情况下为2D)。这是自GLSL 1.30以来采样纹理的现代方式(GLSL参考页面)。然而,您也可以使用texture2D函数。 texture2D函数是否已经被弃用,如果是,那么在某个版本的GLSL中是否将删除(或已经删除)对texture2D函数的支持?
1个回答

43

texture2D()已经被弃用,至少在OpenGL 3.3中是这样的, 可以参考3.30 GLSL规范的第99页。为了避免破坏现有的代码,它将继续在OpenGL兼容性配置文件中得到支持,但强烈不建议在新代码中使用。

编辑:OpenGL ES的细节略有不同,但最终结果相同:texture2D()已在OpenGL ES 3.0中被弃用,并被texture()替换,可以参考3.0 GLSL ES规范的第8.8节。


3
原问题中没有提到OpenGL ES,因此我假设我们讨论的是普通的GL。如果对于GL ES来说答案不同,那值得一提;我会更新我的回答(除非有其他人想加入)。 - postgoodism
8
鉴于问题没有提到任何ES(甚至没有停用,更不用说GLSL 1.30或“texture”函数如问题中明确指出),所以您的评论实际上没有意义。大多数人使用OpenGL ES并不能使这个完全正确的答案变得毫无意义。因为您期望一个离题的答案(出于任何原因),并不能突然使一个有关题目的答案离题。 - Christian Rau
那么,如果在OpenGL上,答案是使用'texture()',如果在OpenGL ES上,则使用'texture2D()'?我更喜欢只有一个函数。 - Zebrafish
1
有两种人:一种人期望按照问题的字面意思来回答问题,另一种人则期望得到他们在脑海中所想的问题的答案。有时候这两种人实际上是同一种人。 - metalim
@JanieClayton 原始问题从未提到任何iOS或其他OpenGL ES。ios标签是由其他用户添加的(原因我不知道)。 - Christian Rau
他们应该让这个预处理器工具将所有的texture2D()实例替换为相应的texture()调用。 - cmarangu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接