我的自定义 QQuickItem 目前执行以下操作
- 创建一个 QSGNode 子类 QSGSimpleTextureNode
- 在节点预处理函数中,创建一个 QOpenGLFramebufferObject 来绘制
- 使用 QPainter 在 QOpenGLFramebufferObject 上绘制
- 将 QOpenGLFramebufferObject 的内容显示为节点内容
我将 FBO 转换为可以在 QSGSimpleTextureNode 上设置的 QSGTexture 的过程如下。
QImage img = m_fbo->toImage();
QSGTexture* tex = m_window->createTextureFromImage(img, QQuickWindow::TextureCanUseAtlas);
setTexture(tex);
这似乎非常低效,即使具有相对合理大小的 FBO,应用程序也开始变得真正框架化。
我的问题如下。
- 有没有更简单的方法将 FBO 放入 QSGTexture?
- 我应该使用更好的 QPaintDevice 兼容项目而不是 QOpenGLFramebufferObject 吗?
- 我应该扩展一个比 QSGSimpleTextureNode 更好的子类来做我想做的事吗?
谢谢!