В OpenGL Я пытаюсь вывести немасштабированный поплавок из моего шейдера фрагмента в привязку цвета FBO для мыши по набору значений. Однако я не могу заставить свой код шейдера фрагмента правильно записать значение.GL_32F и glReadPixels
добавить вложение цвета для хранения значений выбора в фреймбуфером рисую к следующим:
// ... Bind FBO .etc.
glTexImage2D(
GL_TEXTURE_2D,
0,
GL_R32F,
DrawTextureDims.width(),
DrawTextureDims.height(),
0,
GL_RED,
GL_FLOAT,
0);
glFramebufferTexture2D(
GL_FRAMEBUFFER,
GL_COLOR_ATTACHMENT2,
GL_TEXTURE_2D,
pointsMeshData->magnitudeTexture,
0);
и настройка Жеребьевка буферов до рисования следующим образом:
// ...
GLenum drawBufs[2] {
GL_COLOR_ATTACHMENT0,
GL_COLOR_ATTACHMENT2
};
glDrawBuffers(2,drawBufs);
GLfloat clearMagnitude[4] { 0,0,0,0 };
glClearBufferfv(GL_COLOR,1,clearMagnitude);
// Bind VAO and shader. Setup uniforms and call glDrawElements()
И, наконец, считывается следующим образом:
...
glBindFramebuffer(GL_READ_FRAMEBUFFER,drawData->renderFBO.handle());
glReadBuffer(GL_COLOR_ATTACHMENT2);
glBindBuffer(GL_PIXEL_PACK_BUFFER,0);
*magnitude = 0.f;
glReadPixels(x,y,1,1,GL_RED,GL_FLOAT,magnitude);
...
Однако, когда я выводю на второй цветной прижим nt, используя следующий шейдер фрагмента, ничего не нарисовано. Я вернусь цветом я очищенный с (clearMagnitude) от glReadPixels()
#version 330
in float scale;
uniform sampler1D uPalette;
layout(location=0) out vec4 color;
layout(location=1) out float oScale;
void main(void)
{
color = texture(uPalette,scale);
oScale = scale;
}
С другой стороны, когда я вывожу, используя следующий (явно неправильно) фрагмент шейдера я получаю значение масштабируется (0-1) назад в glReadPixels():
#version 330
in float scale;
uniform sampler1D uPalette;
layout(location=0) out vec4 color;
layout(location=1) out vec4 oScale;
void main(void)
{
color = texture(uPalette,scale);
oScale = vec4(scale,scale,scale,1);
}
Что я делаю неправильно? Как я могу выводить и читать один немасштабированный поплавок в GLSL?
oScale = vec4 (шкала, масштаб, масштаб,/1 /); В самом деле? –