Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
mahuifa
QMDemo
提交
5fba6d7d
Q
QMDemo
项目概览
mahuifa
/
QMDemo
通知
1
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Q
QMDemo
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
5fba6d7d
编写于
10月 02, 2022
作者:
mahuifa
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
docs:增加OpenGLDemo.md描述文件
1、绘制时增加打印绘制一圈的时间。
上级
bc4d3f8d
变更
10
隐藏空白更改
内联
并排
Showing
10 changed file
with
84 addition
and
4 deletion
+84
-4
OpenGLDemo/OpenGLDemo.assets/TestOpenGLWindow1-tuya.gif
OpenGLDemo/OpenGLDemo.assets/TestOpenGLWindow1-tuya.gif
+0
-0
OpenGLDemo/OpenGLDemo.assets/TestOpenGLWindow2-tuya.gif
OpenGLDemo/OpenGLDemo.assets/TestOpenGLWindow2-tuya.gif
+0
-0
OpenGLDemo/OpenGLDemo.md
OpenGLDemo/OpenGLDemo.md
+63
-0
OpenGLDemo/TestOpenGLWindow/TestOpenGLWindow.pro
OpenGLDemo/TestOpenGLWindow/TestOpenGLWindow.pro
+5
-1
OpenGLDemo/TestOpenGLWindow/openglwidget.cpp
OpenGLDemo/TestOpenGLWindow/openglwidget.cpp
+5
-0
OpenGLDemo/TestOpenGLWindow/openglwidget.h
OpenGLDemo/TestOpenGLWindow/openglwidget.h
+2
-1
OpenGLDemo/TestOpenGLWindow/openglwindow.cpp
OpenGLDemo/TestOpenGLWindow/openglwindow.cpp
+5
-0
OpenGLDemo/TestOpenGLWindow/openglwindow.h
OpenGLDemo/TestOpenGLWindow/openglwindow.h
+2
-2
OpenGLDemo/TestOpenGLWindow/widget.cpp
OpenGLDemo/TestOpenGLWindow/widget.cpp
+1
-0
README.md
README.md
+1
-0
未找到文件。
OpenGLDemo/OpenGLDemo.assets/TestOpenGLWindow1-tuya.gif
0 → 100644
浏览文件 @
5fba6d7d
496.2 KB
OpenGLDemo/OpenGLDemo.assets/TestOpenGLWindow2-tuya.gif
0 → 100644
浏览文件 @
5fba6d7d
765.0 KB
OpenGLDemo/OpenGLDemo.md
0 → 100644
浏览文件 @
5fba6d7d
# Qt OpenGL开发Demo
[toc]
---
## 1、说明
| 类名 | 功能 |
| ---------------- | ---------------------------------------- |
| TestOpenGLWindow | 测试比较QOpenGLWidget和QOpenGLWindow性能 |
| | |
## 2、相关博客
*
## 3、实现效果
### 1.1 VideoPlay
> 1. 使用OpenGl 1.0 API绘制三角形(实现简单,已经淘汰的API);
> 2. 使用自定义Shader脚本绘制三角形(实现较为复杂);
> 3. 分别使用QOpenGLWindow和QOpenGLWidget绘制三角形;
> 4. 分别使用定时器、子线程刷新绘制;
> 5. Qt官方说QOpenGLWindow性能比QOpenGLWidget强,具体强不强,强多少要比过才知道,通过比较,QOpenGLWindow性能确实比QOpenGLWidget强。
*
**以下的测试方式并不全面,只代表个人观点。**
*
**测试1:**
使用定时器刷新绘制,由于定时器是在UI线程执行,如果当前还没执行完就会阻塞住,从测试线性可以看出
*
单独使用定时器刷新QOpenGLWidget绘制会很慢;
*
单独使用定时器刷新QOpenGLWindow绘制会很快;
*
如果使用定时器同时刷新QOpenGLWidget和QOpenGLWindow,会发现QOpenGLWindow也会被拖慢。
![TestOpenGLWindow1-tuya](OpenGLDemo.assets/TestOpenGLWindow1-tuya.gif)
*
**测试二:**
使用子线程刷新绘制;
*
单独使用子线程刷新QOpenGLWidget可以看出CPU占用率为10.3%,GPU占用率为:30.3%;
*
单独使用子线程刷新QOpenGLWindow可以看出CPU占用率为:7.9%,GPU占用率为:24.4%。
!
[
TestOpenGLWindow2-tuya
](
OpenGLDemo.assets/TestOpenGLWindow2-tuya.gif
)
*
**测试三:**
分别使用定时器刷新绘制QOpenGLWindow和QOpenGLWindow,1毫秒刷新一次,一次转动1度,打印转一圈需要的时间;测试 结果如下:QOpenGLWidget绘制一圈的时间几乎是QOpenGLWindow的十几倍,当然可用设置QOpenGLWidget的交换时间来提高绘制速度,但是这样CPU占用率会大大提升。
```
cpp
QOpenGLWidget
:
5561
QOpenGLWidget
:
5394
QOpenGLWidget
:
5512
QOpenGLWidget
:
5579
QOpenGLWindow
:
481
QOpenGLWindow
:
448
QOpenGLWindow
:
459
QOpenGLWindow
:
618
```
OpenGLDemo/TestOpenGLWindow/TestOpenGLWindow.pro
浏览文件 @
5fba6d7d
...
...
@@ -6,7 +6,11 @@
#
@
开发者
mhf
#
@
邮箱
1603291350
@
qq
.
com
#
@
时间
2022
-
09
-
28
17
:
20
:
12
#
@
备注
#
@
备注
1
、使用
OpenGl
1.0
API
绘制三角形(实现简单,已经淘汰的
API
)
;
#
2
、使用自定义
Shader
脚本绘制三角形(实现较为复杂)
#
3
、分别使用
QOpenGLWindow
和
QOpenGLWidget
绘制三角形;
#
4
、分别使用定时器、子线程刷新绘制;
#
5
、通过比较,
QOpenGLWindow
性能强于
QOpenGLWidget
。
#---------------------------------------------------------------------------------------
QT
+=
core
gui
concurrent
...
...
OpenGLDemo/TestOpenGLWindow/openglwidget.cpp
浏览文件 @
5fba6d7d
...
...
@@ -138,4 +138,9 @@ void OpenGLWidget::rotate()
{
m_angle
++
;
this
->
update
();
if
(
m_angle
%
360
==
0
)
{
qDebug
()
<<
"QOpenGLWidget:"
<<
m_timer
.
elapsed
();
m_timer
.
start
();
}
}
OpenGLDemo/TestOpenGLWindow/openglwidget.h
浏览文件 @
5fba6d7d
...
...
@@ -12,6 +12,7 @@
#include <qopenglwidget.h>
//#include <QOpenGLFunctions> // 网上很多示例使用的是这个类,这是Qt5.0添加的,编译时需要在pro文件中链接opengl库LIBS +=-lopengl32 -lglu32
#include <QElapsedTimer>
#include <QOpenGLFunctions_4_5_Compatibility> // 由于使用到的glBegin等函数属于opengl1.0的API,在新版本中已经被删除了,所以这里需要使用Compatibility
#include <qtimer.h>
...
...
@@ -41,7 +42,7 @@ private:
int
m_colAttr
;
// 顶点颜色属性位置
int
m_matrixUniform
;
// 变换矩阵属性位置
#endif
QTimer
m_timer
;
// 刷新定时器
Q
Elapsed
Timer
m_timer
;
// 刷新定时器
};
#endif // OPENGLWIDGET_H
OpenGLDemo/TestOpenGLWindow/openglwindow.cpp
浏览文件 @
5fba6d7d
...
...
@@ -119,4 +119,9 @@ void OpenGLWindow::rotate()
{
m_angle
++
;
this
->
update
();
if
(
m_angle
%
360
==
0
)
{
qDebug
()
<<
"QOpenGLWindow:"
<<
m_timer
.
elapsed
();
m_timer
.
start
();
}
}
OpenGLDemo/TestOpenGLWindow/openglwindow.h
浏览文件 @
5fba6d7d
...
...
@@ -10,10 +10,10 @@
#ifndef OPENGLWINDOW_H
#define OPENGLWINDOW_H
#include <QTimer>
#include <qopenglwindow.h>
//#include <QOpenGLFunctions> // 网上很多示例使用的是这个类,这是Qt5.0添加的,编译时需要在pro文件中链接opengl库LIBS +=-lopengl32 -lglu32
#include <QOpenGLFunctions_4_5_Compatibility> // 由于使用到的glBegin等函数属于opengl1.0的API,在新版本中已经被删除了,所以这里需要使用Compatibility
#include <qelapsedtimer.h>
class
QOpenGLShaderProgram
;
...
...
@@ -40,7 +40,7 @@ private:
int
m_colAttr
;
// 顶点颜色属性位置
int
m_matrixUniform
;
// 变换矩阵属性位置
#endif
QTimer
m_timer
;
// 刷新定时器
Q
Elapsed
Timer
m_timer
;
// 刷新定时器
};
#endif // OPENGLWINDOW_H
OpenGLDemo/TestOpenGLWindow/widget.cpp
浏览文件 @
5fba6d7d
...
...
@@ -25,6 +25,7 @@ Widget::Widget(QWidget *parent)
Widget
::~
Widget
()
{
m_start
=
false
;
delete
ui
;
}
...
...
README.md
浏览文件 @
5fba6d7d
...
...
@@ -19,6 +19,7 @@
| QStyleDemo |
[
Qt样式美化设置Demo说明及演示
](
./QStyleDemo/QStyleDemo.md
)
|
| PaintingDemo |
[
Qt绘图Demo
](
./PaintingDemo/PaintingDemo.md
)
|
| GraphicsviewDemo |
[
GraphicsView 图形视图框架Demo
](
./GraphicsviewDemo/GraphicsviewDemo.md
)
|
| QOpenGL |
[
Qt OpenGL开发
](
./OpenGLDemo/OpenGLDemo.md
)
|
| | |
| |
**使用到第三方库**
|
| XlsxDemo |
[
Qt使用QXlsx操作Excel Demo
](
./XlsxDemo/XlsxDemo.md
)
|
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录