1

我正在阅读有关此 Qt 错误报告的评论:

https://bugreports.qt-project.org/browse/QTBUG-32741

该错误报告建议使用顶点着色器QSGGeometry和 C++ 中的动画。我知道 QML 方面支持着色器,但是如何从QSGGeometry通过 C++ 子类处理的材质访问着色器QQuickItem(正如我解释错误报告所建议的那样)?据我所知,QML 中访问的顶点着色器通常用于变形现有几何体,而不是真正用于创建新几何体或动画几何体。

或者报告是否建议完全绕过 QML 来完成这项任务?

将数据传递给顶点着色器以进行原始绘图并将 GL 视口作为快速项会非常酷,但我认为 QML 着色器不是为此而设计的。

4

1 回答 1

2

在您的QQuickItem覆盖updatePaintNode()方法的子类中,应该创建(并在需要时更新)实例并使用为特定几何类型配置的实例进行QSGGeometryNode设置。QSGGeometry这将允许您直接控制顶点缓冲区对象(只有一个,但具有任意顶点属性布局)并使用您的自定义着色器。

请参阅 qt 文档中的“自定义几何”示例。完整项目在官方存储库中。

更有趣的例子是“SGNode 中的纹理”。它使用QQuickWindow::beforeRendering()信号能够运行完全任意的 OpenGL 代码。在此示例中,自定义渲染转到帧缓冲区对象。后来这个 FBO 被用作QSGSimpleTextureNode子类中的纹理。

于 2013-09-15T05:19:28.240 回答