Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 纹理数据未传递到片段着色器中的采样器_Opengl - Fatal编程技术网

Opengl 纹理数据未传递到片段着色器中的采样器

Opengl 纹理数据未传递到片段着色器中的采样器,opengl,Opengl,我需要将2D(矩形)纹理传递给片段着色器。纹理中的数据必须在采样器中作为均匀数据读取。根据在纹理中读取的值,像素的颜色将改变或不改变 以下是我在API中绑定纹理和采样器的代码: //create texture and sampler glEnable(GL_TEXTURE_2D); GLuint CosineTexture; glGenTextures(1,&CosineTexture); glTexStorage2D(GL_TEXTURE_RECTANGLE,1,GL_RGBA,14

我需要将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中绑定纹理到采样器的级别,但我不知道我的错误是什么

此调用将产生OpenGL错误。具体来说,
GL\u无效\u枚举
。使用
glTexStorage
函数时必须使用
GL_RGBA
不是大小合适的图像格式


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

I for必须在着色器中显示一些细节。这就是:均匀采样Rect SensorCosines。。。。vec2-Bin。。。Bin[0]=浮点数(XCosines)+0.5;料仓[1]=浮子(YCosines)+0.5;很抱歉罗伯特:谢谢你的提示。我将寻找它。我已经在代码中做了更改,并使用了一个1024 X 1024大小的纹理。仍然没有数据传递到采样器2D。我向OpenGL查询错误,函数GlueErrorString(err)总是返回“无错误”。你认为我的问题可能与我创建纹理数据的方式有关吗?这里是:浮点***数据余弦;//分配内存dataCosines=newglfloat**[1024];对于(inti=0;i<1024;++i){dataCosines[i]=new-GLfloat*[1024];对于(intj=0;j<1024;++j)dataCosines[i][j]=new-GLfloat[4];}@RobertB:这就是为什么如果你希望得到一个好的答案,你应该提供一个答案。正如你所看到的,我是OpenGL和StackOverFlow的新手。我要感谢你的帮助。关于StackOverFlow格式,我会尝试把更好的东西放在一起。你是对的。函数gluErrorString(err)始终不返回错误,但函数glGetError()返回了GL_INVALID_ENUM的错误代码,如您所料。我实际上需要在glTexStorage2D中编写GL_RGBA16而不是GL_RGBA(GL_TEXTURE_2D,1,GL_RGBA,10241024);案件现已结案。谢谢
glTexStorage2D(GL_TEXTURE_RECTANGLE,1,GL_RGBA,1440,1080);