当我设置环境变量QSG_RENDERER_DEBUG=render
时,我得到以下输出:
Renderer::render() QSGAbstractRenderer(0x383865f8) "rebuild: none"
Rendering:
-> Opaque: 38 nodes in 2 batches...
-> Alpha: 34 nodes in 13 batches...
- 0x3836a830 [retained] [noclip] [opaque] [ merged] Nodes: 14 Vertices: 88 Indices: 124 root: 0x0
- 0x3836a7f0 [ upload] [noclip] [opaque] [ merged] Nodes: 24 Vertices: 96 Indices: 144 root: 0x0
- 0x3836a8f0 [retained] [noclip] [ alpha] [unmerged] Nodes: 1 Vertices: 48 Indices: 74 root: 0x0
- 0x3836a870 [retained] [noclip] [ alpha] [unmerged] Nodes: 3 Vertices: 52 Indices: 78 root: 0x0
- 0x3836a8b0 [retained] [noclip] [ alpha] [unmerged] Nodes: 6 Vertices: 400 Indices: 720 root: 0x0
- 0x3836a530 [retained] [noclip] [ alpha] [unmerged] Nodes: 4 Vertices: 56 Indices: 84 root: 0x0
- 0x3836a570 [retained] [noclip] [ alpha] [ merged] Nodes: 1 Vertices: 4 Indices: 6 root: 0x0 opacity: 1
- 0x3836a5b0 [retained] [noclip] [ alpha] [unmerged] Nodes: 7 Vertices: 720 Indices: 1302 root: 0x0
- 0x3836a630 [retained] [noclip] [ alpha] [unmerged] Nodes: 3 Vertices: 28 Indices: 42 root: 0x0
- 0x3836a5f0 [retained] [noclip] [ alpha] [ merged] Nodes: 3 Vertices: 12 Indices: 18 root: 0x0 opacity: 1
- 0x3836a6f0 [retained] [noclip] [ alpha] [ merged] Nodes: 1 Vertices: 4 Indices: 6 root: 0x0 opacity: 1
- 0x3836a670 [retained] [noclip] [ alpha] [ merged] Nodes: 1 Vertices: 4 Indices: 6 root: 0x0 opacity: 1
- 0x3836a6b0 [retained] [noclip] [ alpha] [ merged] Nodes: 1 Vertices: 4 Indices: 6 root: 0x0 opacity: 1
- 0x3836a330 [retained] [noclip] [ alpha] [unmerged] Nodes: 2 Vertices: 24 Indices: 36 root: 0x0
- 0x3836a370 [retained] [noclip] [ alpha] [ merged] Nodes: 1 Vertices: 4 Indices: 6 root: 0x0 opacity: 1
-> times: build: 0, prepare(opaque/alpha): 0/0, sorting: 0, upload(opaque/alpha): 0/0, render: 1
如果我想在低性能设备(例如旧的Raspberry PI)上运行它,我认为这对灾难来说很糟糕。
但是我找不到答案:从中得到什么?如何改进它,减少批量,特别是Alpha批次?
我只有少量对象(2)和opacity != 0
,并且在此输出时,所有这些对象都设置为不可见。
我有两个SVG(每个8个节点)可能会出现在那里。
我不使用任何不适合'#------ff'
格式的颜色(除非我使用的svg颜色可能会设置alpha通道)并且不使用颜色{{ 1}}
我确实有一个由两个"同心"组成的对象。 {0>不透明颜色'transparent'
,在可视化 overdraw 时标记为未合并,我不知道为什么。我认为至少它可以与它不相交的兄弟姐妹合并。 为什么他们不会?
如果我可以识别对象,我认为它很有帮助,但是当我输出任何可见对象的地址时,(Rectangles
)我没有得到任何列出的地址。
如何在渲染对象和我的QML对象之间实现映射?
并且 - 所有这些列表条目的含义是什么?
编辑:看来,我使用了一些支持alpha的PNG。用JPG替换它们会减少消息。但那些节点/批次中只有5个。 34去...
Component.onCompleted: console.log(this)
问候&谢谢,
-m -
答案 0 :(得分:1)
从doc.qt.io:“为每个唯一的材料状态和几何类型集合创建[一批]”。减少差异的数量,默认渲染器将兼容的OpenGL基元放入同一批次。
例如:
具有不同width
/ height
/ color
/ gradient
/ rotation
属性的矩形元素被批处理,但具有不同的{{1} } / opacity
/ radius
属性不是。
使用十六进制三元组将antialiasing
属性设置为不透明值的矩形元素(例如:使用color
或'forestgreen'
指定'#228B22'
)一起批处理。但指定半透明颜色(不以'#282'
开头的十六进制四边形,例如'#FF
- 25%不透明'#44228B22'
)会强制单独的批次,即使是半透明的颜色值相同(在Qt 5.9.1上验证)。即使半透明颜色值相同,半透明'forestgreen'
颜色也会强制使用单独的批次。
具有不同border
font
/ letterspacing
的文字元素
属性分组在一起,但不同的underline
font
/ bold
/ italic
/ pixelSize
属性是分开的。
您可以通过更改可见属性并查看显示或消失的内容来确定哪些对象。