如何防止GLSurfaceView频繁地(在Android上)重新创建OpenGL曲面?
我有一个应用程序,其主要活动显示如何防止GLSurfaceView频繁地(在Android上)重新创建OpenGL曲面?,android,opengl-es,Android,Opengl Es,我有一个应用程序,其主要活动显示GLSurfaceView。每次启动一个新活动(例如设置活动)时,OpenGl曲面都会被销毁,当用户返回到主活动时,会创建一个新的曲面 这是非常缓慢的,因为我每次都需要重新生成纹理,以便它们可以绑定到新曲面。(缓存纹理是可能的,但这将是我的第二选择,因为内存有限。) 是否有办法防止每次都重新创建曲面 我自己的分析是: 有两个触发器可触发要销毁的曲面: GLSurfaceView.onPause()由活动调用 视图与窗口分离 启动一项新活动时,有没有办法防止“2”
GLSurfaceView
。每次启动一个新活动(例如设置活动)时,OpenGl曲面都会被销毁,当用户返回到主活动时,会创建一个新的曲面
这是非常缓慢的,因为我每次都需要重新生成纹理,以便它们可以绑定到新曲面。(缓存纹理是可能的,但这将是我的第二选择,因为内存有限。)
是否有办法防止每次都重新创建曲面
我自己的分析是: 有两个触发器可触发要销毁的曲面:
GLSurfaceView.onPause()
由活动调用因此,缓存解码的图像数据可能是一个很好的性能提升器,通过将其与内存映射文件(mmap)相结合,您甚至可以缓存大量图像数据,同时保持内存友好。如果您的目标是3.0或更高版本,请查看
GLSurfaceView.setpreserveglcontextonpause()
。请记住,设备一次可能只支持一个OpenGL上下文,因此,如果您要切换到使用OpenGL的另一个活动并返回到您的活动,您无论如何都必须重新加载–因此我建议保留一个缓存,并在活动的onLowMemory()时将其删除
被调用。启动设置视图(通常)的标准/推荐方法是什么?覆盖/对话框/活动?我一直使用活动,假设它们是标准约定。“标准”假设是设置活动。但对于这种情况,有两种设置是有意义的。1.A预运行设置(例如难度/对象纹理)2。A在设置期间(例如音乐音量、背景颜色),在我的例子中,纹理是在Java运行时创建的。我想是时候深入研究本机代码了。谢谢你的链接。我的目标是2.1,所以你的回答证实了这在我的情况下是不可能的。