Использование текстур с вычислительными и фрагментными шейдерами

Я пытаюсь использовать текстуру для хранения некоторых данных для передачи между вычислительным шейдером, где данные рассчитываются, на фрагментный шейдер, где он используется.

Я создаю текстуру и заполняю ее пустыми значениями, используя:

GLuint texID;
glGenTextures(1, &texID);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 256, 256, 0, GL_RGBA, GL_FLOAT, NULL);

Затем я делаю его доступным для вычислительного шейдера, используя:

glBindImageTexture(0, texID, 0, GL_FALSE, 0, GL_WRITE_ONLY, GL_RGBA32F);

Вот спецификация для этой функции, так что вы можете проверить, я использую правильные аргументы: https://www.opengl.org/sdk/docs/man/html/glBindImageTexture.xhtml

Затем внутри вычислительного шейдера я получаю текстуру, используя:

layout(rgba32f) coherent uniform image2D Texture;

И тогда я установил одно из значений текстуры в качестве теста:

 imageStore(Texture, ivec2(0,0), vec4(0.1, 0.2, 0.3, 1.0));

Который должен поместить этот vec4 в текстуру в позиции (0,0).

Затем добавьте текстуру как униформу для программы, которой принадлежит фрагментный шейдер:

GLint uniformID = glGetUniformLocation(programID, "Texture");
glUniform1i(uniformID, 0);

Затем в фрагментном шейдере я получаю текстуру:

uniform sampler2D Texture;

И попытайтесь установить цвет чего-либо как значение в текстуре в позиции (0,0):

color = texture2D(Texture, ivec(0,0));

Однако в результате я просто становлюсь черным: то есть (0,0, 0,0, 0,0, 1,0). Я всегда получаю это независимо от того, что я установил в вычислительном шейдере.

Я, вероятно, упускаю что-то действительно очевидное, поэтому немного кода, показывающего, что я пропускаю, было бы здорово

2

Решение

Задача ещё не решена.

Другие решения