在GLSL spec和other sources about GLSL中,采样器类型分为三个维度:sampler1D
,sampler2D
和sampler3D
。
然而,当我尝试在Chrome中使用WebGL编译GLSL程序时(包括常规和Canary),sampler2D
和sampler3D
被接受但是sampler1D会出现语法错误。代码:
uniform sampler1D tex1;
错误:
FS ERROR: ERROR: 0:9: 'sampler1D' : syntax error
即使我向Canary提供命令行参数--use-gl=desktop
,也会发生此错误。
我正在运行Chrome 12.0.742.68 beta-m和Canary 13.0.782.1。 我拥有的芯片组是Nvidia Quadro NVS 160M。
Nvidia是否有可能允许2维和3维纹理采样器,而不是1D?我已经尝试过搜索相关信息,但没有找到任何信息。
答案 0 :(得分:9)
不,您的问题与“NVIDIA GLSL”无关。 WebGL基于OpenGL ES 2.0,OpenGL ES 2.0没有1D纹理,只有2D和3D纹理(作为扩展),因此您将无法在WebGL中使用sampler1D。
解决方案?只需使用带有sampler2D的高度为1的2D纹理。
注意:如果您使用Desktop OpenGL(OpenGL> = 2.0),您将能够使用1D纹理和sampler1D。
答案 1 :(得分:1)
使用高度为1的OpenGL纹理2D对象的示例:
glTexStorage2D(GL_TEXTURE_2D, 8, GL_RGB8, 256, 1);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 256, 1, GL_RGB, GL_UNSIGNED_BYTE, palette);
并使用名为“ tex”的sampler2D对象在GLSL中进行相应的调用:
vec4 color = texture(tex, vec2(x, 1.0f));\n"