Krø*_*lle 6 android opengl-es glsurfaceview android-thread
我有一个简单的Android应用程序,使用我们的OpenGL渲染SDK将数据呈现给Android GLSurfaceView.由于我们提供和SDK供其他人使用,我们需要支持GLSurfaceViews的所有用例.目前,我们需要能够在重新创建所有Android视图并保持OpenGL上下文活动的同时旋转设备.这源于客户在横向和横向模式下需要不同的布局.
解决这个问题的正常方法是:
1.添加android:configChanges="orientation|screenSize"到您的活动中AndroidManifest.xml,您将没事.
这将不会在这种情况下,作为工作这不会重新上旋转的意见.因此,通过这样做,我们不能在横向和横向模式中具有不同的布局.
2.呼叫GLSurfaceView.onPause()和GLSurfaceView.onResume()从Activity.
虽然这被认为是一种很好的做法,但在这个用例中还不够,因为在执行此操作时会破坏OpenGL上下文.请注意,我们仍然这样做,它只是没有解决我们的问题.
3.使用a EGLContextFactory在旋转时保留OpenGL上下文.
这是可能的和有用的,例如在该答案中所描述的.感觉就像一个黑客,但它绝对有效.这个想法只是EGLContext在你没有一个时创建一个并重用你拥有的那个.
使用此hack时遇到的主要问题是渲染线程在GLSurfaceView分离并重新连接到视图层次结构时被销毁并重新创建.这似乎是通过查看GLSurfaceView实现来设计的.
在我们的SDK中,我们有一些线程本地存储连接到线程,所以突然得到一个新的渲染线程是不太可取的.我们可能会在渲染线程发生变化时更改某些状态,但我们想调查是否有更好的方法来执行此操作.
所以我的问题是:
答:使用EGLContextFactory"正确"的方式能够在旋转时手动保存OpenGL上下文吗?
B.有没有办法在旋转时不破坏和重新创建渲染线程(不修改源代码)?
C.在保持OpenGL上下文和渲染线程的同时,是否有更好/更简单的替代方法来实现视图销毁/重建的轮换?
额外信息:
setPreserveEGLContextOnPause(true);.| 归档时间: |
|
| 查看次数: |
859 次 |
| 最近记录: |