在 GLSL spec 和 other sources about GLSL 中,采样器类型有 3 个维度: 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维?我已经尝试搜索相关信息,但没有找到任何内容。
最佳答案
不,您的问题与“NVIDIA GLSL”无关。 WebGL 基于 OpenGL ES 2.0,而 OpenGL ES 2.0 没有 1D 纹理,只有 2D 和 3D 纹理(作为扩展),因此您将无法在 WebGL 中使用 sampler1D。
解决方案?只需将高度为 1 的 2D 纹理与 sampler2D 一起使用。
注意:如果您使用桌面 OpenGL (OpenGL >= 2.0),您将能够使用 1D 纹理和 sampler1D。