android.graphics.path的限制

x-t*_*eme 7 android opengl-es android-canvas

我有一个可以缩放和平移的自定义视图.它只是显示a path(其坐标从API获取).由于Paths作为纹理上传到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像素.

因此,我无法确定何时应该从缩放切换path到缩放canvas.关于何时这样做的任何想法?

编辑1

我观察到,对于nexus 9,当应用程序的总面积path达到~33,000,000 时,应用程序崩溃.这个限制意味着什么?