现在我有ApplicationActivity
,此活动负责管理多个视图(GLSurfaceViews
)。可以/我应该将所有视图设置为渲染器到“全局”渲染器吗?
代码:
public class ApplicationActivity extends Activity
{
private static final String TAG = ApplicationActivity.class.getSimpleName();
private final Stack<Screen> screens = new Stack<Screen>();
private GlRenderer glRenderer;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Log.d(TAG, "Main Activity Created");
setupGraphics();
ChangeScreen(new MainMenu(this, glRenderer)); //Creating a new Screen sets the renderer
}
private void setupGraphics()
{
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
glRenderer = new GlRenderer(this);
}
public void Draw() //Is called by the glRenderer onDrawFrame() { mainActivity.Draw() }
{
}
}
在GLSurfaceViews
之间切换相同的活动,据我所知,我认为方法setRenderer
设置了视图渲染器,然后启动渲染线程(创建新线程),但我不想要每次在视图之间切换时重新创建线程 - 可能会产生潜在的问题。
所以最后我想要一个Renderer类只是为了保持图形与业务逻辑等等,但是,我不知道是否可以使用一个Renderer,而不再设置线程?
答案 0 :(得分:1)
只有在使用GLSurfaceView.onPause()
/ .onResume();
我的具体案例:
@Override
protected void onPause() //Overrides onPause from Activity
{
surfaceViews.peek().onPause();
super.onPause();
}
因此每次活动暂停时我都必须暂停当前的视图。如果活动恢复,那么也恢复视图。
我还有一个名为SetView
的方法,它将(暂停和删除然后更改为另一个视图)或(暂停然后更改为另一个视图)这是使用Stack
public void SetView(View screen)
{
if (!screens.empty())
{
screens.peek().onPause();
screens.pop();
}
screens.push(screen);
setContentView(screens.peek());
}
当然,因为我们现在使用的是Views而不是Activities,所以我们必须覆盖onBackPressed()
以返回之前的视图。
@Override
public void onBackPressed()
{
if (screens.size() == 1)
super.onBackPressed();
else
{
screens.pop();
setContentView(screens.peek());
screens.peek().onResume();
}
}
答案 1 :(得分:0)
通过执行new GLRenderer()
,您可以创建班级的新实例。因此,在不同的活动中使用相同的渲染器是没有问题的。
编辑:我似乎误解了你的问题 - 如果你想要同时看到许多GL表面,那么不,这是不可能的。但它与重用渲染器代码无关。