3

是否可以在屏幕上一次显示多个渲染?就像将安卓屏幕分成 4 个象限并在每个象限上显示一个立方体?我认为 OpenGL 是可能的,但那是 GLUT 并且是基于 Windows 的。我正在研究如何为 android 做这件事,但我还没有遇到任何描述它的东西。这是我创建渲染的主要活动。

public class MainActivity extends Activity
{

    private MyGLSurfaceView mGLView;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        // Create a GLSurfaceView instance and set it
        // as the ContentView for this Activity

        // "this" is the reference to activity
        mGLView = new MyGLSurfaceView(this);
        setContentView(mGLView);
    }

    @Override
    protected void onPause()
    {
        super.onPause();
        // The following call pauses the rendering thread.
        // If your OpenGL application is memory intensive,
        // you should consider de-allocating objects that
        // consume significant memory here.
        mGLView.onPause();
    }

    @Override
    protected void onResume()
    {
        super.onResume();
        // The following call resumes a paused rendering thread.
        // If you de-allocated graphic objects for onPause()
        // this is a good place to re-allocate them.
        mGLView.onResume();
    }
}

class MyGLSurfaceView extends GLSurfaceView
{

    private final MyGLRenderer mRenderer;
    Context context;

    public MyGLSurfaceView(Context context)
    {
        super(context);

        this.context = context;
        // Create an OpenGL ES 2.0 context.
        setEGLContextClientVersion(2);

        // Set the Renderer for drawing on the GLSurfaceView
        Log.d("Test", "GL initialized");
        mRenderer = new MyGLRenderer(context);
        setRenderer(mRenderer);

        // Render the view only when there is a change in the drawing data
        setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
    }
}
4

2 回答 2

3

我不明白为什么你不能用一个 GLSurfaceView 做到这一点。您可以通过调用 glViewport 将场景映射到该象限,将屏幕分成四个象限。然后,您可以调用您的绘图函数,然后对每个后续象限重复此操作。

例子:

glViewport(0, 0, width/2, height/2);
< render first quadrant >

glViewport(width / 2, 0, width / 2, height / 2);
< render second quadrant >

等等...

于 2013-08-19T20:58:59.427 回答
1

GLSurfaceView 不是为此而设计的,但您可以改用 TextureViews 来做到这一点。查看 TextureView 的在线文档。最简单的方法是创建一个单独的线程,依次渲染每个 TextureView。如果您希望同时运行多个 OpenGL ES 上下文,那就要复杂得多,但最近在 Khronos.org OpenGL ES 论坛上已对此进行了讨论。

于 2013-08-17T17:51:49.897 回答