使用“cached:true”时,具有静态源的 DropShadow 更快
Posted
技术标签:
【中文标题】使用“cached:true”时,具有静态源的 DropShadow 更快【英文标题】:DropShadow with static source is faster when using "cached:true" 【发布时间】:2016-10-13 18:26:56 【问题描述】:我将从我的测试用例开始。它创建了 21 个不变的带阴影的蓝色矩形。它还创建了一个不断重绘的 1x1px Canvas3D,所以我可以检查它在所有其他事情发生的情况下重绘的频率(Canvas3D
有一个内置的fps
属性)。在 DropShadow 项目上设置 cached: true
时,我得到 60 FPS。如果没有,我会得到 30 FPS。但我希望在这两种情况下都能获得相同的 FPS,因为考虑到源矩形永远不会更新,我不希望重新计算阴影的模糊。
main.cpp:(琐碎)
#include <QGuiApplication>
#include <QQmlApplicationEngine>
int main(int argc, char *argv[])
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
main.qml:
import QtQuick 2.5
import QtQuick.Window 2.2
import QtCanvas3D 1.1
Window
visible: true
width: 800
height: 600
id: window
Column
Text
text: canvas3d.fps + " FPS"
font.pointSize: 18
Flow
width: window.width
spacing: 10
Repeater
model: 21
ShadowedItem
Canvas3D
id: canvas3d
width: 1; height: 1 // nonzero size so it can be redrawn
property var gl;
onInitializeGL:
// should get and save context, otherwise FPS isn't measured for some reason
gl = canvas3d.getContext("canvas3d", depth:true, antialias:true, alpha:true);
ShadowedItem.qml:
import QtQuick 2.0
import QtGraphicalEffects 1.0
Item
width: 100
height: 100
Rectangle
anchors.fill: parent
id: rect
visible: false
color: "blue"
DropShadow
source: rect
anchors.fill: rect
cached: true // !
radius: 8
对性能差异有什么想法吗?
【问题讨论】:
【参考方案1】:我为此发布了follow-up question。在对它的 cmets 中,我了解到当场景中的 1 个项目(例如本例中的 Canvas3D)需要重绘时,整个场景都会被重绘。这意味着每次我的 Canvas3D 被重绘(不断地)时,所有的阴影都会被重绘。如果cached
是false
,这意味着重新计算模糊,因此会减速。
【讨论】:
以上是关于使用“cached:true”时,具有静态源的 DropShadow 更快的主要内容,如果未能解决你的问题,请参考以下文章
使用 Chrome 扩展修改具有本地源的 iframe 的元素