¿Es posible realizar llamadas de OpenGL ES desde su código C ++ y Java?

Tengo una aplicación que va a tomar ventaja de la NDK hacer a los requisitos de gráficos de alta y una biblioteca de generación de terreno que escribí en c + +. Mi pregunta es si ya he hecho mi GUI con el SDK y hago una llamada opengl aleatoria en java como GLES20.glEnable(GL_CULL_FACE); Y luego pasar a llamar a glEnable(GL_DEPTH_TEST); En C + + a través de JNI ¿habría errores conocidos / problemas de compilación? En el caso de que alguien se pregunta por qué estoy pidiendo esto y / o piensa que es una pregunta estúpida es porque en OpenGL de escritorio existe un context OpenGL existente (aunque GLFW se encargó de la mayor parte de esto). Me preocupa si OpenGL ES también tiene un context existente. Si es así, ¿haría que OpenGL ES llamara desde Java y C ++ a un context previamente establecido?

En OpenGL siempre se trata de contexto, sí. Las partes críticas para usted son

  • Cuándo y cómo está su contexto de OpenGL enlazado en las partes de Java?
  • Es el contexto OpenGL mantenido actualizado al llamar al código nativo.

Prácticamente todas las llamadas Java a OpenGL entran en código nativo de cualquier manera. Así que si escribes partes de tu programa con el NDK y llamas a estas partes de la misma manera que llamarías directamente a OpenGL, entonces un contexto OpenGL será actual y utilizable.

La respuesta directa es , pero debe tener cuidado al escribir su código C ++ y Java

  • NDK ofrece algunos códigos NativeActivity y native_app_glue , lo que le ayuda a escribir códigos C ++ puros para la lógica del juego, la representación, etc., y minimizar el requisito de escribir código Java. Encontrará alguna función de punto de entrada como android_main() si está usando esta manera. En este caso, no se puede mezclar la llamada OpenGL en Java y C + + códigos en el mismo contexto, ya que su código nativo se ejecutan en diferentes subprocesos, y se comunican a través de la tubería con hilo de Java [hilo Dalvik VM]
  • Llame a la función nativa en Java a través de JNI, esto será en el mismo hilo, el mismo contexto, la llamada OpenGL API en Java o C + + no debería haber diferencia, al igual que la respuesta de @ datenwolf

Espero que esto ayude ~

  • Android OpenGL ES y 2D
  • OPENGL ES no funciona: no Contexto actual
  • Necesidad de calcular el vector de rotación a partir de los datos de Sensor.TYPE_ORIENTATION
  • GLSL ES falla las variables locales?
  • Cómo acelerar la carga / compilación de shader en Android
  • Simple particle system en Android usando OpenGL ES 1.0
  • ¿Cuándo sincronizo métodos o utilizo bloques sincronizados en mis métodos en un juego de Android?
  • Vista previa de la cámara de corte para TextureView
  • ¿Emulador de BlueStacks para Linux?
  • Pasar variables entre el renderizador y otra clase con queueEvent ()
  • Android Canvas o Open GL ES para el juego 2d?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.