我有一个简单的Android应用程序,可以将我们的OpenGL渲染SDK渲染到Android GLSurfaceView
。由于我们提供和SDK供其他人使用,我们需要支持GLSurfaceViews的所有用例。目前,我们需要能够在重新创建所有Android视图并保持OpenGL上下文活动的同时旋转设备。这源于客户在横向和横向模式下需要不同的布局。
正常的解决方法是:
1。将android:configChanges="orientation|screenSize"
添加到AndroidManifest.xml
中的您的活动中即可。
在这种情况下,这将不,因为这不会重新创建旋转视图。因此,通过这样做,我们在横向和横向模式下不能有不同的布局。
2。从GLSurfaceView.onPause()
。
GLSurfaceView.onResume()
和Activity
虽然这被认为是一种很好的做法,但在这个用例中还不够,因为在执行此操作时会破坏OpenGL上下文。请注意,我们仍在这样做,它只是解决了我们的问题。
第3。使用EGLContextFactory
在旋转时保留OpenGL上下文。
这可能是有用的,例如this answer中所述。感觉就像一个黑客,但它绝对有效。我们的想法只是在您没有EGLContext
时创建GLSurfaceView
并重新使用您拥有的EGLContextFactory
。
使用此hack时遇到的主要问题是,当setPreserveEGLContextOnPause(true);
被分离并重新连接到视图层次结构时,渲染线程将被销毁并重新创建。这似乎是通过查看the GLSurfaceView implementation来设计的。
在我们的SDK中,我们有一些线程本地存储连接到线程,所以突然得到一个新的渲染线程是不太可取的。我们可能会在渲染线程发生变化时更改某些状态,但我们想调查是否有更好的方法来执行此操作。
所以我的问题是:
一个。正在使用app.factory('Card', [function() {
function Card(cardData) {
if (cardData) {
this.setData(cardData);
}else{
this.new();
}
};
Card.prototype = {
new: function(){
var cardData = {
title: 'Add your recommendations',
}
this.setData(cardData);
}
};
return Card;
}]);
"正确的"能够在旋转时手动保存OpenGL上下文的方法吗?
B中。有没有办法在旋转时不破坏和重新创建渲染线程(不修改源代码)?
℃。在保持OpenGL上下文和渲染线程的同时,是否有更好/更简单的替代方法可以实现视图破坏/重新创建旋转?
额外信息:
{card: {title: 'demo_title'}}
。