在QWidget中,可以使用QOpenglWidget调用opengl接口进行渲染,因为QWidget大部分控件都是依赖于平台的(cpu绘制),所以我们调用opengl的接口时不需要考虑opengl的context共享,所以相对简单。但是qml的渲染策略有所不同,在可以使用硬件加速的环境下,qml是把当前所有可视元素都“堆放”在一起,然后统一使用gpu渲染。所以如果我们想要在qml中使用opengl接口进行绘制,需要考虑调用的时机以及不同窗口之间资源的共享,下面提供一种方法。
想要在qml中使用,我们需要继承QQuickItem,现在我们定义一个MyCube 用来绘制一个立方体。
class CubeRender;
class MyCube : public QQuickItem
{
Q_OBJECT
public:
explicit MyCube(QQuickItem* parent = nullptr);
protected slots:
void sync();
void cleanUp();
private:
CubeRender* m_render{nullptr};
signals:
};
其中CubeRender 是对opengl接口的一个封装,稍后再解释。先看看quick的渲染流程:


本文介绍了如何在QML的渲染环境中使用OpenGL,重点讲解了在QQuickItem基础上创建自定义渲染组件CubeRender,确保跨线程安全并正确同步资源。涉及初始化GL、窗口大小调整和绘制时机等关键步骤。
最低0.47元/天 解锁文章
483

被折叠的 条评论
为什么被折叠?



