我试图获得一个Android原生活动(完全ndk)来运行openGL代码..我已经环顾了很多,并花了很多时间在IRC上。所有的道路都让我无所适从。
在我的app_gradle中,我有以下几行
ldFlags.add("-lGLESv2")
ldFlags.add("-lGLESv1_CM")
ldLibs.addAll(["log", "android", "EGL", "GLESv1_CM", "GLESv2"])
我认为应该链接正确的库(可能有点过分)
在我的代码(main.c)中,我有这个
#include <EGL/egl.h>
#include <GLES/gl.h>
#include <GLES2/gl2.h>
GLuint loadGLProgram() {
LOGI("GETTING HERE 1");
GLuint program = glCreateProgram();
LOGI("GETTING HERE 2");
....
return program;
}
当我运行此代码时。
...native-activity: GETTING HERE 1
...A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 2965 (native_activity)
我想知道是否有人看过这个,或者是否有人发现/创建了一个真正原生的简单openGL示例。
这是一个更详细的日志。还在挖掘。
03-29 22:13:55.030 1013-1013/? A/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
03-29 22:13:55.030 1013-1013/? A/DEBUG: Build fingerprint: 'Android/sdk_phone_x86_64/generic_x86_64:6.0/MASTER/2524533:userdebug/test-keys'
03-29 22:13:55.030 1013-1013/? A/DEBUG: Revision: '0'
03-29 22:13:55.030 1013-1013/? A/DEBUG: ABI: 'x86'
03-29 22:13:55.030 1013-1013/? A/DEBUG: pid: 2109, tid: 2124, name: com.Little.Aisy >>> com.Little.Aisy <<<
03-29 22:13:55.030 1013-1013/? A/DEBUG: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0
03-29 22:13:55.040 1013-1013/? A/DEBUG: eax f69d9ec0 ebx eb7b8d58 ecx e7ecd12c edx e7ecd12c
03-29 22:13:55.040 1013-1013/? A/DEBUG: esi e4b63930 edi e4b63970
03-29 22:13:55.040 1013-1013/? A/DEBUG: xcs 00000023 xds 0000002b xes 0000002b xfs 00000007 xss 0000002b
03-29 22:13:55.040 1013-1013/? A/DEBUG: eip 00000000 ebp e4b63748 esp e4b636ec flags 00210292
03-29 22:13:55.040 1013-1013/? A/DEBUG: backtrace:
03-29 22:13:55.050 1013-1013/? A/DEBUG: #00 pc 00000000 <unknown>
03-29 22:13:55.050 1013-1013/? A/DEBUG: #01 pc 00002a66 /data/app/com.Little.Aisy-2/lib/x86/libnative-activity.so
03-29 22:13:55.050 1013-1013/? A/DEBUG: #02 pc 00003076 /data/app/com.Little.Aisy-2/lib/x86/libnative-activity.so
03-29 22:13:55.050 1013-1013/? A/DEBUG: #03 pc 00003ab3 /data/app/com.Little.Aisy-2/lib/x86/libnative-activity.so
03-29 22:13:55.050 1013-1013/? A/DEBUG: #04 pc 00003208 /data/app/com.Little.Aisy-2/lib/x86/libnative-activity.so (android_main+236)
03-29 22:13:55.050 1013-1013/? A/DEBUG: #05 pc 00003be5 /data/app/com.Little.Aisy-2/lib/x86/libnative-activity.so
03-29 22:13:55.050 1013-1013/? A/DEBUG: #06 pc 00081933 /system/lib/libc.so (__pthread_start(void*)+56)
03-29 22:13:55.050 1013-1013/? A/DEBUG: #07 pc 000227f2 /system/lib/libc.so (__start_thread+25)
03-29 22:13:55.050 1013-1013/? A/DEBUG: #08 pc 000170b6 /system/lib/libc.so (__bionic_clone+70)
03-29 22:13:55.180 1013-1013/? A/DEBUG: Tombstone written to: /data/tombstones/tombstone_08
03-29 22:13:55.180 1013-1013/? E/DEBUG: AM write failed: Broken pipe
答案 0 :(得分:3)
在评论中,您表示您正在使用以下调用创建上下文:
context = eglCreateContext(display, config, NULL, NULL);
如果将eglCreateContext与attrib_list
参数一起使用,则将创建GLES 1.0上下文。 GLES 1.0不支持着色器,因此,使用glCreateProgram
将导致未定义的行为(在这种情况下崩溃)。要使用GLES 2.0支持创建上下文,请使用以下命令:
EGLint contextAttribs[] =
{
EGL_CONTEXT_CLIENT_VERSION, 2, // Specifies OpenGL ES 2.0.
EGL_NONE
};
context = eglCreateContext(display, config, NULL, contextAttribs);