我有一个使用GLES进行渲染的android应用程序。目前使用Java来渲染东西,并呈现很好。由于Android Java应用程序内存的限制,我计划将原生渲染集成到我的Java渲染代码中。使用C++和Java的Android OpenGLES渲染
为此,我遵循基本的本地GLES教程。集成之后,Java渲染不可见,只能看到我用C++渲染的东西。
代码的最简单版本是:https://github.com/khedd/JavaCppGLES Java代码呈现三角形,C++呈现四元组。如果两者都只被称为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();
}
你为“记忆原因”做了这个?你为什么期望这会使用更少的内存?另外,您的C++和Java OpenGL调用可能在不同的线程上发生,但是,如果没有Java和C++之间的iterop代码或想法,那么提供建议将非常困难。 – MuertoExcobito
它不会使用更少的内存,但在本地我可以使用更多的空间。你也是对的,我会试着在明天提供一个示例代码。我很确定它们在java的drawFrame调用中位于同一线程中。 – Hakes