1

现在我有我的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,而无需再次设置线程?

4

2 回答 2

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());
}

当然,因为我们现在使用的是视图而不是活动,所以我们必须重写onBackPressed()以返回到以前的视图。

@Override
public void onBackPressed() 
{       
    if (screens.size() == 1)
        super.onBackPressed();
    else
    {
        screens.pop();
        setContentView(screens.peek());
        screens.peek().onResume();
    }
}
于 2012-08-28T17:52:00.610 回答
0

通过这样做new GLRenderer(),您可以创建类的新实例。所以在不同的活动中使用相同的渲染器是没有问题的。

编辑:我似乎误解了你的问题 - 如果你想一次看到许多 GL 表面,那么不,这是不可能的。但这与重用渲染器代码无关。

于 2012-08-25T23:42:43.230 回答