我正在尝试将一些数据从计算着色器输出到纹理,但是imageStore()似乎什么都不做.这是着色器:
#version 430
layout(RGBA32F) uniform image2D image;
layout (local_size_x = 1, local_size_y = 1) in;
void main() {
imageStore(image, ivec2(gl_GlobalInvocationID.xy), vec4(0.0f, 1.0f, 1.0f, 1.0f));
}
Run Code Online (Sandbox Code Playgroud)
和应用程序代码在这里:
GLuint tex;
glGenTextures(1, &tex);
glBindTexture(GL_TEXTURE_2D, tex);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, WIDTH, HEIGHT, 0, GL_RGBA, GL_FLOAT, 0);
glBindImageTexture(0, tex, 0, GL_FALSE, 0, GL_WRITE_ONLY, GL_RGBA32F);
glUseProgram(program->GetName());
glUniform1i(program->GetUniformLocation("image"), 0);
glDispatchCompute(WIDTH, HEIGHT, 1);
Run Code Online (Sandbox Code Playgroud)
然后使用该纹理渲染全屏四边形,但目前它只显示来自视频内存的一些随机旧数据.知道什么可能是错的吗?
编辑:
这是我显示纹理的方式:
// This comes right after the previous block of code
glUseProgram(drawProgram->GetName());
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, tex);
glUniform1i(drawProgram->GetUniformLocation("sampler"), 0);
glBindVertexArray(vao);
glDrawArrays(GL_TRIANGLES, 0, 6);
glfwSwapBuffers();
Run Code Online (Sandbox Code Playgroud)
drawProgram包括:
#version …Run Code Online (Sandbox Code Playgroud)