【问题标题】:Change GlSurfaceView renderer更改 GlSurfaceView 渲染器
【发布时间】:2014-08-18 17:44:57
【问题描述】:

我查看了整个网络,以了解是否可以在航班上更改 GLSurfaceView 的渲染器。原因是我想更改 OpenGL 程序,并从其顶点和片段着色器启动所有属性和统一参数,并且我不希望任何更改都需要使用全新的渲染器创建全新的 GLSurfaceView。

这似乎是应该可行的合理操作。

【问题讨论】:

    标签: android opengl-es opengl-es-2.0 glsurfaceview


    【解决方案1】:

    注意:我还没有实现以下内容。

    GLSurfaceView.Renderer 是一个接口。执行三遍。两次用于您的不同 OpenGL 渲染器,一次附加到 GLSurfaceView。后者只分派给前者之一,并允许更改它分派的渲染器。代码必须包含对此渲染器的引用,并且最终必须与绘制调用同步(虽然我不知道)。

    请注意,您无法轻松切换 OpenGLES 上下文数据。它在所有渲染器实例之间共享。

    class DispatchingRenderer implements GLSurfaceView.Renderer {
        private class Renderer1 implements GLSurfaceView.Renderer {
           ...
        }
        private class Renderer2 implements GLSurfaceView.Renderer {
           ...
        }
    
        public DispatchingRenderer() {
            this.r1 = new Renderer1();
            this.r2 = new Renderer2();
    
            this.currentRenderer = this.r1;
        }
        public void ToggleRenderer() {
            if(this.currentRenderer == this.r1) {
                this.currentRenderer = this.r2;
            } else if (this.currentRenderer == this.r2) {
                this.currentRenderer = this.r1;
            }
        }
        public void onSurfaceCreated(GL10 gl, EGLConfig config) {
            // do one-time setup
        }
        public void onSurfaceChanged(GL10 gl, int w, int h) {
            this.currentRenderer.onSurfaceChanged(gl, w, h);
        }
        public void onDrawFrame(GL10 gl) {
            this.currentRenderer.onDrawFrame(gl);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-05-18
      • 1970-01-01
      • 2015-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多