Установите OpenGL ES и скомпилируйте код для Android - PullRequest
8 голосов
/ 14 марта 2011

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

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

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

РЕДАКТИРОВАТЬ: я попробовал пример glbuffer , как было предложено (слегка измененный файл .mk), новсе еще безуспешно.Компилятор дает мне тот же результат, что и раньше:

ndk-build

Компиляция большого пальца: egl <= cube.c </p>

/ 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)

Ответы [ 4 ]

17 голосов
/ 14 марта 2011

Эти библиотеки предоставляются самим 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 для ваших включений. При необходимости вы можете изменить это на другие версии.

5 голосов
/ 14 июня 2012

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

3 голосов
/ 02 августа 2011

Я только что добавил

#include <jni.h>

в 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

0 голосов
/ 24 декабря 2013

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

...