HPC호환 GAPI 드라이버 만들기

PocketFrog나 PocketHAL등을 사용하려면 Game API(GAPI)가 지원되어야 합니다. 그런데 이 GAPI라는 녀석은 PocketPC에서만 지원되는 놈이라 일반적인 CE .net에서는 동작하지 않습니다. 그러던 중 찾아보니 HPC계열에서 구동하는 GAPI가 있더군요. 혹시나 싶어 GAPI호환 DLL을 제작하면 되지 않을까 싶어 한번 만들어 봤습니다.

gx.h 원본 소스 보기


위의 소스를 보면 GX.DLL이 하는 일이 몇가지 없다는 것을 알 수 있습니다. 결국 이 녀석이 하는 일은 비디오 메모리의 구성 상태와 비디오 메모리 주소를 응용 어플리케이션에 잘 넘겨줘서 응용 어플리케이션단에서 디바이스 종속적이지 않게 코딩할 수 있게 도와주는 역할을 합니다.

핵심적으로 구현해야 하는 API는 아래의 네개의 API입니다.
[CODE] GXDLL_API int GXOpenDisplay(HWND hWnd, DWORD dwFlags); GXDLL_API int GXCloseDisplay(); GXDLL_API void * GXBeginDraw(); GXDLL_API GXDisplayProperties GXGetDisplayProperties(); [/CODE]
  • GXOpenDisplay()는 해당 비디오 메모리 주소에 맞게 Virtual Allocation을 수행합니다.
  • GXBeginDraw()는 Virtual Allocation된 메모리 주소를 반환합니다.
  • GXCloseDisplay()는 Virtual Free를 수행하며
  • GXGetDisplayProperties()는 해당 디스플레이에 맞는 해상도와 픽셀의 구성 상태를 반환합니다.
위에서 나열한 동작만 지켜서 구현해주면 잘 동작합니다. 실제 단말기에 올려서 TCPMP 플레이어로 미디어 플레이 테스트 해보니 GAPI드라이버를 로딩해서 플레이 할 때 일반적인 녀석은 GDI와 비교해봐서 20%정도의 향상이 있었으며, 특이한 녀석 (가로형 LCD를 세로형 단말기에 적용한 녀석)의 경우는 200%의 향상이 있었습니다.
gx(iNaviUP).zip

아이나비 UP용 GAPI 드라이버

gx(iNaviProPlus).zip

아이나비 프로+용 GAPI 드라이버

위의 드라이버를 다운로드해서 압축을 해제한 뒤 gx.dll파일을 TCPMP 플레이어와 같은 디렉토리에 놓으시면 됩니다. 주의하셔야할 점은 아이나비 PRO나 아이나비 UP+는 호환되지 않습니다.
PRO Plus의 경우는 성능 향상이 상당하나 UP의 경우는 성능 향상이 미미합니다. 그리고 미디어 소스에 따라 성능 차이가 있는데, 파일 IO가 많이 일어나는 대용량 미디어 파일보다 용량은 적으나 프레임이 많은 미디어 소스에서 이득이 많습니다. 이점 참고바랍니다.

Posted by 졸곰

2006/03/20 14:31 2006/03/20 14:31
, , ,
Response
No Trackback , No Comment
RSS :
http://www.spbear.com/rss/response/137


블로그 이미지

SPBEAR.COM

- 졸곰

Notices

Archives

Authors

  1. 졸곰

Calendar

«   2009/01   »
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

Site Stats

Total hits:
197656
Today:
19
Yesterday:
147