nVidia GLSL不支持sampler1D?

时间:2011-06-02 03:33:17

标签: graphics glsl textures nvidia

GLSL specother sources about GLSL中,采样器类型分为三个维度:sampler1Dsampler2Dsampler3D

然而,当我尝试在Chrome中使用WebGL编译GLSL程序时(包括常规和Canary),sampler2Dsampler3D被接受但是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?我已经尝试过搜索相关信息,但没有找到任何信息。

2 个答案:

答案 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"