android - 更改 GlSurfaceView 渲染器

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

我查看了整个网络,以了解是否可以在飞行中更改 GLSurfaceView 的渲染器。原因是我想更改 OpenGl 程序,并从其顶点和 fragment 着色器启动所有属性和统一参数,我不希望任何更改都需要创建一个带有全新渲染器的全新 GLSurfaceView。

看来合理的操作应该是可行的。

最佳答案

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

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

请注意,您无法轻松切换 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);
    }
}

关于android - 更改 GlSurfaceView 渲染器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25369099/

相关文章:

java - android中的乘法持久化程序

android - Android 上的 OpenGL 是电池 killer 吗?

iPhone 着色器分析

java - 在 onCreate() 方法运行之前命名 View 时出错

java - 使子元素可点击的整个 View

java - OpenGL ES 2.0 - 需要性能/优化吗?

java - phong 着色器中的 LibGdx 着色器 "no uniform with name..."

android - 回收从 'BitmapDrawable' 获取的位图时出现问题

android - 带有自定义 View 的 ActionBar 选项卡未居中

java - 基于 SWIG 的 Java 接口(interface),适用于 OpenGL ES 2.0 和 EGL(适用于 SWT)