¿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?
- Perfiles de GPU y callbacks en OpenGL ES
- ¿Cómo puedo extraer las normales, las texturas, los vértices, los índices del archivo .obj de la licuadora al archivo .h?
- La manera más eficiente de dibujar objetos idénticos múltiples?
- ¿Por qué está bloqueando glClear en OpenGLES?
- ¿Diferencias y ventajas de SurfaceView vs GLSurfaceView en Android?
- ¿Qué tipo de efectos secundarios tiene libgdx numSamples?
- Cómo escribir / prevenir la escritura en el buffer de profundidad OpenGL en GLSL
- Esfera 3D OpenGL
- Creación de una pantalla apropiada de Splash / Loading de Android
- Limitación del tamaño de la textura? Android Open GL ES 2.0
- Error de procesamiento de OpenGL ES
- Android GLSurfaceView
- ¿Es mejor usar GL_FIXED o GL_FLOAT en Android
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 Sí , pero debe tener cuidado al escribir su código C ++ y Java
- NDK ofrece algunos códigos
NativeActivity
ynative_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 comoandroid_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: Cómo cargar imagen dinámicamente desde el servidor por su nombre de SQlite
- Libros de Android en el sistema operativo