포럼 회원으로 등록하신분만 다운로드가 가능합니다. 최대 업로드 가능한 용량은 20MB 입니다.

Android에 OpenGL HW 가속기를 포팅해보려고 이것저것 알아보고 있습니다.
아직까지는(2009년 4월 기준) HAL에서 OpenGL ES에 대한 부분이 없는듯 합니다.

아시겠지만 Android는 모든 그래픽 Rendering은 OpenGL을 통해서 이루어집니다.
HAL에 OpenGL ES가 없기 때문에 현재는 퀄컴 MSM칩의 하드웨어 가속기만 지원하고 있습니다.
안드로이드 2.0에서는 다양한 GPU지원을 위한 HAL이 준비될것 같지만 확실하지는 않습니다. ㅠㅠ

frameworks/base/opengl/libagl/ 의 소스코드로 만들어진 libagl.so는 Software에 의한 OpenGL ES emulator입니다.
가속기를 OpenGL ES 1.0 기반의 fixed point로 Google에서 구현한 것이지요.
ARM 어셈블러 코드까지 동원해서 최적화가 되어있어 속도는 쓸만한 편이지만, 하드웨어 가속기에 비할수는 없겠지요.

3D 하드웨어 가속기 라이브러리의 이름은 libGLES_CM.so 입니다.
여기서 해당 하드웨어의 EGL 인터페이스를 연결하는것으로 보입니다.
참고로 G1루트파일시스템에 있는 libhgl.so는 하드웨어 가속기를 사용하는 GL 라이브러리 입니다. libagl의 반대가 되겠죠. 
이 libhgl은 해당 GPU마다 모두 다르며, 소스도 없습니다. 반도체 벤더의 IP이기때문이죠.

그 외에 메모할만한 중요한 정보로는 pixelflinger는 하드웨어 가속기가 없을때 사용되는 소프트웨어 기반의 렌더러라는것입니다.
반대로 SurfaceFlingler는 안드로이드의 그래픽 합성(Composition) 엔진으로 OpenGL ES를 통과하다는 점도 중요하네요.


결론적으로 하드웨어 가속기를 사용/이식 할수 있는 몇가지 방법이 있습니다.

1. Google이 HAL을 만들어 다양한 GPU에대한 이식성이 생길때까지 기다리는 방법이 있습니다.

2. eglSwapBuffers() 가 호출될때마다 HW 가속기로 그래픽 버퍼를 복사하는 방법이 있습니다.(트릭이긴 하지만 가장 현실적인 방법인듯)

3. agl을 수정하여 HW 가속기 API에 연결되도록 수정한다. (2달 정도의 개고생일것 같습니다만ㅡ 이식성은 확실합니다.)


** 제가 반나절정도 안드로이드 소스 트리를 좀 분석한 결과로,  위 정보는 신뢰도가 그리 높은 편은 아닙니다.  ^.^
** 개인적인 정리차원에서 올린 글이니 참고만하시길...  좀 더 분석이 끝나면 업데이트 하겠습니다.

권윤택

2009.06.16 08:52:31
*.126.13.193

안녕하세요 질문이 있는데요? libhgl.so를 사용하지 않고 libagl.so를 사용할려면 어떤 부분을 수정해야하나요?
답변부탁드립니다.

이제현

2009.06.18 07:22:59
*.40.239.206

기본적으로 libagl.so이 활성화 되어 있습니다. G1같은 공식 제품이 아니라면...
혹시 G1에서 테스트용도로 libagl.so를 사용하시려는것은 아니겠지요?

권윤택

2009.06.18 19:34:46
*.106.38.200

넵, G1에서는 사용하지 않습니다.  로그에 libhgl.so을 찾을수 없다고 나옵니다. 제가 작업하는 소스가 기본적으로 libhgl.so 사용하는것 같은데요 libagl.so로 변경할려고 하는데 어느 부분을 수정해야하는지 모르겠습니다. ^^;
List of Articles
번호 제목 글쓴이 날짜 조회 수
24 Google Android 커널 버전별 Testing Report [2] 김재훈 2009-05-17 11493
23 Android 동작시 Battery 관련 /sys 파일 에러 & Power off ... [2] 2009-05-09 11010
22 Android 커널 2.6.27~28버젼에서 CONFIG_SUSPEND옵션시 죽는 문... [3] 2009-05-08 10026
21 S3C6410 target으로의 Android porting에 대하여(1) [3] 고현철 2009-04-23 20133
20 Android 초보도 가능한 Touch 잡기. [1] 2009-04-23 12229
19 touch calibrate 방법 file [1] 전병환 2009-04-23 10442
18 Android에서의 Linux Network 환경 설정 방법 [1] 김재훈 2009-04-21 20514
17 PV와 Android [5] 이제현 2009-04-19 18163
» OpenGL ES와 Android [3] 이제현 2009-04-18 22839
15 Android에서 yaffs2 image 만들때 oobfree 따르도록 수정 file [1] 2009-04-16 11896
14 안드로이드 6410 보드 관련 s3c-ts touch 잡기 [5] 김한철 2009-04-16 13738
13 Android yaffs image 흠..oob가 이상합니다. 2009-04-16 10888
12 File System 관련 문제 및 power off 문제 해결 [3] 김한철 2009-04-14 10202
11 Google Android Kernel-2.6.29 file 관리자 2009-04-14 12085
10 aesop-6410용 android 2.6.24 source file [12] 고현철 2009-04-12 12131
9 android를 6410에 포팅하면서... [7] 전병환 2009-04-10 18227
8 Android Debug Bridge(ADB) 사용 가이드 김재훈 2009-04-09 18864
7 Android Initialization Process 최종환 2009-04-09 24638
6 Android 부팅 및 초기화 절차 김재훈 2009-04-09 17000
5 Android용 root filesystem으로 cramfs 구성 할 때의 주의사항 [7] 김영문 2009-04-09 21375

사용자 로그인