Renderización de Android OpenGLES con C ++ y Java

Tengo una aplicación de Android que usa GLES para renderizar. En la actualidad, utilizar Java para procesar cosas y renderizar está bien. Debido a la limitación en la memoria de la aplicación Java de Android, planeo integrar el renderizado nativo a mi código de renderizado de Java.

Para ello, seguí los tutoriales básicos de GLES nativos. Después de integrar, la representación de Java no era visible, solamente las cosas que hacía en C ++ fueron vistas.

La versión más simple del código está en: https://github.com/khedd/JavaCppGLES El código Java representa un triángulo, C ++ representa un Quad. Si ambos se llaman sólo Quad es representador.

¿Cómo puedo solucionar este problema? ¿Debo portar todo a C ++?

Código en pocas palabras.

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 (); } 

2 Solutions collect form web for “Renderización de Android OpenGLES con C ++ y Java”

El problema fue causado por no desvincular los tampones.

 glBindBuffer(GL_ARRAY_BUFFER, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); 

Añadir estas dos líneas a init y render corrige el problema.

La forma más sencilla de hacerlo es llamar directamente a su código C ++ desde su renderizador de superficie.

 private class PlayerRenderer implements GLSurfaceView.Renderer { @Override public void onSurfaceCreated(GL10 gl, EGLConfig config) { surface_created(); // native c++ } @Override public void onSurfaceChanged(GL10 gl, int wid, int hgt) { surface_changed(wid, hgt); // native c++ } @Override public void onDrawFrame(GL10 gl) { surface_draw(); // native c++ } } private native void surface_created(); private native void surface_changed(int w, int h); private native void surface_draw(); 

No es necesario cambiar el contexto.

  • ¿Cuál es la diferencia entre los paquetes android.opengl y javax.microedition.khronos.opengles?
  • ¿Cuántos dispositivos Android soportan GLSurfaceView.setPreserveEGLContextOnPause hoy?
  • AndEngine: colisión de dos sprites
  • Textura negra de OpenGL ES en Nexus S
  • Cómo utilizar OpenCL en Android?
  • Android OpenGL ES 2.0: El modelo de cubo no sólo está distorsionado (la perspectiva es incorrecta?), Sino también las caras se cargan incorrectamente (los vértices no son correctos?)
  • 'Texture2D': No se encontró ninguna función sobrecargada equivalente OpenGL ES2 Android (JAVA)
  • Enfoque para crear complejos dibujos 3D en OpenGL ES (en Android)?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.