在Qt5中,传统的QWidget系列,仍然使用BackStoring技术,但新的Qt Quick2,将使用Scene Graph。后者能更好地发挥GPU的性能,但是移植QWidget到这上面来的话,工作量似乎又太大。所以...
本文:跟随 官方blog,简单了解 Scene Graph
背景:硬件加速
显卡按显存架构可分两类:
- UMA(Unified Memory Architecture)统一内存体系结构,使用部分的电脑主内存作为显存
- 非UMA,使用独立的显存。
显卡按其支持的图形操作可以粗略分为:
No acceleration (framebuffer only) | 常见于嵌入式设备中 |
Blitter & alpha-blending hardware | 在PC中不多见了 |
Path based 2D vector graphics | 取代前者(?) |
Fixed-function 3D | 老式的PC机中,被后者取代 |
Programmable 3D |
这样以来2*5=10,将有10中情况了。对此,Qt曾这样规划,每种情况对应一个paint engine。
UMA | 非UMA | |
None | Raster | Raster* |
Blitter | DirectFB | DirectFB** |
2D vector | OpenVG*** | OpenVG*** |
Fixed-3D | OpenGL(ES)1.x | OpenGL(ES)1.x |
Programmable-3D | OpenGL(ES)2.x | OpenGL(ES)2.x**** |
使用OpenGL引擎
引入了!OpenGL2,但是看来,在当前的这种graphics stack(Backstoring)下,性能不太令人满意。
Scene Graph出场
在做了种种努力之后。官方决定后退一步,然后看看如果采用一种新的模型会得到些什么。这个新模型就是 Scene Graph,它是由一系列节点构成的树
-
GeometryNode
-
TransformNode
-
ClipNode
然后使用Renderer的子类遍历这个类并渲染它。
几个月后,已可以将QML建立在Scene Graph的基本结构之上。此时特点:可以见到
-
QtSceneGraph 这个库
- qmlscene 这个可执行文件
今年5月底,QML Scene Graph 进入Qt5源码仓库的master分支。
后续
和Qt Quick关系太大了,暂时看不懂。只好先到这儿了...