gpt4 book ai didi

透明颜色绘图的java性能影响?

转载 作者:行者123 更新时间:2023-11-30 03:34:22 26 4
gpt4 key购买 nike

有谁知道用完全透明的颜色(alpha = 0)填充矩形是否会影响性能?或者它被优化并完全跳过?我正在谈论这样的代码:

Graphics g;
....
g.setColor(new Color(0xFF,0xFF,0xFF,0x00));
g.fillRect(0, 0, width, height); // <= does this take any CPU?

最佳答案

不确定这是否可以被视为“可接受”的答案,但至少可能有帮助:

正如评论中指出的:这要看情况。

Java Graphics类是一个非常厚的抽象层。您可以使用它在每个操作系统、每个 JVM、每个显卡、每个驱动程序上进行渲染,甚至可以使用不同的方法。

举个例子:在普通的 Windows 机器上,您可以使用 -Dsun.java2d.opengl 明确指定是否需要 OpenGL 加速图形管道或基于 Direct3D 的图形管道。或-Dsun.java2d.d3d旗帜。这可能会导致实际的 g.fillRect调用相应的 D3DRenderer 结束或OGLRenderer方法 (*) - 从那时起,驱动程序就需要确定它是否实际上必须为此调用执行某些操作(考虑到当前颜色是透明的)。

<小时/>

有趣的是,你的评论说// <= does this take any CPU? 。大多数情况下,CPU不会关心颜色是否透明。它只会将调用转发到渲染管道。所以值得怀疑的是,它对GPU施加了负载。

对于完全不透明的颜色,填充矩形是微不足道的:现有像素被简单地替换为一个 block 。颜色是透明的这一事实使事情变得更加困难:新颜色必须与已经存在的像素的颜色“混合”。在完全颜色的情况下,这不是必需的,但我怀疑这是否被视为特殊情况。

<小时/>

通常,绘制单个矩形(无论颜色如何)根本不会对性能产生明显的影响:在 GPU 上需要几微秒。如果您要绘制许多个矩形(真的许多),那么这个问题可能会变得更相关 - 但在这种情况下,您宁愿添加一个查询,例如

if (color.getAlpha() > 0) paintMillionsOfRectangles();

为了避免对 g.fillRect 进行数百万次调用的循环,这可能会比 fillRect 执行的实际操作施加更高的计算负载(特别是:在 CPU 上)。调用(在 GPU 上的硬件中完成)。

<小时/>

(*) 我不完全确定这些是否真的是正确的方法 - 再说一遍,抽象层非常厚......

关于透明颜色绘图的java性能影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28326958/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com