【发布时间】:2016-07-21 19:07:26
【问题描述】:
我正在使用 imageStore() 修改纹理的纹素,然后我在其他着色器中读取这些纹素作为带有 texture() 的 sampler2D 但我得到了在 imageStore() 之前存储在纹理中的值.使用 imageLoad() 可以正常工作,但我需要使用过滤,并且 texture() 的性能更好,那么有没有办法使用 texture() 获取修改后的数据?
编辑:
第一个片段着色器(用于书写):
#version 450 core
layout (binding = 0, rgba32f) uniform image2D img;
in vec2 vs_uv_out;
void main()
{
imageStore(img, ivec2(vs_uv_out), vec4(0.0f, 0.0f, 1.0f, 1.0f));
}
第二个片段着色器(用于阅读):
#version 450 core
layout (binding = 0) uniform sampler2D tex;
in vec2 vs_uv_out;
out vec4 out_color;
void main()
{
out_color = texture(tex, vs_uv_out);
}
这就是我运行着色器的方式:
glUseProgram(shader_programs[0]);
glBindImageTexture(0, texture, 0, GL_FALSE, 0, GL_READ_WRITE,
GL_RGBA32F);
glDrawArrays(GL_TRIANGLES, 0, 6);
glUseProgram(shader_programs[1]);
glBindTextureUnit(0, texture);
glDrawArrays(GL_TRIANGLES, 0, 6);
我做了这个简单的应用程序来测试,因为真实的非常复杂,我首先用红色清除纹理,但纹素不会出现蓝色(除了在第二个片段着色器中使用 imageLoad)。
【问题讨论】:
-
您需要更准确地描述情况。你在哪里写作,你在哪里阅读?贴一些代码。