如何在qml中使用opengl接口进行渲染

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

在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的渲染流程:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值