невозможно нарисовать вложение второго цвета QOpenGLFramebufferObject - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть 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);

Когда я пытаюсь прочитать из этого 2-го вложения, используя значение textures () [1], привязанное к сэмплеру шейдера, значения всегда кажутся равными нулю.

Нужно ли мнесделать что-нибудь с QOpenGLFramebufferObject, чтобы разрешить рисование во втором цветном приложении?

1 Ответ

1 голос
/ 08 ноября 2019

Я действительно должен был сам вызывать glDrawBuffers. Я предполагал, что это было обработано связыванием FBO, но очевидно нет.

    QOpenGLExtraFunctions* f = QOpenGLContext::currentContext()->extraFunctions();
    GLenum bufs[2] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1 };
    f->glDrawBuffers(2, bufs);

Мне кажется странным, что абстракция FBO поддерживает цветовые вложения, но требует дополнительных функций для их использования.

...