삽질하는플머

모바일용 고정소수점 연산 함수

Lazarus/Mobile

제가 게임에서 사용하는 벡터 / 행렬 라이브러리를 위한 기본적인 수학 함수들을 고정 소수점  함수들로 만들어 봤습니다. 나중에 OpenGL-ES에 써먹을 예정이기 때문에 GLFixed 와 동일하게 부호1비트, 정수15비트, 소수16비트를 사용하고 있습니다. 삼각함수 및 제곱근, 역수관련해서는 빈센트3D의 OpenGL-ES 구현을 참조했구요

문제가 됐던 아크탄젠트는 대충 원하는 속도 / 정밀도가 나와주길래 룩업테이블이 아닌 계산으로 마무리 지었습니다. raindraw님의 구현은 잘 저장 해 두었다가 계산에 문제가 생기면 바로 바꿔끼우겠습니다. 다시 한 번 감사드립니다.

일단 테스트는... 서비스 중인 게임의 코드를 일부 갈아끼우는 (맞아죽을) 방법을 사용했는데요... (~~ ^^;;)
어차피 게임이라는 게 비주얼 부분에서 약간의 계산 오차는 허용하는지라... 겉보기에는 멀쩡하게 동작하네요.
선형 가감속을 지원하는 1차원 댐퍼를 이 함수들로 만드는 중인데... 시간단위로 쓰는 틱이 182만 되도 그 제곱이 벌써 15비트를 넘기는 바람에 상당히 골치가 아프네요. 세상의 모든 모바일 개발자 여러분들... 존경합니다.

가지 말라고 매달리는 아들놈 떼어놓고 하루 종일 게임방에 틀어박혀 삽질중인데... 시간당 700원입니다. 헐~~
이 돈 받아 전기세라도 나오나... 만화방에 이어 또 하나의 예비 직업이 사라지고 있군요...

아무튼, 오류 지적 및 살 붙이기에 미리 감사드리구요~~~ 전 이만 내일을 위해 집으로 돌아갑니다. ^^;;




델마당에 올리는 글이라 경어체로 쓰고 나니... 블로그에는 잘 어울리지 않는군.
이 참에 모두 존댓말로 바꿔버릴까~~

라자루스로 만들어 본 프로그램

Lazarus

라자루스로 만들어 본 첫 프로그램입니다.
밖에 나가기 귀찮은 프로그래머를 위한 초간단 달구경... ^^;;
대보름 밤을 넘기지 않기 위해 대충 털어서 올려봅니다.
(달 사진은 하영재님이 찍은 것인데... 흔쾌히 제공 해 주셨습니다. ㄳㄳ~)




제 m4650에서 돌아가는 것을 기준으로 작업중이라... 3D는 진작에 포기하고, 실수연산도 못쓰고...
그저 델마당 조무영님의 비 DX강좌를 벗삼아 삽질 중입니다. 쩝...

라자루스의 특성상 타겟을 바꾸어 컴파일하면 WM에서도 잘 동작 합니다.
(물론 약간의 삽질은 필수~~ ^^)

두 줄 요약.

파스칼 프로그래머 여러분~~
라자루스의 세계로 오세요~~ ^^;;;


 

요건 윈 32용 바이너리



그리고 요건 m4650용 바이너리



델마당에 올린 글이라... 경어체로 되어있음.




2009.3.5. 공모전 제출용으로 일부 기능을 추가해 봄. 일단 제출하고 남은 기간 동안 수정 해 보자.
(옴니아용은 공모전 페이지에 제출함.)

윈32용 바이너리





2009.3.9. 날짜 선택기능을 추가함.

윈32용 바이너리

IDE의 더블바이트 문자 표시문제 임시 패치

Lazarus

라자루스 IDE에서 한글은 완전 푸대접을 받고 있다. 예전 0.9.24 에서는 그나마 표시는 제대로 되었었는데, 0.9.26에서 IDE의 코드값이 UTF-8이 기본이 되면서 한글이 아주 요상하게 표시된다.



위의 그림처럼 한글이 영문폭 만큼 겹쳐저 버린다.  

물론 라자루스를 -dDisableWindowsUnicodeSupport 을 주어 리빌드하면 예전과 마찬가지로 동작하기는 하지만, 지금 열심히 삽질중인 KOL-CE 는 2.80.2 버전부터 UTF-8 의 라자루스를 사용하라고 명시되어 있으니... 이 또한 쉽지 않다.

이 때문에 한글로 된 소스는 Relo나 아크로에디트, 또는 크림슨에디트를 사용하고 있었다. 이거 고쳐보려고 SynEdit 도 한참을 주물럭거렸지만... 내 실력으로는 무리...

적어도 화면 표시만이라도 제대로 되었으면 하고 바라던 차에 포럼에서 반가운 내용을 발견했다.

* Input a chinese in IDE,but only display half in code editer

나와 같은 고민을 하던 중국인의 하소연... 이 문제만 해결되면 많은 아시아 개발자에게 큰 영향을 줄 거라는 구절이 구구절절 와 닿는다. 그리고 그 안에서 발견한 버그 트래커의 링크.

* SynEdit overlaps double width characters 

기본적으로 라자루스를 개발하는 사람들이 모두 영어가 모국어라... 우리같은 더블바이트 쪽에는 아무래도 지원이 미비한 듯 하다. 사실 그네들 입장에서는 그다지 간절하지 않은 문제일테니까 말이다. 아무튼 2008년 8월 9일에 Martin Friebe님이 더블바이트의 폭 문제 테스트를 위한 임시 패치를 올려두었다. 


자신이 작성한 코드 중 가장 엉망진창이지만 이 작업을 위해 휴일을 몽땅 날려먹었으니 코드의 질을 가지고 시비걸지 말아달라고 코맨트를 달아두었다. 시비라니!!! 눈 앞에 있다면 절이라도 꾸벅 하고 싶은 심정인데~~

아무튼 내려받아 패치를 해 보자. 패치 대상은 /lazarus/components/synedit/synedit.pp 이므로 일단은 안전한 곳에 잘 복사 해 두고, cygwin 상에서 다음과 같이 처리 해 준다.

 
 $ cd /cygdrive/c/lazarus
 $ pwd
 /cygdrive/c/lazarus
 $ patch -p0 < dbl_width_hack.patch 

이제 라자루스의 "Tools" -> "Configure "Build Lazarus"..." 메뉴를 선택하고





Options 에 -dDoubleChrWidthHack 를 적어준 후 "Build" 버튼을 눌러준다. (시간이 많다면 전체를 다 빌드하고 아니라면 SynEdit와 IDE관련 부분만 빌드하도록 하자.)




이제 재시작하고 한글 코드를 '복사 후 붙여넣기' 해 보자.



오호호~~ 잘 된다~~~

패치 제작자가 적어두었듯이 입력은 안습. 한글을 치면 커서가 안드로메다로 왔다갔다 한다. 일단은 주석을 한글로 볼 수 있다는 것에 만족해야 할 듯. 그래도 이게 어디야~~~ 게다가 개발자가 직접 synedit.pp 의 해당 부분에 컴파일러 지시자까지 둘러두었으니 코드 분석하기도 훠얼씬 편해졌고~~ 오늘의 삽질은 대만족!!!



KOL-CE 2.80.3 릴리즈.

Lazarus/KOL-CE
간만에 소스포지에 가 봤더니 KOL-CE 2.80.3 버전이 나왔다. 2009년 1월 23일이면 연휴 바로 직전이군..
http://sourceforge.net/projects/kol-ce/

수정된 사항을 간단히 짚어보면,

* Enabled TTrayIcon for wince.
* Fixed compilation with FPC 2.2.3 and FPC 2.3.1. Patch by Carolos Foscolos.
* MCK: Fixed updating of source code in trunk version of Lazarus.
* MCK: Fixed code generation for new KOL application template, when form's unit name is renamed.
* MCK: Add InitCommonControls() call to fix themed control drawing if only standard controls are used.
* MCK: Fixed error "Restoring toolbar buttons bitmap from then previous version of the KOL&MCK format."  version of the KOL&MCK format."

이라는군. 아무튼 기쁜 소식이다~~!!!

이전 2.80.2 버전을 설치했던 경로는 /lazarus/userlib/kol-ce-2.80.2. 새 버전은 /lazarus/userlib/kol-ce-2.80.3 에 설치. (이거 누가 그랬을까~~ 누가 그랬을까!! 아마추어 같이~~ ㅠㅠ) 따라서 이전에 작업했던 프로젝트 파일 (*.lpi) 내의 경로들을 모두 수정 해 주어야 한다. 귀찮네... 다음번에 라자루스를 설치할 때는 그냥 lazarus/userlib/kol-ce 를 사용해야 겠다.

참고로 이 버전의 KOL-CE의 SIP메뉴 관련 수정 위치는 KOL.pas 의 33,847 라인이다.
매번 귀찮으니... 짧은 영어로라도 패치를 만들어 보내야 할 듯... ㅠㅠ;;

프로젝트의 버전 번호를 100 이상으로

Lazarus
언제부터인지 버전정보에 0.... 을 적는 것 보다 날짜를 적는 것에 익숙해져 버렸다. 
게임개발을 오래 하다보니 네버엔딩 스토리에 익숙해 져 그런건지... 

아무튼, 라자루스에서 이렇게 버전정보 앞부분에 연도값을 적으려고 시도 해 보니




황당하게도 다시 100으로 바뀌어 버린다.

 

LCL의 TSpinEdit 에서 MaxValue의 디폴트값이 100이고 이게 수정되지 않고 쓰인 듯 하다. 
/lazarus/ide/projectopts.pp 파일을 찾아 버전에 관계된 SpinEdit 컨트롤의 MaxValue를 적당히
수정 해 주고 라자루스를 다시 빌드하면 이 문제를 해결할 수 있다. 

2008년 11월 17일에 해당 버그를 라자루스 버그 트래커에 등록 했고, 2009년 1월 19일에 
0.9.27 리비전 18342에 적용되었다고 한다. 두 달이나 걸리는군... 

아무튼 새 버전이 기다려진다. ^^;;