Установите OpenGL ES и скомпилируйте код для android
Я только начал изучать OpenGL ES на android (используя книги) и наткнулся на вопрос об усыновлении источник код из главы 5 к существующим методам использования jni в android (на самом деле, это также касается просто запуска собственного приложения GL). Я пытаюсь скомпилировать собственный код, чтобы получить .поэтому lib и используйте его дальше .архив apk. Но компиляция невозможна, если некоторые библиотеки отсутствуют (которые являются GLES / gl.ч, ЕГЛ/Эгль.h, GLES / gl.h, GLES / glext.ч.)
Итак, вопрос в том, как установить эти библиотеки (установка AFAIU, OpenGL ES и EGL) и скомпилировать самый тривиальный собственный код? (учебники высоко ценятся).
спасибо заранее.
EDIT: я пробовал glbuffer пример, как было предложено (слегка изменен .Mk file), но все равно без успеха. Компилятор дает мне тот же результат, что и раньше:
ndk-build
скомпилировать thumb: egl
/ path/jni / cube.c: 5: 21: ошибка: GLES / gl.h: нет такого файла или каталога / / такое же сообщение для glbuffer, когда gl.h включается
вот куб.код 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.МК:
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)
4 ответов
эти библиотеки предоставляются самим Android. Однако настройка проекта для их поиска и правильной компиляции кода JNI (native) может быть сложной.
Я рекомендую использовать 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>
для куб.c & cuberenderer.c
изменить
(*g_VM)->AttachCurrentThread (g_VM, (void **) &env, NULL);
to
(*g_VM)->AttachCurrentThread (g_VM, (const struct JNINativeInterface ***) &env, NULL);
Мой Андроид.МК:
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)
Мое Приложение.МК:
# 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