Installieren OpenGL ES und kompilieren von code für android
Ich habe gerade angefangen zu lernen, OpenGL ES unter android (mit dieses Buch) und stieß auf ein Problem der Annahme Quelle code aus Kapitel 5 zu den bestehenden Methoden der Verwendung von jni in android (eigentlich geht es hier auch um einfach läuft eine native app GL). Ich bin versucht zu kompilieren, die nativen code zu erhalten .so lib und verwenden es weiter .apk-Archiv. Aber die Zusammenstellung ist nicht möglich, wenn bestimmte libs nicht vorhanden sind (die GLES/gl.h, EGL/egl.h, GLES/gl.h, GLES/glext.h).
Also die Frage ist wie installiere ich diese libs (AFAIU, OpenGL ES und EGL-installation), und kompilieren Sie die meisten trivial native code? (tutorials sind sehr bewundert).
Vielen Dank im Voraus.
EDIT: ich habe versucht, die glbuffer Beispiel, wie vorgeschlagen wurde (leicht verändert .mk-Datei), aber immer noch kein Erfolg. Compiler gibt mir das gleiche Ergebnis wie vorher:
ndk-build
Kompilieren Daumen: egl <= cube.c
/Pfad/jni/cube.c:5:21: Fehler: GLES/gl.h: No such file or directory //gleiche Nachricht für glbuffer, wenn gl.h ist im Lieferumfang enthalten
Hier ist der Würfel.c-code:
#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 ist furchtbar trivial und nicht arbeiten, noch nicht.
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)
- Ich blätterte das Buch und es hat mich dann mit Native-code. Wenn ich gekommen, um zu versuchen, es, ich sah nur in einigen der Beispiel-Quelle, nahm eine Probe .mk-Datei umbenannt und ein paar Dinge, und ich war laufen. Ist das Buch lächerlich kompliziert für keinen Grund, oder haben Sie, Dinge zu tun, bevor eine neuere DDR-Veröffentlichung kam?
- Es ist nicht kompliziert, es erfordert nur Doppel-revision. Außerdem ist es ein bisschen veraltet, so dass es sagen, eine Menge Sachen, die überflüssig für schnelles lernen, aber nützlich zu wissen. Beispiele funktionieren mit Veränderungen, aber wenn ich kam, um die GL, die ich einfach nicht kompilieren. Java-Teil funktioniert gut.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Bibliotheken werden von Android selbst. Doch der Aufbau Ihres Projekts, Sie zu finden und kompilieren Sie Ihre JNI (native) code richtig kann entmutigend sein.
Empfehle ich glbuffer als Start-Projekt, da es Ihnen mit einem
GLSurfaceView
zeichnen Sie Sie auf und legen Sie Sie mit der richtigen Android-Bibliotheken.Die details der Anbindung an den Android-Bibliotheken enthalten sind, in
jni/Android.mk
im inneren, dass Projekt-wenn Sie möchten, um give it a shot sich von Grund auf.Bearbeiten - offenbar glbuffer fehlt
jni/Application.mk
. Erstellen Sie Sie, und setzen Sie dieses innen:Dann die DDR, weiß, Blick in die android-8-Plattform für Ihren enthält. Sie können dies ändern, um andere Versionen, wie gebraucht.
Suchte ich den NDK für Instanzen von "EGL/egl.h" header-Datei. Dieses Beispiel kompilieren und ausführen auf Android-API-level 15, aber einige andere API-Level nicht über die header.
EGL/egl.h
header in Android. Dieser arbeitete für mich. Kompiliert mitAPP_PLATFORM = android-14
Habe ich nur noch
zu
cube.c & cuberenderer.c
Geändert
zu
Meinem Android.mk:
Meiner Anwendung.mk:
Gebaut und es auf android-ndk-r6
Du verwendet, die mit dem Namen GLES/glext.h zweimal.