Неправильное альфа-смешение при рендеринге в QGLFramebufferObject

Я пишу рендерер векторной графики на основе OpenGL для своего приложения. Он должен визуализироваться в объект кадрового буфера, а не напрямую на экран. Поскольку я пишу приложение в Qt, я использую QGLFramebufferObject, который является классом-оберткой для объекта кадрового буфера OpenGL.

Я создал минимальный пример, который показывает неправильный результат, который я также получаю при рендеринге более сложных вещей (например, используя фрагментный шейдер, который устанавливает цвета с не-одним альфа-значением). Я просто рисую красный круг и полупрозрачный зеленый на черном очищенном экране, а затем то же самое на FBO:

void MainWidget::initializeGL()
{
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    glClearColor(0, 0, 0, 0);
}

void MainWidget::resizeGL(int w, int h)
{
    glViewport(0, 0, w, h);
}

void MainWidget::paintGL()
{
    // DRAW ON THE SCREEN
    {
        glClear(GL_COLOR_BUFFER_BIT);
        glPointSize(100);
        glEnable(GL_POINT_SMOOTH);
        glBegin(GL_POINTS);
        glColor4f(1, 0, 0, 1);
        glVertex2f(-.2, 0);
        glColor4f(0, 1, 0, .5);
        glVertex2f( .2, 0);
        glEnd();
    }

    QGLFramebufferObject fbo(width(), height());
    fbo.bind();

    // DRAW ON THE FBO USING THE SAME CODE AND THE SAME CONTEXT
    {
        glClear(GL_COLOR_BUFFER_BIT);
        glPointSize(100);
        glEnable(GL_POINT_SMOOTH);
        glBegin(GL_POINTS);
        glColor4f(1, 0, 0, 1);
        glVertex2f(-.2, 0);
        glColor4f(0, 1, 0, .5);
        glVertex2f( .2, 0);
        glEnd();
    }

    fbo.release();
    fbo.toImage().save("debug.png");
}

Результат выглядит следующим образом на экране (масштаб 400%):

Визуализация в QGLFramebufferObject выглядит следующим образом (также масштабируется на 400%):

Обратите внимание, что это изображение не является полностью непрозрачным, поэтому здесь оно является тем же изображением с добавленной за ним шахматной доской:

Даже область, в которой два круга перекрываются, нет полностью непрозрачный. И сглаживание выглядит довольно некрасиво.

Как это произошло? И как я могу это исправить?

Я уже попробовал:

Различные функции смешивания.Явное отключение буфера глубины, буфера трафарета и выборки в QGLFramebufferObject. Я'я не уверен, что формат по умолчанию QGLFramebufferObject добавляет что-то, что я не делаюне хочу

Ответы на вопрос(1)

Ваш ответ на вопрос