【QML COOK】- 012-在QML中使用OpenGL渲染

本文是参照了两个文章编写的。

一是QML的例子:Scene Graph - OpenGL Under QML | Qt Quick 6.6.1

二是关于SceneGraph的介绍:Qt Quick Scene Graph | Qt Quick 6.2.11

这里我提取一下重点方便大家理解。

  1. 一个QML程序只能用一种计算机图形接口。不能有的组件用OpenGL、有的用Vulkan、有的用Direct 3D等
  2. 渲染都是渲染到窗口上的而不是组件上
  3. 窗口发出 QQuickWindow::beforeSynchronizing信号后,可以保证GUI线程是阻塞的。因此我们连接该信号,在该信号的槽函数中获取渲染时需要的GUI的属性值(因为GUI线程阻塞,因此属性值不会发生变化)。

1. 编写代码,由于本例代码过长,因此将代码放到了gitee上。

EniacCheng/my-qml-demo - Gitee.com

这里将重点介绍一下。

一、首先在main函数中,调用QQuickWindow::setGraphicsApi(QSGRendererInterface::OpenGL);。设置整个程序使用OpenGL接口进行渲染。

二、创建openglitem类。该类就是一个普通的C++定义的QML元素类型(见:【QML COOK】- 006-用C++定义一个QML元素类型-CSDN博客)。它的所用就是接收窗口信号为OpenGL的渲染提供参数。

三、在openglitem中链接QQuickWindow::beforeSynchronizing信号,注意连接方式为Qt::DirectConnection。因为此时GUI线程一定是阻塞的因此使用Qt::DirectConnection方式没有问题。

四、在QQuickWindow::beforeSynchronizing信号的槽函数sync中将窗口的宽高值传给OpenGL渲染类。

五、定义openglrenderer类,该类是OpenGL的渲染类。该类的作用是用OpenGL接口渲染一个绿色正方形。

OpenGLRenderer::prepareShaderProgram()用于设置shader程序。

OpenGLRenderer::render()用于渲染

2. 运行程序

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/642920.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot Vue美食网站系统

大家好✌!我是Dwzun。很高兴你能来阅读我,我会陆续更新Java后端、前端、数据库、项目案例等相关知识点总结,还为大家分享优质的实战项目,本人在Java项目开发领域有多年的经验,陆续会更新更多优质的Java实战项目&#x…

测试工程师必看!测试用例设计全解析,让你彻底掌握

测试工程师在入行时,都会接触到一个名词——测试用例,都知道测试用例是干什么用的,提到设计测试用例的方法,大部分测试工程师都会侃侃而谈:等价类法、边界值法、判定表法、正交分解法……这些方法说起来都如数家珍&…

MySQL的MVCC

MVCC(多版本并发控制)multiversion concurrency control 读读并发:可以并发 读写并发(innoDB):MVCC机制解决 写写:互斥 快照读:不加锁的简单select属于快照读,即不加…

揭秘大数据时代的内存数据存储、数据缓存:redis缓存框架!

介绍:Redis 是一个开源的、基于内存的数据存储系统,它也可以持久化数据到硬盘上。Redis 以其高性能、高可靠性和丰富的数据结构支持而著称,在现代应用程序中被广泛用作数据库、缓存和消息中间件。 主要特点: 键值存储:…

Unity工程没有创建.sln文件,导致打开C#文件无法打开解决方案

最近又开始折腾些Unity的小项目,重新遇到一些常见的小问题 点击报错文件 却没有打开文件 于是查看了下打开Window->Package Manager 选择Unity Registry 搜索Visual Studio Editor,发现并没有安装 同理,也可以安装VSCode的插件 问题解决了…

JVM多线程读写和锁

文章目录 1 原子性2 可见性3 有序性4 CAS5 synchronized 优化5.1 轻量级锁5.2 锁膨胀5.3 自旋5.4 偏向锁5.5 其他优化 1 原子性 问题:两个线程对初始值为 0 的静态变量 i 一个做自增,一个做自减,各做 5000 次,结果是 0 吗? i产生…

.NET集成IdGenerator生成分布式全局唯一ID

前言 生成分布式唯一ID的方式有很多种如常见的有UUID、Snowflake(雪花算法)、数据库自增ID、Redis等等,今天我们来讲讲.NET集成IdGenerator生成分布式全局唯一ID。 分布式ID是什么? 分布式ID是一种在分布式系统中生成唯一标识符…

Unity - transform使用

Test_03 TransformTest 控制物体位置和物体间的父子关系 public class TransformTest : MonoBehaviour {void Start(){// 【获取位置】// 世界坐标中物体的位置Debug.Log(transform.position);// 物体相对于父物体的位置Debug.Log(transform.localPosition);// 【…

实用的SQLite数据库可视化管理工具推荐

前言 俗话说得好“工欲善其事,必先利其器”,合理的选择和使用可视化的管理工具可以降低技术入门和使用门槛。今天推荐7款实用的SQLite数据库可视化管理工具(GUI),帮助大家更好的管理SQLite数据库。 什么是SQLite? SQLite是一个…

【每日一题】2.LeetCode——删除有序数组中的重复项

📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ 🙏小杨水平有限,欢迎各位大佬指点&…

JavaScript中的事件

1 事件(Event) 事件也就是用户或者浏览器执行的某种动作,而JS与Html之间的交互是通过事件而来的。使用仅在事件发生时执行的**监听器(事件处理程序)**来订阅事件。web浏览器可以发生多种事件,在…

【Linux】yum本地配置

配置将来是在干什么? yum会根据/etc/yum.repos.d/该路径下面的配置文件,来构成自己的下载路径,(根据OS版本,根据你要下载的软件),yum帮助我们下载,安装 一般的机器,内置…

10.常用统计分析方法——主成分分析和因子分析

基础知识: 主成分分析概念 主成分分析PCA:是一种数据降维的技巧,将大量相关变量转化为一组很少的不相关变量,这些无关变量称为主成分。 在特征选择方法中有一种方法是方差过滤,即如果一个特征的方差很小&#xff0c…

yarn的安装及使用教程

Yarn 是一个快速、可靠、安全的包管理工具,用于管理 JavaScript 项目的依赖项。下面是关于 Yarn 的安装和基本使用的详细教程: 安装 Yarn 访问 Yarn 官网 并按照指示下载适合你操作系统的安装程序。安装程序会自动安装 Yarn,并将其添加到系…

强化学习:MuJoCo机器人强化学习仿真入门(1)

声明:我们跳过mujoco环境的搭建,搭建环境不难,可自行百度 下面开始进入正题(需要有一定的python基础与xml基础): 下面进入到建立机器人模型的部分: 需要先介绍URDF模型文件和导出MJCF格式 介绍完…

CNAS中兴新支点——软件测试中的非功能测试包含哪些测试内容

软件测试中的非功能测试是指对软件产品在功能之外的其他特性进行测试,包括性能测试、可靠性测试、安全性测试、易用性测试、可维护性测试等。 1、性能测试:性能测试是对软件产品在特定条件下的性能进行测试和评估。包括负载测试、强度测试、数据库容量测…

Flink中的时间和窗口(时间语义,水位线,窗口,迟到数据的处理)

目录 Flink中的时间和窗口 1时间语义 1.1Flink中的时间语义 1.1.1处理时间 1.1.2事件时间 1.2那种时间语义更重要 2 水位线 2.1 事件时间和窗口 2.2 什么是水位线 2.3 如何生成水位线 2.3.1使用WatermarkGenerator 2.3.2使用SourceFunction 2.4 水位线的传递 2.5 水位…

Adobe XD 55.2.12.2软件安装教程(附软件下载地址)

软件简介: 软件【下载地址】获取方式见文末。注:推荐使用,更贴合此安装方法! Adobe XD 55.2.12.2是一款专业级的图形界面UI/UX设计工具,拥有丰富的功能和强大的性能。它集成了原型设计、界面设计和交互设计等多种功能…

从0开始学习C++ 第十一课:常量

第十一课:常量 学习目标: 了解什么是常量以及为什么要使用常量。学习如何在C中定义常量。理解字面量常量、const关键字、宏定义 学习内容: 常量的概念 概念: 常量是在程序执行过程中其值不会改变的量。使用常量可以提高程序的可…

系统移植及相关介绍

一.系统移植 系统移植(System Porting)是将一个操作系统从一种硬件平台迁移到另一种硬件平台的过程。这个过程涉及将操作系统的内核和相关的软件组件调整和适配到新的硬件环境中。 1.嵌入式系统的特点 三低:功耗低 成本低 体积小 两高&am…