gpt4 book ai didi

android - 绘制路径和硬件加速

转载 作者:IT老高 更新时间:2023-10-28 21:37:39 27 4
gpt4 key购买 nike

在我看来,我正在绘制一条相当大的路径,并且遇到了一些性能问题。该路径目前有 32,000 点长,但我的应用程序应该扩展到至少 128,000 点。我无法对路径的大小做任何事情,因为数据集就是那么大,我需要能够一次显示整个路径并允许放大。

我使用的是运行 Android 4.2 的 Nexus 10,它默认为未明确禁用它的应用程序启用硬件加速。

路径是用以下代码创建的(我省略了一些设置和其他不相关的部分):

dataPath.moveTo(0, offset - (float) data[leftLimit]/ scalingFactor);
for (int i = leftLimit; i < rightLimit; ++i) {
x = (i - leftLimit) * dx;
y = offset - (float) data[i]/ scalingFactor;
dataPath.lineTo(x, y);
}

然后在onDraw()方法中绘制:

canvas.drawColor(Color.WHITE);
canvas.drawPath(dataPath, linePaint);

我测量了使用 adb shell dumpsys gfxinfo 在有和没有硬件加速的情况下绘制 View 所需的时间,令我惊讶的是,硬件加速要慢得多:

使用硬件加速:

enter image description here

没有硬件加速:

enter image description here

硬件加速版本每帧大约需要 200-300 毫秒,大部分时间花在处理阶段。非加速版本大约需要 50 毫秒,其中 2/3 在 Draw 阶段,1/3 在 process 阶段。

显然,即使我没有硬件加速的更快版本仍然太慢而无法达到 60 fps,或者当我移动到更大的数据集时甚至几乎无法使用。

在我的情况下,将路径渲染到位图然后仅转换该位图以适应屏幕的想法也是有问题的。我需要支持将路径放大到很远,并且要在路径质量不变得更差的情况下进行放大,我必须渲染路径的超大位图(并且可能会遇到内存限制和纹理大小限制)。当放大很远时,我要么只创建路径的一部分的新图像,要么切换到直接渲染路径,如果性能仍然与我所拥有的相似,这可能会导致延迟大于帧速率现在。

我现在想知道的是

  • 绘制线条/路径只是 GPU 不擅长的事情,不应该尝试硬件加速,还是我可能做错了什么导致性能不佳?
  • 我可以做些什么来绘制如此巨大的路径并获得可接受的性能?

最佳答案

Is drawing lines/paths just something the GPU is bad at and that one should not try to hardware accelerate, or am I likely doing something wrong that causes the bad performance?

路径总是使用 CPU 渲染。当应用程序是硬件加速时,这意味着渲染器将首先使用 CPU 将您的路径绘制成位图,然后将该位图作为纹理上传到 GPU,最后在屏幕上绘制纹理。

线路完全是硬件加速的。在这种情况下,我建议您使用 Canvas.drawLines() 而不是使用 Path

Is there anything I can do to draw such huge paths with acceptable performance?

您应该使用 Canvas.drawLines() 或自己将路径渲染到您管理的 Bitmap 中。

关于android - 绘制路径和硬件加速,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15039829/

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