我需要将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中与采样器绑定纹理的级别,但我不知道我的错误是什么。
答案 0 :(得分:0)
glTexStorage2D(GL_TEXTURE_RECTANGLE,1,GL_RGBA,1440,1080);
此调用将产生OpenGL错误。具体来说,GL_INVALID_ENUM
。使用glTexStorage
函数时,必须使用sized image formats。 GL_RGBA
不是大小合适的图片格式。
您可能在未显示的代码中遇到其他问题,但这肯定是问题之一。