android – 如何停止Open GL渲染器

前端之家收集整理的这篇文章主要介绍了android – 如何停止Open GL渲染器前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
出于某种原因,我需要重新启动GLSurfaceView.Renderer所以我想了一段时间我的应用程序调用setRenderer(newRenderer)第二次,其中 Android不喜欢和抛出一个IllegalStateException异常说“setRenderer已经被称为” .. .

现在,我知道这是因为渲染器附加到GLSurfaceView,我需要将此渲染器解除绑定到表面视图,因此我可以再次调用setRenderer.

有人有解决方案吗?

P.S:
代码如下所示:

render = new Renderer(this);

setContentView(R.layout.main);
graphicView = (GLSurfaceView) this.findViewById(R.id.graphicView);

//DO STUFF

graphicView.setRenderer(render);

//DO STUFF

Renderer newRender = new Renderer();
graphicView.setRenderer(newRender); <= ...and Android hates this line sooo much

谢谢 !

解决方法

找到答案 here,这个“LemonDev”确实拯救了我的生命:

可以停止/销毁OpenGL表面视图,并通过调用OnPause()将新的GLSurfaceView设置为新的渲染器,并使用Handler和Runnable postDelayed destroy,如下所示:

final Renderer newRender = new GRenderer(this);
final LinearLayout ll = (LinearLayout) this.findViewById(R.id.main);
graphicView.onPause();

Handler handler = new Handler();
class RefreshRunnable implements Runnable{

    public RefreshRunnable(){

    }

    public void run(){
        ll.removeView(findViewById(R.id.graphicView));

        GLSurfaceView surfaceview = new GLSurfaceView(getApplication());
        surfaceview.setId(R.id.graphicView);
        surfaceview.setRenderer(newRender);

        ll.addView(surfaceview);

        graphicView = (GLSurfaceView) findViewById(R.id.graphicView);
    }
};

RefreshRunnable r = new RefreshRunnable(this);
handler.postDelayed(r,500);

这将创建一个新的渲染器并暂停GLSurfaceView.然后应用程序将“销毁”一些你无法用SDK接触的内部东西……之后,你可以销毁GLSurfaceView,创建另一个并为其设置新的渲染器.

我现在的问题是纹理还没有刷新,但是,这仍然很棒!

原文链接:https://www.f2er.com/android/309180.html

猜你在找的Android相关文章