기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.

프로 안드로이드 게임 개발의 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일을 허비해버렸네요.

관련된 문제도 찾는다고 찾아보았지만 어디가 연관있는건지 정확하게 몰라서 필요한 정보를 못구했어요.

 

정답은 아니더라도 힌트라도 있으면 부탁드리겠습니다.

 

좋은하루되세요.

 

 

 

 


바이퍼

2010.09.24 23:29:17
*.138.56.105

일단 애뮬레이터에서 문제없이 돌아가는 걸로 봐서 틀림없이 잘 돌아가는 시스템(예를 들자면 넥서스 원)이 있을 것 같습니다. 문제는 타겟시스템인데 예전의 문제를 하나 일러 드리겠습니다.

삼성에서 외국에 발매한 안드로이드 모델 중에 스피카와 모먼트라는 모델이 있습니다. 둘다 같은 칩셋을 사용하고 있죠.

둘다 안드로이드 1.5 버젼이 탑재되어 발매되고 현재는 2.1버젼으로 업그레이드 된 모양입니다.

문제는 opengl es드라이버 부분이었습니다. 


어떤 사람이 게임을 만들다가 다음 부분을 발견했죠.

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버젼으로 돌아가도록 수정해 보시면 어떨까요?

List of Articles
번호 제목 글쓴이 날짜 조회 수
» 오드로이드에서 OpenGL문제가 발생했어요. file [1] 이두영 2010-09-24 1401

사용자 로그인