프로 안드로이드 게임 개발의 NDK부분을 만들어보는 중에
OpenGL로 박스 2개를 렌더링하는 예제였습니다.(ch.05)
에뮬레이터에서는 실행이 되는데 오드로이드에서는 실행이 안되네요.(창이 뜨려다가 닫힘)
일단 사용하는 기종은 Odroid이고, 갤럭시S에서도 마찬가지로 문제가 발생하네요.
로그를 찍어보면 glClear 부분에서 멈춰버리네요.(에뮬레이터에서는 잘 되는데 오드로이에선 왜그런지 모르겠어요)
첨부로 소스 압축해서 올려뒀습니다.
아.. 지난여름에 작업했던 java용 openGL 렌더러는 정상적으로 돌아가더라구요.(설정도 그거랑 맞춰봤는데 별 차이가;)
----------------------------------------------------------소스---------------------------------------------------------
public void doJavaDraw(GL10 gl){
Log.d("Draw Frame", "1. Draw Java Frame Start");
/* 가장먼저 할일은 화면을 비우는일
* glClear()를 이용한다
*/
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
// 이부분에서 넘어가지 못하네요.
Log.d("Draw Frame", "2. glClear");
/*
* 카메라를 설정하고 3D 물체들을 그린다.
*/
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
Log.d("Draw Frame", "3. Load Identity");
gl.glTranslatef(0, 0, -3.0f);
gl.glRotatef(mAngle, 0, 1, 0);
gl.glRotatef(mAngle * 0.25f, 1, 0, 0);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
mCube.draw(gl);
Log.d("Draw Frame", "4. cube Draw");
gl.glRotatef(mAngle*2.0f, 0, 1, 1);
gl.glTranslatef(0.5f, 0.5f, 0.5f);
mCube.draw(gl);
mAngle += 1.2f;
}
public int[] getConfigSpec(){
if(mTranslucentBackground){
// 반투명의 배경인 경우 깊이 버퍼와 알파 버퍼가 필수이다.
int[] configSpec = {
EGL10.EGL_RED_SIZE, 8,
EGL10.EGL_GREEN_SIZE, 8,
EGL10.EGL_BLUE_SIZE, 8,
EGL10.EGL_ALPHA_SIZE, 8,
EGL10.EGL_DEPTH_SIZE, 8,
EGL10.EGL_NONE};
return configSpec;
}else{
//깊이 버퍼는 필요하지만 색상버퍼의 세부사항은 중요하지 않다.
int[] configSpec = {
EGL10.EGL_DEPTH_SIZE, 8,
EGL10.EGL_NONE};
return configSpec;
}
}
public void sizeChanged(GL10 gl, int width, int height){
gl.glViewport(0, 0, width, height);
/*
* 투영행렬 설정, 뷰포트가 변했다면 투영행렬을 새로이 설정해줘야한다.
*/
float ratio = (float) width / height;
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);
}
public void surfaceCreated(GL10 gl){
/*
* 기본적으로 OpenGL은 화질을 향상하나 성능을 떨어트리는 기능도 활성화한다.
* 소프트웨어 렌더러가 쓰이는경우 적절히 조정해야한다.
*/
gl.glDisable(GL10.GL_DITHER);
/*
* 한번만 해주는 OpenGL 초기화들. 다른어플이라면 다른값으로 초기화
*/
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);
if(mTranslucentBackground){
gl.glClearColor(0, 0, 0, 0.5f); // 반투명일때 클리어컬러
}else {
gl.glClearColor(1, 1, 1, 0.5f); // 불투명일때
}
gl.glEnable(GL10.GL_CULL_FACE);
gl.glShadeModel(GL10.GL_SMOOTH);
gl.glEnable(GL10.GL_DEPTH_TEST);
}
아 주석은 기존에 있던거 따라적어놓은거라 다른건 없네요.
-------------------------------------------------------------------------------------
---------------------------오드로이 DDMS에서 에러 로그--------------------------------
09-24 02:38:21.921: DEBUG/dalvikvm(1847): GC freed 1291 objects / 55464 bytes in 43ms
09-24 02:38:23.806: INFO/ActivityManager(1771): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=opengl.test/.JavaGLActivity }
09-24 02:38:23.841: INFO/ActivityManager(1771): Start proc opengl.test for activity opengl.test/.JavaGLActivity: pid=3117 uid=10029 gids={}
09-24 02:38:23.901: DEBUG/ddm-heap(3117): Got feature list request
09-24 02:38:23.936: DEBUG/libEGL(3117): loaded /system/lib/egl/libEGL_fimg.so
09-24 02:38:23.936: DEBUG/libEGL(3117): loaded /system/lib/egl/libGLESv1_CM_fimg.so
09-24 02:38:23.946: DEBUG/libEGL(3117): loaded /system/lib/egl/libGLESv2_fimg.so
09-24 02:38:23.946: INFO/(3117): libGLESv1_CM_fimg.so was loaded and GLES 1.1 API was successfully mapped
09-24 02:38:23.951: ERROR/(3117): [Chunk Allocator] 1 blocks (block size:0x200000)
09-24 02:38:23.951: ERROR/(3117): =======Chunk::PrintChunkBlckInfo======
09-24 02:38:23.951: ERROR/(3117): ------------------------------------------------------
09-24 02:38:23.951: ERROR/(3117): [0] use flag: 1, start: 0, size: 2097152, next: 0x0
09-24 02:38:23.951: ERROR/(3117): ------------------------------------------------------
09-24 02:38:23.951: ERROR/(3117): Total Texture Size 0 Byte 0 KB Total Texture Count 0
09-24 02:38:23.951: ERROR/(3117): ------------------------------------------------------
09-24 02:38:24.171: INFO/DEBUG(1740): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
09-24 02:38:24.171: INFO/DEBUG(1740): Build fingerprint: 'odroid/hkdkc100/hkdkc100/:2.1-update1/ERE27/eng.c.20100805.115909:eng/test-keys'
09-24 02:38:24.171: INFO/DEBUG(1740): pid: 3117, tid: 3124 >>> opengl.test <<<
09-24 02:38:24.171: INFO/DEBUG(1740): signal 11 (SIGSEGV), fault addr 45aa8000
09-24 02:38:24.171: INFO/DEBUG(1740): r0 7f000000 r1 7f000000 r2 7f000000 r3 7f000000
09-24 02:38:24.171: INFO/DEBUG(1740): r4 7f000000 r5 7f000000 r6 7f000000 r7 7f000000
09-24 02:38:24.171: INFO/DEBUG(1740): r8 45aa8000 r9 ffffffff 10 7f000000 fp 7f000000
09-24 02:38:24.171: INFO/DEBUG(1740): ip 00010978 sp 45114cd0 lr a8c36b24 pc a8c3cf40 cpsr 20000010
09-24 02:38:24.196: INFO/DEBUG(1740): #00 pc 0003cf40 /system/lib/egl/libGLESv1_CM_fimg.so
09-24 02:38:24.196: INFO/DEBUG(1740): #01 pc 00036b20 /system/lib/egl/libGLESv1_CM_fimg.so
09-24 02:38:24.196: INFO/DEBUG(1740): #02 pc 00029c6c /system/lib/egl/libGLESv1_CM_fimg.so
09-24 02:38:24.201: INFO/DEBUG(1740): #03 pc 0000ecb4 /system/lib/libdvm.so
09-24 02:38:24.201: INFO/DEBUG(1740): #04 pc 00038838 /system/lib/libdvm.so
09-24 02:38:24.201: INFO/DEBUG(1740): #05 pc 0003197c /system/lib/libdvm.so
09-24 02:38:24.201: INFO/DEBUG(1740): #06 pc 000139b8 /system/lib/libdvm.so
09-24 02:38:24.201: INFO/DEBUG(1740): #07 pc 00019338 /system/lib/libdvm.so
09-24 02:38:24.201: INFO/DEBUG(1740): #08 pc 00018804 /system/lib/libdvm.so
09-24 02:38:24.201: INFO/DEBUG(1740): #09 pc 0004eed0 /system/lib/libdvm.so
09-24 02:38:24.201: INFO/DEBUG(1740): #10 pc 0004eef8 /system/lib/libdvm.so
09-24 02:38:24.201: INFO/DEBUG(1740): #11 pc 000426d4 /system/lib/libdvm.so
09-24 02:38:24.201: INFO/DEBUG(1740): #12 pc 0000fd74 /system/lib/libc.so
09-24 02:38:24.201: INFO/DEBUG(1740): #13 pc 0000f840 /system/lib/libc.so
09-24 02:38:24.201: INFO/DEBUG(1740): code around pc:
09-24 02:38:24.201: INFO/DEBUG(1740): a8c3cf30 e1a05000 e1a06000 e1a07000 e25cc008
09-24 02:38:24.206: INFO/DEBUG(1740): a8c3cf40 a8a800ff aafffffc e28cc008 e35c0000
09-24 02:38:24.206: INFO/DEBUG(1740): a8c3cf50 0a000004 e3a03000 e25cc001 e788a003
09-24 02:38:24.206: INFO/DEBUG(1740): code around lr:
09-24 02:38:24.206: INFO/DEBUG(1740): a8c36b14 e002089a e1a0100b e58dc000 eb001912
09-24 02:38:24.206: INFO/DEBUG(1740): a8c36b24 eaffff6f e3a01cb1 e92d45f0 e1a02001
09-24 02:38:24.206: INFO/DEBUG(1740): a8c36b34 e1a08001 e2822044 e2811058 e288304c
09-24 02:38:24.206: INFO/DEBUG(1740): stack:
09-24 02:38:24.206: INFO/DEBUG(1740): 45114c90 45114d24
09-24 02:38:24.206: INFO/DEBUG(1740): 45114c94 a8c3ca74 /system/lib/egl/libGLESv1_CM_fimg.so
09-24 02:38:24.206: INFO/DEBUG(1740): 45114c98 a8b13614
09-24 02:38:24.206: INFO/DEBUG(1740): 45114c9c a8b120f0 /system/lib/egl/libEGL_fimg.so
09-24 02:38:24.206: INFO/DEBUG(1740): 45114ca0 001f3b2c [heap]
09-24 02:38:24.206: INFO/DEBUG(1740): 45114ca4 a8c78670 /system/lib/egl/libGLESv1_CM_fimg.so
09-24 02:38:24.206: INFO/DEBUG(1740): 45114ca8 a8e6f550 /system/lib/egl/libGLESv1_CM_fimg.so
09-24 02:38:24.206: INFO/DEBUG(1740): 45114cac 0007001c [heap]
09-24 02:38:24.206: INFO/DEBUG(1740): 45114cb0 0000eecd [heap]
09-24 02:38:24.206: INFO/DEBUG(1740): 45114cb4 a8c36558 /system/lib/egl/libGLESv1_CM_fimg.so
09-24 02:38:24.206: INFO/DEBUG(1740): 45114cb8 00000000
09-24 02:38:24.206: INFO/DEBUG(1740): 45114cbc 3f800000
09-24 02:38:24.206: INFO/DEBUG(1740): 45114cc0 00000000
09-24 02:38:24.206: INFO/DEBUG(1740): 45114cc4 00000000
09-24 02:38:24.206: INFO/DEBUG(1740): 45114cc8 df002777
09-24 02:38:24.206: INFO/DEBUG(1740): 45114ccc e3a070ad
09-24 02:38:24.206: INFO/DEBUG(1740): #00 45114cd0 45aea100
09-24 02:38:24.206: INFO/DEBUG(1740): 45114cd4 00004100
09-24 02:38:24.206: INFO/DEBUG(1740): 45114cd8 00000001
09-24 02:38:24.206: INFO/DEBUG(1740): 45114cdc 36c86120
09-24 02:38:24.206: INFO/DEBUG(1740): 45114ce0 00000140
09-24 02:38:24.206: INFO/DEBUG(1740): 45114ce4 000001ae
09-24 02:38:24.206: INFO/DEBUG(1740): #01 45114ce8 23aad000
09-24 02:38:24.206: INFO/DEBUG(1740): 45114cec bf800000
09-24 02:38:24.206: INFO/DEBUG(1740): 45114cf0 002c3d08 [heap]
09-24 02:38:24.206: INFO/DEBUG(1740): 45114cf4 00000001
09-24 02:38:24.206: INFO/DEBUG(1740): 45114cf8 000001ad
09-24 02:38:24.206: INFO/DEBUG(1740): 45114cfc 00000000
09-24 02:38:24.206: INFO/DEBUG(1740): 45114d00 00000000
09-24 02:38:24.206: INFO/DEBUG(1740): 45114d04 45a64000 /dev/pmem
09-24 02:38:24.206: INFO/DEBUG(1740): 45114d08 00000004
09-24 02:38:24.206: INFO/DEBUG(1740): 45114d0c fffffec0
09-24 02:38:24.206: INFO/DEBUG(1740): 45114d10 ffffffff
09-24 02:38:24.206: INFO/DEBUG(1740): 45114d14 00ffffff
09-24 02:38:24.206: INFO/DEBUG(1740): 45114d18 00000001
09-24 02:38:24.206: INFO/DEBUG(1740): 45114d1c 00000001
09-24 02:38:24.206: INFO/DEBUG(1740): 45114d20 3f800000
09-24 02:38:24.206: INFO/DEBUG(1740): 45114d24 23aad000
09-24 02:38:24.206: INFO/DEBUG(1740): 45114d28 45a64000 /dev/pmem
09-24 02:38:24.206: INFO/DEBUG(1740): 45114d2c 36c00020
09-24 02:38:24.206: INFO/DEBUG(1740): 45114d30 451a5020 /dev/s3c-g3d
09-24 02:38:24.206: INFO/DEBUG(1740): 45114d34 00000140
09-24 02:38:24.206: INFO/DEBUG(1740): 45114d38 000001ae
09-24 02:38:24.206: INFO/DEBUG(1740): 45114d3c 00000000
09-24 02:38:24.206: INFO/DEBUG(1740): 45114d40 00000011
09-24 02:38:24.206: INFO/DEBUG(1740): 45114d44 00000000
09-24 02:38:24.206: INFO/DEBUG(1740): 45114d48 a8e63178 /system/lib/egl/libGLESv1_CM_fimg.so
09-24 02:38:24.206: INFO/DEBUG(1740): 45114d4c a8e63178 /system/lib/egl/libGLESv1_CM_fimg.so
09-24 02:38:24.206: INFO/DEBUG(1740): 45114d50 00004100
09-24 02:38:24.206: INFO/DEBUG(1740): 45114d54 002afe30 [heap]
09-24 02:38:24.206: INFO/DEBUG(1740): 45114d58 a8e73518
09-24 02:38:24.206: INFO/DEBUG(1740): 45114d5c 45114d90
09-24 02:38:24.211: INFO/DEBUG(1740): 45114d60 42711f30
09-24 02:38:24.211: INFO/DEBUG(1740): 45114d64 42711f18
09-24 02:38:24.211: INFO/DEBUG(1740): 45114d68 00122c80 [heap]
09-24 02:38:24.211: INFO/DEBUG(1740): 45114d6c a8c29c70 /system/lib/egl/libGLESv1_CM_fimg.so
09-24 02:38:24.421: DEBUG/Zygote(1742): Process 3117 terminated by signal (11)
09-24 02:38:24.426: INFO/WindowManager(1771): WIN DEATH: Window{43f19ca8 opengl.test/opengl.test.JavaGLActivity paused=false}
09-24 02:38:24.426: INFO/WindowManager(1771): WIN DEATH: Window{43f32438 SurfaceView paused=false}
09-24 02:38:24.431: INFO/ActivityManager(1771): Process opengl.test (pid 3117) has died.
09-24 02:38:24.436: INFO/UsageStats(1771): Unexpected resume of com.android.launcher while already resumed in opengl.test
09-24 02:38:24.451: INFO/ActivityManager(1771): Displayed activity opengl.test/.JavaGLActivity: 638 ms (total 638 ms)
09-24 02:38:24.461: WARN/InputManagerService(1771): Got RemoteException sending setActive(false) notification to pid 3117 uid 10029
09-24 02:38:29.536: DEBUG/dalvikvm(1875): GC freed 2256 objects / 103984 bytes in 32ms
09-24 02:38:30.466: DEBUG/WifiService(1771): ACTION_BATTERY_CHANGED pluggedType: 2
09-24 02:38:35.521: DEBUG/dalvikvm(2801): GC freed 1053 objects / 223224 bytes in 46ms
09-24 02:38:35.526: DEBUG/WifiService(1771): ACTION_BATTERY_CHANGED pluggedType: 2
09-24 02:38:40.556: DEBUG/WifiService(1771): ACTION_BATTERY_CHANGED pluggedType: 2
09-24 02:38:55.676: DEBUG/WifiService(1771): ACTION_BATTERY_CHANGED pluggedType: 2
09-24 02:39:15.841: DEBUG/WifiService(1771): ACTION_BATTERY_CHANGED pluggedType: 2
09-24 02:39:20.876: DEBUG/WifiService(1771): ACTION_BATTERY_CHANGED pluggedType: 2
------------------------------------------------------------------------------------------------------------
하드웨어에서 안되는 문제때문에 추석 연휴 3일을 허비해버렸네요.
관련된 문제도 찾는다고 찾아보았지만 어디가 연관있는건지 정확하게 몰라서 필요한 정보를 못구했어요.
정답은 아니더라도 힌트라도 있으면 부탁드리겠습니다.
좋은하루되세요.
어떤 사람이 게임을 만들다가 다음 부분을 발견했죠.OpenGL ES 2.X 드라이버가 32비트 형식의 텍스쳐를 그릴 수 없다.OpenGL ES 2.X 블랜딩이 동작하지 않는다.OpenGL ES 1.X 공식 드라이버는 가속이 되지 않는다. 초당 3프레임 나온다.OpenGL ES 1.X 비 공식 삼드로이드 드라이버에는 버그가 있다.32비트 형식 텍스쳐는 내부적을 16비트로 적재되기 때문에 정확히 그려지지 않는다.
그래픽 칩 드라이버의 구현 특징을 알아내는 것은 PC에서나 임베드디에서나 항상 골칫거리인 것 같습니다.ATI Radeon같은 그래픽 최신 버젼도 OpenGL 드라이버에 스펙대로 동작하지 않는 면이 있습니다. 그때는 ATI에 버그 수정을 의뢰합니다. 그럴 수 없는 경우라면 개발자가 우회해야죠. 모먼트와 스피카 드라이버 개발은 최근 (1달 이내)방문 했을 때 까지도 포럼이 활성화 되어 있었네요.
스피카 공식 드라이버 영상http://www.youtube.com/watch?v=NSwGxSpx6P4커뮤니티 개발 드라이버 영상http://www.youtube.com/watch?v=NGPZ5beCX0M&feature=related
PS. 성공적으로 맵핑된 인터페이스는 1.1버젼이니까 1.1버젼으로 돌아가도록 수정해 보시면 어떨까요?