GP2X WIZ의 libcastor 이용 프로젝트

항상 일과는 별개로 집에 와서는 개인 프로젝트를 하면서 여러 가지의 실험적인 일을 하곤 했다. 하지만 전부터는 그마저도 쉽지 않았고 실제 성공한 개인 프로젝트는 거의 없다시피 하였다. 대부분이 기술적인 난제라서가 아니라 개인적인 시간이 부족하여 흐지부지 것이 대부분이다. 

올해도 게임에서 sight of line 어떻게 빠르게 처리할 있을까 하는 주제로 연구(?)하였고 엄청난 처리 속도의 알고리즘이 만들어진 것인 알았지만 결국 초기의 아이디어에 헛점이 발견되어해결할 없는 경우 생기고 말았다. 그래서 폐기. 

다음에는 대변 파이터 1.0 버전을 만들기 위해 renewal 작업을 했었다. 효과음 부분을 집어 넣고, 소스 공개를 목적으로 했기에 구조를 최적화 하고, 프레임을 2 빠르게 만들었다. 프레임이 2배가 늘어 나게 되면서 디테일과 관련된 일부 버그가 발견되어 현재는 방치된 상태다. (언젠간 다시 것이라 생각한다) 

그리고 작년에 것이 바로 지금 공개하는 것이다. 원래 libcastor라는 것은 GP2X Wiz native 입출력 기능을 가진 라이브러리인데, 이것을 통해서 Wiz 고질 문제인 tearing 근본적으로 없애자는 아이디어로 시작한 것이다. 최초에는 Wiz 숨겨진 기능인 32-bit frame buffer mode double buffer flipping 기능을 사용하여 보았으나 실제로는 H/W 처리되지 않는 속도 저하가 있었다. 하여간 tearing 없애기 위해 Wiz 세로 모드로 놓고 가로 모드 좌표계로 모두 바꾸어서 출력하는 시뮬레이션 레이어를 만들었는데 그것이 flat experience 불리는 라이브러리다. (이것도 여러 플랫폼에 이식이 되어 있다) 

압축을 풀면 나오는 구조는 다음과 같고, 파일에 대한 설명으로 마무리 지으려 한다. (개인적인 성취감 또는 의무로서 올리는 것이라 다른 사람의 편의성은 생각하지 않았다) 

사용자 삽입 이미지

(233k)

dejadun
|  
|   Makefile
|
+---avej_util
|       avej_util_font12x12.cpp
|       avej_util_font12x12.h
|       avej_util_pascal_set.cpp
|       avej_util_pascal_set.h
|       avej_util_tile_map.cpp
|       avej_util_tile_map.h
|      
+---bin
|       deja512_1.png
|       deja512_2.png
|       font1bit_1024_512.png
|       Roperr.maf
|      
+---deja_dun
|       Makefile
|       pdm_chara.cpp
|       pdm_chara.h
|       pdm_config.h
|       pdm_item.h
|       pdm_main.cpp
|       pdm_res.cpp
|       pdm_res.h
|       pdm_type.h
|       pdm_window.cpp
|       pdm_window.h
|       pdm_window_map.cpp
|       pdm_window_map.h
|      
\---flat_experience
    |   Makefile.lib
    |  
    +---include
    |       flat_experience.h
    |       pixel_format.h
    |       sm_util.h
    |      
    +---lib
    \---src
        |   flat_board.h
        |   flat_experience_display.cpp
        |   flat_experience_input.cpp
        |   image_decoder_png.cpp
        |   image_decoder_png.h
        |   sm_util.cpp
        |  
        +---target_bada
        +---target_common
        |       file_io.cpp
        |       system.cpp
        |      
        +---target_win32
        \---target_wiz
                castor.c
                castor.h
                polluxregs.h 

Makefile

이 프로젝트를 빌드하기 위한 Makefile. 실제로 cygwin에서 사용하였다.

GPH에서 제공한 툴체인이 root에 설치되어 있다고 가정하고 만든 것이기에 실제 빌드할 때는 몇몇 디바이스 헤더를 못 찾는다는 메시지가 나올 수 있다. 그때는 자신의 툴체인이 설치된 위치를 CPPFLAGS 에 추가해 주면 된다. 

avej_util

일종의 utility 들을 모아 놓은 디렉토리다. 

avej_util/avej_util_font12x12

12x12 한글 폰트를 출력하기 위한 것이다. bin/font1bit_1024_512.png 폰트를 사용한다. 

avej_util/avej_util_pascal_set

pascal의 내장 set과 같은 기능을 c로 구현한 것이다. 그다지 중요하지 않으니 자세한 설명은 생략한다. 

avej_util/avej_util_tile_map

맵의 구조를 표현하기 위한 부분이다. DejaVu map 파일인 *.maf을 읽는 부분이 들어 가 있다. 

bin

최종 결과물이 들어가게 되는 디렉토리. 타일 이미지, 스프라이트 이미지, 폰트 이미지, 맵 파일, 그리고 실행 파일이 들어 간다. 

deja_dun/pdm_chara

DejaVu 캐릭터를 나타내기 위한 class들을 담고 있다. 

deja_dun/pdm_config.h

게임을 위한 configuration 들어 있다. 

deja_dun/pdm_item.h

Item 위한 기본 구조를 담고 있다. 

deja_dun/pdm_main.cpp

게임의 구조를 가지기 위한 초기화와 종료 코드를 가지고 있으며 실제 데모의 실행 루프를 가지고 있다. 

deja_dun/pdm_res

데모에 사용되는 리소스를 모아 놓은 구조체를 담고 있다. 

deja_dun/pdm_type.h

데모에 공통으로 사용하는 기본 자료형을 정의하였다. 

deja_dun/pdm_window

데모에서 사용되는 window 기본 구조를 정의하였다. 데모 자체는 따로 진행하는 다른 프로젝트에서 가져 왔으므로 필요 없는 정의가 많다. 정확하게 이야기 하면 Wiz같은 embedded device 스크린에서 window 구조는 그다지 필요 없긴 하다. 

deja_dun/pdm_window_map

게임의 형태를 띄기 위해 map 출력하는 목적의 window 재정의하였다. 실제 모든 출력은 window에서 일어나게 된다. 

flat_experience

libcastor 사용함과 동시에 WIZ tearing 현상을 없애기 위해 세로 모드에서 가로 모드를 시뮬레이션 해주는 플랫폼이다. 

flat_experience/Makefile.lib

데모에는 전체가 빌드되는 형식이지만 원래는 Makefile 이용해서 독리적인 라이브러리로 배포 가능하다. 

flat_experience/include

flat experience 라이브러리를 사용할 필요한 헤더가 정의 되어 있다. 

flat_experience/lib

독립적인 라이브러리로 빌드 때는 디렉토리에 *.a 생성된다. 

flat_experience/src

flat experience 라이브러리의 소스가 담겨 있다. 

flat_experience/src/flat_board.h

2D 버퍼를 표현하기 위한 기본 구조를 정의를 하고 있다. 

flat_experience/src/flat_experience_display.cpp

세로 모드에 대한 2D 버퍼를, 가로 모드처럼 보이게 하기 위한 시뮬레이션이 들어 있다. 실제로 libcastor 사용해서 출력을 하는 곳이다. HW Flip, 32-bit color, 다중 layer 같이 WIZ 숨겨진(?) 기능을 쓰는 코드가 들어 있긴 하나 실제로 적용 했을 문제점이 많아서 그냥 버퍼를 copy하는 코드로 최종 반영되어 있다. 

flat_experience/src/flat_experience_input.cpp

Wiz 입력을 일반화 시키기 위한 내용이 들어 있다. 역시 libcastor 사용하고 있으며 WIZ touch screen 입력 관련된 것도 포함되어 있다. 

flat_experience/src/image_decoder_png

libpng 사용하여 PNG 파일을 읽는 부분이 들어 있다. 데모의 리소스를 읽는데 사용한다. 

flat_experience/src/sm_util.cpp

Utility 함수의 집합이 되어야 하지만 지금은 PNG 읽어 오는 여러 방법에 대한 것이 정의 되어 있다. 

flat_experience/src/target_bada

삼성의 스마트폰 플랫폼인 bada 포팅 레이어이다. 배포에는 내용이 빠져 있다. 

flat_experience/src/target_common

타게팅과 관련되어 기능적으로 일반화 가능한 것이 정의된 디렉토리이다. 

flat_experience/src/target_common/file_io.cpp

파일 접근에 대한 기본 기능이 정의되어 있다. bada 같이 std 파일에 접근이 불가능 경우를 위해 포팅 레이어로 빠져 있다. 

flat_experience/src/target_common/system.cpp

플랫폼의 시스템 특성과 관련된 기능이 정의되어 있다. 지금은 클럭 관련 기능만 들어 있다. 

flat_experience/src/target_win32

MS Windows 포팅 레이어이다. 배포에는 내용이 빠져 있다. 

flat_experience/src/target_wiz

GP2X Wiz 포팅 레이어이다. 

flat_experience/src/target_wiz/castor

libcastor 원본이다. 라이선스에 의하면 자유롭게 수정 배포 가능하다고 한다. 

flat_experience/src/target_wiz/polluxregs.h

libcastor 포함된 내용으로, Wiz 사용하는 pollux 대한 레지스터가 정의되어 있다.

Posted by 안영기

2010/11/20 07:23 2010/11/20 07:23
Response
0 Trackbacks , 0 Comments
RSS :
http://smgal.ismine.net/tc_191/blog1/rss/response/27

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다

« Previous : 1 : 2 : 3 : 4 : 5 : 6 : 7 : Next »

블로그 이미지

게임 개발을 기반으로 한, 잡다한 개발 기록 저장소

- 안영기

Notices

Archives

Authors

  1. 안영기

Recent Comments

Recent Trackbacks

Calendar

«   2024/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:
252730
Today:
8
Yesterday:
15