我在SurfaceView
01-06 18:48:31.947: E/SurfaceFlinger(180): dimensions too large 5700 x 1506
我完全理解这是非常大SurfaceView
我应该做更多的重构,以便将我的自定义View
更改为SurfaceView
但我很好奇为什么它太大,Android无法分配SurfaceView
?它不能忽略在视口中看不到的图纸吗?我怎么知道可以使用的SurfaceView
的最大大小是多少?最大尺寸之间是否存在差异?
感谢。
答案 0 :(得分:1)
我认为错误来自SurfaceFlinger的低级本机代码。
uint32_t const maxSurfaceDims = min(
mFlinger->getMaxTextureSize(), mFlinger->getMaxViewportDims());
// never allow a surface larger than what our underlying GL implementation
// can handle.
if ((uint32_t(w)>maxSurfaceDims) || (uint32_t(h)>maxSurfaceDims)) {
ALOGE("dimensions too large %u x %u", uint32_t(w), uint32_t(h));
return BAD_VALUE;
}
简而言之,您尝试分配的纹理/视口大于OpenGL驱动程序/ GPU的配置。您已经知道请求太大了。由于尺寸取决于设备/制造商,我不确定您是否可以获得可以跨越多个Android供应商的确定价值。
您可能还想查看Jelly Bean中的内容,以改善Google IO 2012会话中涵盖的UI性能:For Butter or Worse: Smooth Out Performance in Android UIs,它可以让您高度了解图形引擎尝试的内容做。