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

loki 라이브러리의 사용

template을 이용한 Generic Programming을 적용한 라이브러리로 loki 라는 녀석이 있다.

기존의 여러가지 디자인 패턴들도 template을 이용해서 사용가능하도록 정의해 놓고있고 여러가지 재미있는 프로그래밍 기법들을 접할 수 있다.

템플릿이 어떤 것인지 지금까지 아무형이나 담을 수 있는 한낱 그릇이라고만 생각했던 사람은 한번 볼 필요가 있다. 재미있는 부분이 많으니까 :D

Posted by 졸곰

2004/11/05 13:13 2004/11/05 13:13
, ,
Response
No Trackback , No Comment
RSS :
http://www.spbear.com/rss/response/1


블로그 이미지

SPBEAR.COM

- 졸곰

Notices

Archives

Authors

  1. 졸곰

Calendar

«   2008/12   »
  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:
192311
Today:
103
Yesterday:
214