Geringe Präzision und Klemmung beim Schreiben auf Fließkomma-FBO

Ich habe einen FBO, der folgendermaßen erstellt wurde:

glGenRenderbuffers(1, &m_depthStencilBuffer);
glBindRenderbuffer(GL_RENDERBUFFER, m_depthStencilBuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_STENCIL, m_width, m_height);
glBindRenderbuffer(GL_RENDERBUFFER, 0);

glGenTextures(1, &m_texture);
glBindTexture(GL_TEXTURE_RECTANGLE_ARB, m_texture);
glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP);
glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA32F_ARB, m_width, m_height, 0, GL_RGBA, GL_FLOAT, 0);
glBindTexture(GL_TEXTURE_RECTANGLE_ARB, 0);

glGenFramebuffers(1, &m_frameBuffer);
glBindFramebuffer(GL_FRAMEBUFFER, m_frameBuffer);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_RECTANGLE_ARB, m_texture, 0);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, m_depthStencilBuffer);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, m_depthStencilBuffer);
assert(GL_FRAMEBUFFER_COMPLETE == glCheckFramebufferStatus(GL_FRAMEBUFFER));
glBindFramebuffer(GL_FRAMEBUFFER, 0);
assert(GL_NO_ERROR == glGetError());

Dazu rendere ich dann mit diesem Minimalfragment-Programm:

void main() {
    gl_FragColor = float4(3.001001f, 2.00002f, 7.00003f, 4.00004f);
}

Wenn ich die Pixel so auslese:

glReadPixels(0, 0, width, height, GL_RGBA, GL_FLOAT, &pixels[0]);

und überprüfe die Pixel, die von dem obigen Fragmentprogramm geschrieben wurden (1, 1, 1, 1). Ich habe nur das hinzugefügtglReadPixels Zu Testzwecken erhalte ich das gleiche Problem, wenn ich versuche, den FBO in einem anderen Fragmentprogramm mit abzutastentextureRect.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage