【发布时间】:2014-01-19 11:43:34
【问题描述】:
我们的应用程序需要双缓冲语义,例如在一次绘制操作中绘制一条线时,该线下一次应该仍然存在(不擦除,使用相同的缓冲区)。这对我们使用 SurfaceView、lock 等非常有效。
但是,那些cannot be hardware accelerated 和我们认为我们可能会错过某些 Android 设备上的某些性能。
在 iOS 上运行时,我们使用 OpenGL 并保留支持模式,以防止操作系统在每次重绘时擦除显示器。我希望 Android 有类似的东西可以防止无效调用擦除以前在屏幕上绘制的元素,但除了创建位图之外我找不到这样的选项。
绘制位图也是一种选择(这就是我们今天所做的),但是我们如何在这里利用硬件加速呢?
【问题讨论】:
-
OpenGLES 是寻找硬件加速最安全的方法。而且我可能大错特错,但我认为默认情况下启用了双缓冲,它与您所描述的无关。要在帧之间保留绘制的形状,在 onDrawFrame 中不调用 glClear() 就足够了(?)
-
谢谢,但我对将代码移植到 OpenGL 不感兴趣,有很多代码,而 OGL 不是最适合这种类型的代码(大量文本等)。我们在 iOS 上使用 OGL,所以我很清楚我将面临的痛苦。
-
双缓冲是为了防止由确实需要清除屏幕并从头开始绘制每一帧的应用程序引起的屏幕闪烁。您要求屏幕 不 被擦除,但另一方面您说您“需要双缓冲”。这听起来很矛盾;我会说完全禁用双缓冲,你应该很好。是我误解了这个问题,还是我错过了与我多年前使用的移动平台不同的 Android 某些内容?
-
我上面的问题中的关键字:语义......我们需要语义而不是双缓冲本身。
标签: android performance hardware-acceleration