Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.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
C++ 将纹理与计算着色器和片段着色器一起使用_C++_Opengl_Textures_Fragment Shader_Compute Shader - Fatal编程技术网

C++ 将纹理与计算着色器和片段着色器一起使用

C++ 将纹理与计算着色器和片段着色器一起使用,c++,opengl,textures,fragment-shader,compute-shader,C++,Opengl,Textures,Fragment Shader,Compute Shader,我试图使用纹理存储一些数据,以便在计算数据的计算着色器和使用它的片段着色器之间传递 我使用以下方法创建纹理并用空值填充: GLuint texID; glGenTextures(1, &texID); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 256, 256, 0, GL_RGBA, GL_FLOAT, NULL); 然后,我使用以下命令将其提供给计算着色器: glBindImageTexture(0, texID, 0, GL_FALSE,

我试图使用纹理存储一些数据,以便在计算数据的计算着色器和使用它的片段着色器之间传递

我使用以下方法创建纹理并用空值填充:

GLuint texID;
glGenTextures(1, &texID);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 256, 256, 0, GL_RGBA, GL_FLOAT, NULL);
然后,我使用以下命令将其提供给计算着色器:

glBindImageTexture(0, texID, 0, GL_FALSE, 0, GL_WRITE_ONLY, GL_RGBA32F);
这是此函数的规范,因此您可以检查我是否使用了正确的参数:

然后在计算着色器中,我使用以下方法获得纹理:

layout(rgba32f) coherent uniform image2D Texture;
然后我设置纹理的一个值作为测试:

 imageStore(Texture, ivec2(0,0), vec4(0.1, 0.2, 0.3, 1.0));
这将把vec4放入纹理的位置(0,0)

然后将纹理添加为片段着色器所属程序的统一纹理:

GLint uniformID = glGetUniformLocation(programID, "Texture");
glUniform1i(uniformID, 0);
然后在片段着色器中,我获得了纹理:

uniform sampler2D Texture;
并尝试将somethings Color设置为位置(0,0)处纹理中的值:

然而,结果我得到了黑色:即(0.0,0.0,0.0,1.0)。不管我在计算着色器中设置了什么,我总是得到这个


我可能遗漏了一些非常明显的东西,所以用一点代码来显示我遗漏的东西会很好

你能发布你正在使用的着色器吗?
color = texture2D(Texture, ivec(0,0));