【发布时间】:2016-04-12 08:53:26
【问题描述】:
我在 QML 中使用 QQuickFramebufferObject 来绘制 OpenGL 代码。我找到了几种使用 QML 进行 OpenGL 的方法,其中一种(在 Qt 的 Squircle 示例中)是在所有内容下方或上方绘制所有 OpenGL,但我使用的是 QQuickFramebufferObject 方法,因为我需要常规的 QML 对象在上面并在 OpenGL 绘制的对象下方。
所有的 OpenGL 代码都可以正常工作。 QQuickFramebufferObject 的背景需要是透明的,这样才能看到下面的 QML 对象。 (我的 QQuickFramebufferObject 绘制了一个抽象形状。)但是,QQuickFramebufferObject 似乎在屏幕上挡住了它的矩形,并且没有在下面显示任何东西。我试过了
glClearColor( 0.0, 0.0, 0.0, 0.0f );
glClear( GL_COLOR_BUFFER_BIT );
所以背景是透明的,但我只是得到一个白色矩形。即使我完全跳过调用 FBO 的渲染,它仍然会覆盖所有内容,所以我认为这是 OpenGL 代码以及 QML 如何处理 FBO 之外的东西。
我想要什么:
我得到了什么:
【问题讨论】:
-
使用 QSG_VISUALIZE=overdraw 选项启动以查看该矩形是否不透明。可能 QQuickFramebufferObject 方法会导致 QSGSimpleTextureNode 并且可能有一种方法可以为其启用半透明。如果这还不够,您应该能够使用 QSGGeometryNode 实现项目渲染,因此它将直接渲染几何图形而无需通过纹理广告牌。