Установите OpenGL ES и компилируйте код для Android

Я только начал изучать OpenGL ES на андроиде (используя эту книгу ) и столкнулся с проблемой принятия исходного кода из главы 5 к существующим методам использования jni в android (на самом деле это касается просто запуска собственного приложения GL). Я пытаюсь скомпилировать собственный код, чтобы получить .so lib и использовать его далее в .apk-архиве. Но компиляция невозможна, если некоторые библиотеки отсутствуют (это GLES / gl.h, EGL / egl.h, GLES / gl.h, GLES / glext.h).

Итак, вопрос в том, как установить эти библиотеки (AFAIU, OpenGL ES и EGL) и скомпилировать самый тривиальный собственный код? (Руководства очень восхищаются).

Заранее спасибо.

EDIT: Я попробовал пример glbuffer, как было предложено (слегка измененный файл .mk), но все равно не удался. Компилятор дает мне тот же результат, что и раньше:

NDK-сборки

Скомпилировать большой палец: egl <= cube.c

/path/jni/cube.c:5:21: ошибка: GLES / gl.h: нет такого файла или каталога // то же сообщение для glbuffer при включении gl.h

Вот код 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); } 

Это ужасно тривиально и не работает.

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) 

Solutions Collecting From Web of "Установите OpenGL ES и компилируйте код для Android"

Эти библиотеки предоставляются самим Android. Однако настройка вашего проекта для их поиска и компиляции вашего JNI (собственного) кода может быть сложной.

Я рекомендую использовать glbuffer в качестве стартового проекта, так как он предоставит вам GLSurfaceView для рисования и установки подходящих Android-библиотек.

Подробные сведения о подключении к библиотекам Android содержатся в jni/Android.mk внутри этого проекта, если вы хотите сделать это с самого начала.

Изменить – видимо, glbuffer отсутствует jni/Application.mk . Создайте его и поместите внутри:

 APP_ABI := armeabi armeabi-v7a APP_PLATFORM := android-8 

Тогда ndk будет знать, чтобы заглянуть внутрь платформы android-8 для ваших включений. Вы можете изменить это на другие версии по мере необходимости.

Я искал NDK для экземпляров заголовочного файла «EGL / egl.h». Этот конкретный пример будет компилироваться и запускаться на уровне API Android 15, но некоторые другие уровни API не имеют заголовка.

Я просто добавил

 #include <jni.h> 

To cube.c & cuberenderer.c

Изменено

 (*g_VM)->AttachCurrentThread (g_VM, (void **) &env, NULL); 

в

 (*g_VM)->AttachCurrentThread (g_VM, (const struct JNINativeInterface ***) &env, NULL); 

Мой Android.mk:

 LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := libgltest_jni LOCAL_CFLAGS := -Werror LOCAL_SRC_FILES := cube.c cuberenderer.c LOCAL_LDLIBS := -llog -lGLESv1_CM include $(BUILD_SHARED_LIBRARY) 

My Application.mk:

 # The ARMv7 is significanly faster due to the use of the hardware FPU APP_ABI := armeabi armeabi-v7a APP_PLATFORM := android-9 

И построил его на android-ndk-r6

Вы дважды использовали имя файла GLES / glext.h.