纹理数据未在片段着色器中传递给采样器

时间:2016-08-17 19:13:20

标签: opengl

我需要将2D(矩形)纹理传递给片段着色器。纹理中的数据必须在采样器中作为均匀读取。根据纹理中读取的值,像素的颜色将会改变或不会改变。

这是我在API中绑定纹理和采样器的代码:

//create texture and sampler
glEnable(GL_TEXTURE_2D);
GLuint CosineTexture;
glGenTextures(1,&CosineTexture);
glTexStorage2D(GL_TEXTURE_RECTANGLE,1,GL_RGBA,1440,1080);

glTexSubImage2D(GL_TEXTURE_RECTANGLE,0,0,0,1440,1080,GL_RGBA,GL_FLOAT,dataCosines1);

GLuint SensorCosines;
glGenSamplers(1,&SensorCosines);

glActiveTexture(GL_TEXTURE0 + 0);
glBindTexture(GL_TEXTURE_RECTANGLE,CosineTexture);
glBindSampler(0,SensorCosines);

这是我在着色器中接收和读取纹理的代码:

uniform samplerRect SensorCosines;
...

float textureValue;
textureValue = texture(SensorCosines, Bin).r;

什么都没发生。所以,我猜我的纹理没有传递给着色器。我的感觉是它在API中与采样器绑定纹理的级别,但我不知道我的错误是什么。

1 个答案:

答案 0 :(得分:0)

glTexStorage2D(GL_TEXTURE_RECTANGLE,1,GL_RGBA,1440,1080);

此调用将产生OpenGL错误。具体来说,GL_INVALID_ENUM。使用glTexStorage函数时,必须使用sized image formatsGL_RGBA不是大小合适的图片格式。

您可能在未显示的代码中遇到其他问题,但这肯定是问题之一。