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

时间:2014-08-13 13:37:11

标签: 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, 0, GL_WRITE_ONLY, GL_RGBA32F);

这是该功能的规范,因此您可以检查我使用正确的参数:https://www.opengl.org/sdk/docs/man/html/glBindImageTexture.xhtml

然后在计算着色器内部使用:

获取纹理
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;

尝试将某些颜色设置为位置(0,0)处纹理中的值:

color = texture2D(Texture, ivec(0,0));

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

我可能遗漏了一些非常明显的东西,所以一些代码显示我错过的东西会很棒

0 个答案:

没有答案