В настоящее время я пытаюсь записать изображение, используя imageStore в OpenGL.Однако, используя renderdock в качестве отладчика, я нахожу только черную текстуру после запуска моей программы.
Я создаю и привязываю изображение для записи следующим образом:
glGenTextures(1, &textureID);
glBindTexture(target, textureID);
glObjectLabel(GL_TEXTURE, textureID, -1, "\"3D Texture\"");
glTexStorage3D(target, 1, GL_RGBA8, width, height, depth);
glTexParameteri(target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(target, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
Затем загружаютекстуру для программы, выполнив:
glBindImageTexture(0, textureID, 0, GL_TRUE, 0, GL_READ_WRITE, GL_RGBA8);
GLuint location = glGetUniformLocation(programID, uniform);
glUniform1i(location,0);
И, наконец, я отрисовываю, вызывая glDrawArrays ().
Мой фрагментный шейдер выглядит так:
#version 440
out vec3 f_pos;
out vec3 f_norm;
out vec2 f_uv;
layout(RGBA8) uniform image3D volumeMap;
void main()
{
imageStore(volumeMap, ivec3(0,0,0),
vec4(0,1,1,0));
}
Так что мои ожиданияэто найти голубой пиксель в верхнем левом углу первого слоя.Однако этот пиксель черный.
Я успешно загрузил и прочитал из сэмплеров с помощью вызова texture ().
Я не уверен, что пропускаю шаги или неправильно выполняю свои действия.
РЕДАКТИРОВАТЬ:
Я изменил свой код, чтобы не полагаться на RenderDoc, чтобыпроверьте цвет.
Итак, я отрисовываю вещи следующим образом
Final Fragment Shader:
#version 440
out vec4 fragment_color;
layout(binding=3, RGBA8) uniform image3D vMap;
void main()
{
fragment_color = imageLoad(vMap, ivec3(0,0,0));
}
C ++
glUseProgram(Program1);
/*load texture as above*/
draw();
glMemoryBarrier(GL_SHADER_IMAGE_ACCESS_BARRIER_BIT);
glUseProgram(Program2);
/*load texture as above*/
draw();
Draw просто настраиваетсягеометрия буферизуется, а затем вызывает glDrawArrays ().
В результате получается черная сетка, где я ожидаю, что голубая сетка