Я просто хочу прочитать вывод RGBA 'deepColor' позже через glReadPixels () из отдельного объекта кадрового буфера.К сожалению, я могу только прочитать вывод «fragColor» (GL_COLOR_ATTACHMENT0).Что я тут не так делаю?
.fs
layout(location = 0) out highp vec4 fragColor;
layout(location = 1) out highp vec4 depthColor;
void main(void)
{
fragColor = vec4(0.2, 0.2, 0.2, 1.0);
depthColor = vec4(0.8, 0.8, 0.8, 1.0);
}
.cpp
GLuint tex;
GLint texWidth = m_pFbo->width(), texHeight = m_pFbo->height();
m_func->glGenTextures (1, &tex);
m_func->glBindTexture (GL_TEXTURE_2D, tex);
m_func->glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
m_func->glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
m_func->glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
m_func->glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
m_func->glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, texWidth, texHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
GLint maxAttach = 0;
m_func->glGetIntegerv(GL_MAX_COLOR_ATTACHMENTS, &maxAttach);
qDebug() << "maxAttach" << maxAttach;
GLint dfb = 0;
m_func->glGetIntegerv (GL_FRAMEBUFFER_BINDING, &dfb);
GLuint fb;
m_func->glGenFramebuffers (1, &fb);
m_func->glBindFramebuffer (GL_FRAMEBUFFER, fb);
GLenum DrawBuffers[2] = {GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1};
m_func->glDrawBuffers(2, DrawBuffers);
m_func->glFramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, GL_TEXTURE_2D, tex, 0);
GLenum status = m_func->glCheckFramebufferStatus(GL_FRAMEBUFFER);
qDebug() << "status" << status;
m_func->glBindFramebuffer (GL_FRAMEBUFFER, dfb);
m_func->glClearColor(0, 0, 0, 0);
m_func->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
m_pGeom->draw(&m_shaderProgram);
m_shaderProgram.release();
m_pWindow->resetOpenGLState();
.cpp
m_func->glReadBuffer(GL_COLOR_ATTACHMENT1);
GLubyte z[4];
m_func->glReadPixels(xy.x(), hght - xy.y(), 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, z);