Acabo de empezar a aprender OpenGL ES en android (usando this book) y encontré un problema de adopción del código source del capítulo 5 a los métodos existentes de uso de jni en android (en realidad, también preocupaciones simplemente ejecutando una aplicación GL nativa). Estoy intentando compilar el código nativo para obtener .so lib y usarlo más en el archivo .apk. Pero la compilación no es posible si ciertas libs no están presentes (que son GLES/gl.h, EGL/egl.h, GLES/gl.h, GLES/glext.h).Instalar OpenGL ES y compilar el código para android
Entonces, la pregunta es ¿cómo instalo esas libs (instalación de AFAIU, OpenGL ES y EGL) y compilo el código nativo más trivial? (los tutoriales son muy admirados).
Gracias de antemano.
EDITAR: He intentado el ejemplo glbuffer como se sugirió (archivo .mk ligeramente cambiado), pero todavía no tuvo éxito. Compilador me da el mismo resultado que antes:
ndk-build
Compile thumb: egl <= cube.c
/path/jni/cube.c:5:21: error: GLES/gl.h: No such file or directory // same message for glbuffer when gl.h is being included
Este es el código cube.c:
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <GLES/gl.h>
#define FIXED_ONE 0x10000
#define one 1.0f
typedef unsigned char byte;
extern void jni_printf(char *format, ...);
// Cube static
GLfloat vertices[24] = { -one, -one, -one, one, -one,
-one, one, one, -one, -one, one, -one, -one, -one, one, one, -one, one, one, one, one, -one, one, one, };
static GLfloat colors[] = { 0, 0, 0, one, one, 0, 0, one, one, one, 0, one, 0, one, 0> , one, 0, 0, one, one, one, 0, one, one, one, one, one, one, 0, one, one, one, };
static byte indices[] = { 0, 4, 5, 0, 5, 1, 1, 5, 6, 1, 6, 2, 2, 6, 7, 2, 7, 3, 3, 7, 4, 3, 4, 0, 4, 7, 6, 4, 6, 5, 3, 0, 1, 3, 1, 2 };
void Cube_draw() {
glFrontFace(GL_CW);
glVertexPointer(3, GL_FLOAT, 0, vertices);
glColorPointer(4, GL_FLOAT, 0 , colors);
glDrawElements(GL_TRIANGLES, 36, GL_UNSIGNED_BYTE, indices); }
Es muy trivial y no funciona, sin embargo.
Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_LDLIBS := -lGLESv1_CM.so
LOCAL_MODULE := egl
LOCAL_SRC_FILES := cube.c cuberenderer.c
include $(BUILD_SHARED_LIBRARY)
Hojeé ese libro y me desalentó con el código nativo. Cuando llegué a intentarlo, simplemente miré algunos ejemplos de la fuente, tomé un archivo .mk de muestra y cambié el nombre de algunas cosas y ya estaba funcionando. ¿Es ese libro ridículamente complicado sin razón, o tenía que hacer las cosas de esa manera antes de que saliera un lanzamiento más reciente de NDK? –
@Poldie, no es complejo, solo requiere una doble revisión. Además, está obsoleto un poco, por lo que dice muchas cosas redundantes para un aprendizaje rápido, aunque es útil saberlo. Los ejemplos funcionan bien con los cambios, pero cuando llegué a GL no puedo compilarlo. La parte de Java funciona bien. –