Я пытаюсь связать две текстуры с моим компьютерным шейдером.
О моих текстурах:
GLuint texOne;
glGenTextures(1, &texOne);
//glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, texOne);
glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, w,h);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, w, h, GL_RGBA, GL_UNSIGNED_BYTE, bytes.data());
обе текстуры инициализируются таким образом.
Мой шейдер выглядит так:
#version 430 core
#extension GL_ARB_explicit_uniform_location : enable
#extension GL_ARB_separate_shader_objects : enable
layout (local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
layout (location = 0, rgba8) uniform image2D imageSrc;
layout (location = 1, rgba8) uniform image2D imageDst;
void main()
{
vec4 imageData = imageLoad(imageSrc, ivec2(gl_GlobalInvocationID.xy));
imageStore(imageDst, ivec2(gl_GlobalInvocationID.xy), imageData);
}
Я также пытался сохранить другие значения в текстуру imageDst в следующем стиле: vec4 (0,1,1,1)
каким-то образом привязка видит только imageSrc, а не imageDst. При использовании только одной текстуры все работает нормально.
Привязка текстур к шейдеру
GLuint texOne;
glGenTextures(1, &texOne);
//glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, texOne);
glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, w,h);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, w, h, GL_RGBA, GL_UNSIGNED_BYTE, bytes.data());
GLuint texTwo;
glGenTextures(1, &texTwo);
//glActiveTexture(GL_TEXTURE2);
glBindTexture(GL_TEXTURE_2D, texTwo);
glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, w,h);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, w, h, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
//bind textures
glBindImageTexture(0, texOne, 0, GL_FALSE, 0, GL_READ_WRITE, GL_RGBA8);
glBindImageTexture(1, texTwo, 0, GL_FALSE, 0, GL_READ_WRITE, GL_RGBA8);
//compute
glMemoryBarrier(GL_ALL_BARRIER_BITS);
glDispatchCompute(w,h,1);
glMemoryBarrier(GL_ALL_BARRIER_BITS);
Я думаю, ошибка должна быть где-то в строке glBindImageTexture ...
Как работает эта команда?
это первый параметр макета (локации)?
второй параметр мой textureId?
Заранее спасибо