android.graphics.path

时间:2015-05-04 18:50:28

标签: android opengl-es android-canvas

我有一个可以缩放和平移的自定义视图。它只是显示path(其坐标从API获取)。由于Path作为纹理上传到GPU然后绘制,因此可以绘制path的维度的最大限制(因设备而异)。我的自定义视图可能会变得非常大(面积大于30000像素),为了克服限制,我在自定义视图中使用了setLayerType(LAYER_TYPE_SOFTWARE)。它运作良好,但它不能帮助我提供60FPS。

为了将帧速率提高到60FPS,我决定切换回LAYER_TYPE_NONE。现在,我没有取消选中路径比例,而是决定在某个特定的缩放级别停止它并进一步缩放,缩放canvas(失去清晰度)。为了找到我应该停止缩放path并开始缩放canvas的缩放级别,我一直在做一些路径(我使用nexus 7(2012)和nexus 9作为测试设备)

我希望只有在达到纹理大小限制(我发现使用path too large to be rendered into a texture后)之后才会看到消息canvas.isHardwareAccelerated()

  1. 对于nexus 7,纹理大小限制为2048,但当其宽度或高度达到2036时,路径会消失。我在日志中看到path too large to be rendered into a texture。我预计这会发生在2048年!!
  2. 对于nexus 9,纹理大小限制为16384,但有时即使达到纹理限制,应用程序也会以日志A/libc﹕ Fatal signal 11 (SIGSEGV), code 1, fault addr 0x78 in tid 7252 (RenderThread)崩溃。例如,这些是应用程序崩溃时自定义视图的一些维度:(7199,5049),(13814,2500),(8040,4200)。我能找到的唯一共性是自定义视图的总面积(以及path)增长超过32,000,000像素。
  3. 因此,我无法决定何时应该从缩放path切换到缩放canvas。关于何时这样做的任何想法?

    编辑1

    我观察到,对于nexus 9,只要path的总面积达到~33,000,000,app就会崩溃。这个限制意味着什么?

0 个答案:

没有答案
相关问题