Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

sampler1D not supported in nVidia GLSL?

In the GLSL spec, and other sources about GLSL, sampler types are available in 3 dimensions: sampler1D, sampler2D, and sampler3D.

However when I try to compile GLSL programs using WebGL in Chrome (both regular, and also in Canary), sampler2D and sampler3D are accepted but sampler1D gives a syntax error. Code:

uniform sampler1D tex1;

Error:

FS ERROR: ERROR: 0:9: 'sampler1D' : syntax error 

This error occurs even if I give Canary the command line argument --use-gl=desktop.

I am running Chrome 12.0.742.68 beta-m, and Canary 13.0.782.1. The chipset I have is Nvidia Quadro NVS 160M.

Is it possible that Nvidia allows 2- and 3-dimensional texture samplers, but not 1D? I've tried searching for information to that effect, but have not found anything.

like image 659
LarsH Avatar asked Jun 02 '11 03:06

LarsH


2 Answers

No, your problem isn't related to "NVIDIA GLSL". WebGL is based on OpenGL ES 2.0, and OpenGL ES 2.0 doesn't have 1D textures, only 2D and 3D textures (as extensions), so you won't be able to use a sampler1D in WebGL.

Solution? Just use a 2D texture with a height of 1 with a sampler2D.

Note: If you use Desktop OpenGL (OpenGL >= 2.0), you will be able to use 1D textures and sampler1D's.

like image 170
Dr. Snoopy Avatar answered Nov 13 '22 23:11

Dr. Snoopy


An example of using a a OpenGL texture 2D object with a height of 1:

glTexStorage2D(GL_TEXTURE_2D, 8, GL_RGB8, 256, 1);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 256, 1, GL_RGB, GL_UNSIGNED_BYTE, palette);

And the corresponding call in GLSL, using a sampler2D object named "tex":

vec4 color = texture(tex, vec2(x, 1.0f));\n"
like image 22
BlazePascal Avatar answered Nov 13 '22 23:11

BlazePascal