我剛剛開始在Android上使用OpenGL ES(使用this book),並遇到了從第5章採用source代碼到現有的在Android中使用jni的方法的問題(實際上,它也是擔心簡單地運行本地GL應用程序)。我試圖編譯本地代碼以獲取.so lib並在.apk存檔中進一步使用它。但是如果某些庫不存在(GLES/gl.h,EGL/egl.h,GLES/gl.h,GLES/glext.h),編譯是不可能的。安裝OpenGL ES和編譯代碼Android
所以問題是我該如何安裝這些庫(AFAIU,OpenGL ES和EGL安裝)並編譯最普通的本地代碼? (教程非常值得推崇)。
在此先感謝。
編輯:我試過glbuffer例如建議(稍微改變.mk文件),但仍然沒有成功。編譯器給我相同的結果之前:
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
這裏是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:由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)
我翻閱了那本書,它使我使用原生代碼。當我開始嘗試時,我只看了一些示例源代碼,拿了一個.mk文件樣本並重命名了一些東西,然後我就開始運行了。那本書是不是沒有理由可笑地過於複雜,或者在最近的NDK發佈之前,你是否必須這樣做? – 2011-03-14 15:53:04
@Poldie,這並不複雜,它只需要雙重修訂。除了它已經過時了一點,所以它告訴了很多快速學習的東西,儘管有用知道。例子工作正常的變化,但當我來到GL我只是不能編譯它。 Java部分工作良好。 – 2011-03-14 18:47:31