Android OpenGLES使用C++和Java进行渲染

Hak*_*kes 12 c++ java android opengl-es

我有一个使用GLES进行渲染的android应用程序.目前使用Java来渲染东西,渲染很好.由于Android Java应用程序内存的限制,我计划将本机呈现集成到我的Java呈现代码中.

为此,我遵循了基本的原生GLES教程.集成后,Java渲染不可见,只看到我在C++中渲染的东西.

最简单的代码版本位于:https://github.com/khedd/JavaCppGLES Java代码呈现Triangle,C++呈现Quad.如果两者都被调用,则Quad是渲染器.

我该如何解决这个问题?我应该把所有东西都移植到C++吗?

代码简而言之.

MyGLRenderer(){
    mTriangle = new Triangle();
    mCppRenderer = new MyCppRenderer();
}

@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
    gl.glClearColor(1.0f, 0.0f, 1.0f, 1.0f);

    //init java triangle
    mTriangle.init();
    //init c quad
    mCppRenderer.init(); //comment this line to make java triangle appear
}

@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
    gl.glViewport(0, 0, width, height);
}

@Override
public void onDrawFrame(GL10 gl) {
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
    mTriangle.draw();
    mCppRenderer.draw ();
}
Run Code Online (Sandbox Code Playgroud)

Hak*_*kes 11

问题是由于没有解除缓冲区绑定引起的.

glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
Run Code Online (Sandbox Code Playgroud)

将这两行添加到init和render可以解决问题.