从QSG_RENDERER_DEBUG = render的输出中得出什么

时间:2016-10-24 12:42:56

标签: qml render qtquick2

当我设置环境变量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 -

1 个答案:

答案 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属性是分开的。

您可以通过更改可见属性并查看显示或消失的内容来确定哪些对象。