Qt / QML / OpenGL: Z-упорядочение не работает с полупрозрачными элементами с OpenGL под QML - PullRequest
3 голосов
/ 03 марта 2020

Следуя найденным примерам здесь , возникла проблема, когда полупрозрачные элементы всегда рисуются поверх непрозрачных элементов независимо от их порядка в QML или от того, как установлено свойство z.

Без элемента OpenGL все работает как положено

import QtQuick 2.14
import TestScene 1.0

Item {
    width: 160
    height: 120

    /*
    TestScene {
        // draw checkered pattern in OpenGL
    }
    */

    Rectangle {
        id: rect1

        x: 32
        y: 32
        width: 32
        height: 32

        color: Qt.rgba(1, 0, 0, 0.5)
    }

    Rectangle {
        id: rect2

        x: 32+16
        y: 32+16
        width: 32
        height: 32

        color: Qt.rgba(0, 0, 1, 1)
    }
}

желательно

При раскомментировании элемента TestScene

результат

Это происходит, даже если rect2 установлен перед rect1 и независимо от свойства z любого из элементов.

Код OpenGL в C ++ во многом похож на пример Squircle и это на Windows 10 и Qt 5.14.

Просто любопытно, почему это происходит и можно ли это предотвратить или это просто ограничение рисования OpenGL в QML.

1 Ответ

2 голосов
/ 03 марта 2020

Посмотрите на QOpenGLFrameBuffer.

https://doc.qt.io/qt-5/qopenglframebufferobject.html

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

Существует пример проекта, расположенный по адресу: qt \ examples \ $ QTVERSION \ quick \ scenegraph \ textureinsgnode

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...