无法绘制到 QOpenGLFramebufferObject 的第二种颜色附件
can't draw to second color attachment of QOpenGLFramebufferObject
我有一个 QOpenGLFramebufferObject,我一直在我的应用程序中使用 texture() 写入和读取它。我添加了第二种颜色的附件以包含一些额外的数据,但似乎没有数据写入其中。
// creating the FBO (this has been working)
_drawFbo = new QOpenGLFramebufferObject(PAINT_FBO_WIDTH, PAINT_FBO_WIDTH, QOpenGLFramebufferObject::Depth);
// now I'm adding another color attachment
_drawFbo->addColorAttachment(PAINT_FBO_WIDTH, PAINT_FBO_WIDTH);
然后在我的着色器中,我在着色器绑定时写入两个附件:
layout(location=0) out vec4 meshWithPaintColor;
layout(location=1) out vec4 primitiveId;
void main() {
...
meshWithPaintColor = vec4(finalColor, 0);
primitiveId = vec4(1,1,1,1);
当我尝试使用绑定到着色器采样器的 textures()[1] 值从第二个附件中读取时,值似乎始终为零。
我是否需要对 QOpenGLFramebufferObject 执行任何操作才能允许绘制到第二种颜色附件?
我确实不得不自己调用 glDrawBuffers。我以为这是由 FBO 绑定处理的,但显然不是。
QOpenGLExtraFunctions* f = QOpenGLContext::currentContext()->extraFunctions();
GLenum bufs[2] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1 };
f->glDrawBuffers(2, bufs);
FBO 抽象支持颜色附件,但需要额外的函数才能使用它们,这对我来说似乎很奇怪。
我有一个 QOpenGLFramebufferObject,我一直在我的应用程序中使用 texture() 写入和读取它。我添加了第二种颜色的附件以包含一些额外的数据,但似乎没有数据写入其中。
// creating the FBO (this has been working)
_drawFbo = new QOpenGLFramebufferObject(PAINT_FBO_WIDTH, PAINT_FBO_WIDTH, QOpenGLFramebufferObject::Depth);
// now I'm adding another color attachment
_drawFbo->addColorAttachment(PAINT_FBO_WIDTH, PAINT_FBO_WIDTH);
然后在我的着色器中,我在着色器绑定时写入两个附件:
layout(location=0) out vec4 meshWithPaintColor;
layout(location=1) out vec4 primitiveId;
void main() {
...
meshWithPaintColor = vec4(finalColor, 0);
primitiveId = vec4(1,1,1,1);
当我尝试使用绑定到着色器采样器的 textures()[1] 值从第二个附件中读取时,值似乎始终为零。
我是否需要对 QOpenGLFramebufferObject 执行任何操作才能允许绘制到第二种颜色附件?
我确实不得不自己调用 glDrawBuffers。我以为这是由 FBO 绑定处理的,但显然不是。
QOpenGLExtraFunctions* f = QOpenGLContext::currentContext()->extraFunctions();
GLenum bufs[2] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1 };
f->glDrawBuffers(2, bufs);
FBO 抽象支持颜色附件,但需要额外的函数才能使用它们,这对我来说似乎很奇怪。