Ich modifiziere Texel einer Textur mit imageStore() und danach lese ich diese Texel in einem anderen Shader als sampler2D mit Textur(), aber ich bekomme die Werte, die im Textur vor dem imageStore(). Mit imageLoad() funktioniert es gut, aber ich muss filtern und die Leistung von texture() ist besser, also gibt es eine Möglichkeit, die modifizierten Daten mit texture() zu bekommen?Lesen von Texeln nach imageStore()
Edit:
erste Fragment-Shader (zum Schreiben):
#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));
}
zweite Fragment-Shader (zum Lesen):
#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);
}
Das ist, wie ich laufe die Shadern:
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);
Ich habe diese einfache Anwendung gemacht, um zu testen, dass, weil die echte sehr komplex ist, ich zuerst die Textur mit rot lösche, aber die Texel nicht blau erscheinen (außer imageLoad im zweiten frag. Shader).
Sie müssen die Situation genauer beschreiben. Wo machst du das Schreiben und wo machst du das Lesen? Veröffentlichen Sie einen Code. –