QML也不是一无是处

iwantfly
雷雷 06月11日 字数 248

完全使用 OpenGL 实现了一套 window less的界面库

改变了原来QtWidgets那套纯 CPU 渲染的机制

可以实现速度更快,特效更丰富的界面

而且将来还可以替换成其他的3d接口

如果把这部分纯 c++ 切出来, 可以独立于很多平台

而且外挂界面可以做成很多种方案,不一定是 js 绑定的

23 个回复
fanci
大葡萄 06月11日

为啥GPU画个长方形按钮会比CPU更快?我不懂。

【 在 iwantfly () 的大作中提到: 】

: 完全使用 OpenGL 实现了一套 window less的界面库

: 改变了原来QtWidgets那套纯 CPU 渲染的机制

: 可以实现速度更快,特效更丰富的界面

: 而且将来还可以替换成其他的3d接口

iwantfly
雷雷 06月11日

你的确不太懂。。。

【 在 fanci (大葡萄) 的大作中提到: 】

: 为啥GPU画个长方形按钮会比CPU更快?我不懂。

z16166
Netguy 06月11日

OpenGL驱动兼容性咋样,感觉windows上如果能用directx渲染更好

asmaster
风林火山 06月11日

不用xml也可以啊。在QtWidgets里自绘,绘制的图片就用opengl渲染,这样行不?

hgoldfish
老鱼 06月11日

Qt 的图形技术支持是这样的:

1. QtGui 里面提供了 OpenGL ES2 支持,程序员可以认为,只要 Qt 跑起来就能使用 OpenGL ES2 功能。

在 Windows 平台上有三种情况,如果显卡驱动一切正常,那就使用显卡的 opengl 驱动,如果 opengl 驱动不能用,就使用 ANGLE 库,把 OpenGL 命令转换成 DirectX 命令,效率没太大差别,最后,如果这个 Windows上面压根没显卡驱动(比如刚装完系统的时候),会使用一个软的 OpenGL 实现来渲染。

2. QtWidgets 实际并不会使用这个 OpenGL 功能,所以虽然默认提供了,并没有什么卵用。布署的时候不用考虑。编译的时候也不用考虑,反正都是通过 LoadLibary() 来调用的,不需要相关的头文件。

3. QtQuick,也就是楼主说的 QML,不止会使用 OpenGL 来渲染,还支持用 DirectX/Vulkan 来渲染。但总是优先使用 OpenGL,程序员要手动设置一个选项。

4. 很多例外,比如程序员可以强制禁用 opengl 或者强制用 directx,这些都是在 configure 命令行里面设置,属于裁剪 qt 的知识。具体的自己看文档吧。

【 在 z16166 (Netguy) 的大作中提到: 】

: OpenGL驱动兼容性咋样,感觉windows上如果能用directx渲染更好

z16166
Netguy 06月11日

那还是不错的,windows上directx驱动稳定性比opengl驱动要好一些,主要是老机器

【 在 hgoldfish 的大作中提到: 】

: Qt 的图形技术支持是这样的:

: 1. QtGui 里面提供了 OpenGL ES2 支持,程序员可以认为,只要 Qt 跑起来就能使用 OpenGL ES2 功能。

: 在 Windows 平台上有三种情况,如果显卡驱动一切正常,那就使用显卡的 opengl 驱动,如果 opengl 驱动不能用,就使用 ANGLE 库,把 OpenGL 命令转换成 DirectX 命令,效率没太大差别,最后,如果这个 Windows上面压根没显卡驱动(比如刚装完系统的时候),会使用一个软的 OpenGL 实现来渲染。

: ...................

PGP
--- 06月11日

opengl已经不更新了,qt也不支持metal,不直接支持directx,真的是所有层面都在去全球化

【 在 z16166 的大作中提到: 】

: 那还是不错的,windows上directx驱动稳定性比opengl驱动要好一些,主要是老机器

: ....................

hgoldfish
老鱼 06月11日

支持。。你看我上面讲的第3条,QtQuick 能直接采用 meta/directx/vulkan 渲染,最近还搞出了一个硬件渲染层出来,估计会在 qt6 成熟。

至于 QtWidgets 已经是拍死的前浪,什么都不支持,已经没人在乎了。

【 在 PGP (---) 的大作中提到: 】

: opengl已经不更新了,qt也不支持metal,不直接支持directx,真的是所有层面都在去全球化

PGP
--- 06月11日

Qtquick能这么搞,但如果用户如何需要3d引擎渲染一个3d场景呢,是不是只能用unreal了

【 在 hgoldfish 的大作中提到: 】

: 支持。。你看我上面讲的第3条,QtQuick 能直接采用 meta/directx/vulkan 渲染,最近还搞出了一个硬件渲染层出来,估计会在 qt6 成熟。

: 至于 QtWidgets 已经是拍死的前浪,什么都不支持,已经没人在乎了。

: ....................

hgoldfish
老鱼 06月11日

QtQuick 就包含 Qt3D 啊。可以从 maya 里面导入模型,渲染到 Qt3D 里面,可以说,Qt3D 实际上已经是半个游戏引擎了。QML 就是游戏引擎的脚本语言。

【 在 PGP (---) 的大作中提到: 】

: Qtquick能这么搞,但如果用户如何需要3d引擎渲染一个3d场景呢,是不是只能用unreal了

PGP
--- 06月11日

不错不错,我现在的问题是针对我自己的问题写了一堆shader,不然渲染慢的要死,qt3d里能把这些shader简单的加入到渲染流程吗

【 在 hgoldfish 的大作中提到: 】

: QtQuick 就包含 Qt3D 啊。可以从 maya 里面导入模型,渲染到 Qt3D 里面,可以说,Qt3D 实际上已经是半个游戏引擎了。QML 就是游戏引擎的脚本语言。

: 【 在 PGP (---) 的大作中提到: 】

: ....................

hgoldfish
老鱼 06月11日

貌似可以。。我没用到这么高级的东东。。你找找文档看看。

【 在 PGP (---) 的大作中提到: 】

: 不错不错,我现在的问题是针对我自己的问题写了一堆shader,不然渲染慢的要死,qt3d里能把这些shader简单的加入到渲染流程吗

cn62
cn62 06月12日

如果设置Software渲染,Quick和Widgets是不是一样了?

发自「今日水木 on x」

【 在 iwantfly 的大作中提到: 】

: 完全使用 OpenGL 实现了一套 window less的界面库

: 改变了原来QtWidgets那套纯 CPU 渲染的机制

: 可以实现速度更快,特效更丰富的界面

: 而且将来还可以替换成其他的3d接口

: 如果把这部分纯 c++ 切出来, 可以独立于很多平台

: 而且外挂界面可以做成很多种方案,不一定是 js 绑定的

: --

hgoldfish
老鱼 06月12日

还是不一样。

QtWidgets/C++ 走 SSE/AVX 加速,单线程地渲染。

QtQuick/QML 走软 OpenGL ES2 实现,背后是 Mesa(llvmpipe) 编译成 CPU 指令并行执行。我的新笔记本没有显卡驱动,KDE 自动使用 Mesa 渲染,动画效果比我的老核显渲染还好。

简单地画线画框,前者快。渲染透明和动画,后者快。

【 在 cn62 (cn62) 的大作中提到: 】

: 如果设置Software渲染,Quick和Widgets是不是一样了?

: 发自「今日水木 on x」

cn62
cn62 06月12日
cn62
cn62 06月12日

额,Quick不用qml也要依赖qml那些dll。。。

那就比QtWidgets大了好多了。

而且没有暴露所有接口给C++,那还是继续QtWidgets吧。

【 在 hgoldfish 的大作中提到: 】

: 还是不一样。

: QtWidgets/C++ 走 SSE/AVX 加速,单线程地渲染。

: QtQuick/QML 走软 OpenGL ES2 实现,背后是 Mesa(llvmpipe) 编译成 CPU 指令并行执行。我的新笔记本没有显卡驱动,KDE 自动使用 Mesa 渲染,动画效果比我的老核显渲染还好。

: ...................

lwp
再也不跟人吵架了!!! 06月12日

QML那套有点尴尬,其实用得着炫彩动画的领域不多

用得着这些的领域也不会用Qt这套

Qt做UI用的多的其实是很多工业领域或者应用软件领域,都是要的基础的按钮对话框的这

种,QtWidgets反而还是更倚重一些

所以我一直觉得Qt的路子走歪了,应该把QtWidget做大做强,做到其它框架没啥活路

就算是这个是夕阳方向了,但加点Widget丰富一下应用总归不是什么坏事,万年不更新老

是说不过去

【 在 cn62 (cn62) 的大作中提到: 】

: 标  题: Re: Re:QML也不是一无是处

: 发信站: 水木社区 (Fri Jun 12 12:50:29 2020), 站内

: 额,Quick不用qml也要依赖qml那些dll。。。

: 那就比QtWidgets大了好多了。

: 而且没有暴露所有接口给C++,那还是继续QtWidgets吧。

: 【 在 hgoldfish 的大作中提到: 】

: : 还是不一样。

: : QtWidgets/C++ 走 SSE/AVX 加速,单线程地渲染。

: : QtQuick/QML 走软 OpenGL ES2 实现,背后是 Mesa(llvmpipe) 编译成 CPU 指令并行执行。我的新笔记本没有显卡驱动,KDE 自动使用 Mesa 渲染,动画效果比我的老核显渲染还好。

: : ...................

: --

PGP
--- 06月12日

对,qt把对手想象成了electron,可那么小一个公司怎么跟整个web前端所有开发人员对抗?

qt擅长的还就是那种专注性能的老式桌面软件

【 在 lwp 的大作中提到: 】

: QML那套有点尴尬,其实用得着炫彩动画的领域不多

: 用得着这些的领域也不会用Qt这套

: ....................

lwp
再也不跟人吵架了!!! 06月12日

我觉得Qt要么就走我之前说的,把nativeUi的路子走到死,走到其它框架全没人用把护城

河垒到让人望尘莫及,最后直接一统linux的桌面软件的标准平台

要么就转向后端,弄点高级的网线库,异步啊,序列化啊,数据库啊,RPC啊,cuda/opencv这

种计算的,还有什么分布式的,等等等等,光凭QtCore的无敌接口和文档也能打下一片江山

,相比boost那套不是好用100倍

【 在 PGP (---) 的大作中提到: 】

: 标  题: Re: QML也不是一无是处

: 发信站: 水木社区 (Fri Jun 12 22:59:06 2020), 站内

: 对,qt把对手想象成了electron,可那么小一个公司怎么跟整个web前端所有开发人员对抗?

: qt擅长的还就是那种专注性能的老式桌面软件

: 【 在 lwp 的大作中提到: 】

: : QML那套有点尴尬,其实用得着炫彩动画的领域不多

: :

: : 用得着这些的领域也不会用Qt这套

: : ....................

: --