Freetype2 에 대한 소개
libfreetype2 + FLTK 활용
그래서 이를 해결 하기 위해 만들기 시작 한 것이 바로 FLFTRender 입니다.
FLFTRender 는 무엇인가?
기본적으로 FL_RGB_Image 에 직접 Truetype 서체를 그리기 위해 만들어진 간단한 C++ class 하나로 된 오픈 소스 입니다. 물론 응용하면 다른 곳에 쓰는것이 어려운 수준도 아니지만, 적어도 FLTK 에 심미적 그래픽 처리 성능이 전무한 것을 보강 하기 위해 이전에 만든 fl_imgtk 와 함께 사용할 경우 꽤 좋은 그래픽 자원을 얻거나 만들어 낼 수 있습니다.
소스는 아래의 이미지 처럼 github 에 공개 되어 있으며, 누구나 가져다 쓸 수 있도록 MIT License 를 적용하고 있습니다. 항상 그렇듯, 가져다 쓰는 것 또한 개발자의 실력에 달린 것 ... 하지만 FLFTRender 를 쓰려면 단지 이 소스코드만 가져다가는 뭘 할 수 없기 떄문에 Windows 에서 MinGW-W64 와 MSYS2 를 쓰는 사용자에 한해 이를 할용할 수 있는 기반을 설명 해 보고자 합니다. ( M$VC 는 알아서들 하셔야... )
MSYS2+MinGW-W64 에서 준비사항
MSYS2 사용자라면 아마 기본적으로 wget 을 설치 해 두셨을 것이라 믿지만, 혹시 wget 을 실행 했을때 아무 반응이 없다면 curl 를 사용해도 됩니다. 하지만 wget 이 없다면 curl 도 높은 활률로 없을 터이니, pacman -S wget 을 통해 wget 을 설치 해 둡니다. 물론 이후에 나오는 사항은 모두 MinGW-W64 G++ 에 대한 개발 환경을 다 설정 해 두신 분들에게만 속합니다.
일단 Project 또는 소스를 모아 두는 개인의 공간에서 위와 같이 FLFTRender 를 git 으로 clone 하거나, 최신 소스를 내려 받아 둡니다. 이 소스만 있어서는 뭘 할 수 없기 때문에 freetype2 를 받아서 컴파일 해 둬야 합니다.
git 으로 소스를 clone 해 두면 아래 처럼 나옵니다.
Freetype2 에서는 별도로 빌드된 이미지를 제공하는 것이 아니라, 소스 자체를 제공 하므로 [여기] 에서 위 페이지 이미지 처럼 소스를 받을 곳을 한 곳 들어 갑니다. 저의 경우 해당 링크에서 최신버젼 2.10.1.tar.gz 을 사용하였습니다.
다운로드 페이지에서 직접 해당 압축을 내려 받아도 되나, 저는 wget 으로 바로 내려 받아 압축을 해제 하고 소스를 빌드 하는 작업을 진행 하였습니다. 대부분 Linux 나 MSYS2 에 익숙한 개발자들은 GUI 에 의존하지 않는 습성을 가지고들 계실테니 ...
물론 MSYS2 를 쓰면서 이걸 내려 받은 파일을 또 지금 작업 하는 디렉터리 위치에 풀려면 몇번의 클릭을 더 하고, 창을 열고 ... 편리함이 쉬움은 아닌듯, 저의 경우 Project 위치에 바로 내려 받은 다음 tar -xf 로 바로 tar.gz 을 해제 합니다.
libfreetype2 빌드 하기
libfreetype2 를 빌드 하는 방법은 여러가지가 있겠습니다만, 보통은 configure 를 통해 Makefile 을 현재 개발 환경에 맞게 조정된 형태로 바로 만드는 것을 추천 드립니다. 물론 build 디렉터리 안에 Cmake 를 할 수 있도록 설계되어 있지만, MSYS 나 MinGW-W64 로 이걸 하기엔 뭔가 제대로 동작을 안 합니다. 개인적으론 CMake 를 쓰려면 M$VC 를 쓰려는 분들에 한해서만 추천 드립니다.
freetype2 에서 의존하는 패키지는 보통 bzip2 (bz2 ) 와 libz, 그리고 harfbuzz 가 있습니다. 여기서 이 harfbuzz 는 TTF 의 hinting 을 처리 할 때 추가적으로 사용할 수 있는 라이브러리 인데, 불행히도 MSYS2 에서 이걸 제대로 쓰기가 쉽지가 않고, 기본적인 hinting 은 libfreetype2 에서도 충분히 처리 할 수 있습니다. 고로 제가 configure 에서 추천드리는 방법은 아래 한줄 입니다. ( FLFTRender 의 readme.md 에서도 보실 수 있습니다 )
$ ./configure --with-harfbuzz=no
위 설정대로 configure 를 하시면 harfbuzz 를 사용하지 않고 libfreetype2 를 쓸 수 있도록 Makefile 이 만들어 지나, 여기서 하나 더 추천 드리는 것은 libpng 를 설치 하신적이 없다면 pacman 에서 libpng 를 설치 한 다음 configure 를 돌리는 걸 추천 드립니다.
위와 같이 libpng 를 검색 한 다음 설치 하시면 됩니다. 그리고 configure 를 추천드린 옵션과 함께 빌드 하신 다음, Make 를 수행 해 주시면 됩니다. CPU 성능이 좋으신 분들은 make 시 -j 10 과 같이 동시 작업수를 높여 주시면 더 빠른 빌드를 경험 하실 수 있습니다.
Make 작업이 종료 된 다음은 make install 을 통해서 시스템 위치에 설치 될 수 있도록 해 줍니다. 이렇게 할 경우 어플리케이션 개발을 할 때 Makefile 내에서 -lfreetype2 로만 LFLAGS 지정을 한다음 빌드 할 수 있게 됩니다. 물론 pkg-config 으로도 해당 옵션을 그대로 얻어 올 수 있습니다.
예제 빌드 하기
FLFTRender 안에 최신버젼의 경우 testing 이 추가 되었습니다. 빌드는 두가지 방법을 지원 하는데, 기본적으로 다음과 같이 빌드 할 수 있습니다.
- $ make -f Makefile.macllvm
- $ make -f Makefile.gcc
위는 MacOSX 에서 llvm-gcc 를 통해 빌드 할 경우이며, Cocoa framework 를 사용하여 빌드 하도록 되어 있기 때문에 Mac 에서만 정상 빌드 되며, 아래는 MinGW-W64 나 Linux 의 gcc 등에서도 빌드가 가능 합니다.
어떤 플랫폼이던, 컴파일이 되고 나면 아래처럼 test 프로그램이 구동이 가능 한데, 실행 위치에 D2CodingBold-Ver1.3.2-20180524.ttf 파일이 있어야 합니다. 처음 Source 를 내려 받은 다음에서는 tar -xf D2CodingBold-Ver1.3.2-20180524.ttf.tar.gz 으로 압축을 먼저 풀어 주고 나서 실행 해 줘야 합니다.
Alpha depth 처리 관련
FLFTRender 는 기본적으로 alpha depth 를 처리할 수 있도록 만들어 졌습니다. 예제를 보면 알 수 있는 부분으로 RGBA 로 32bit unsigned long 으로 각 색상 값을 지정 합니다 ( FLTK 에서 사용하는 방법 입니다 )
현재 16bit RGB555 나 565 에 대해서는 처리를 하지 않고 있지만, 8bit gray 에서는 RGB 컬러 말고 FFT 자체의 depth 에 alpha depth 만 계산을 하고, RGB 나 RGBA 에서는 대상 color depth 에 따라 투명도를 적용하여 출력 할 수 있도록 만들어 졌습니다. 한글 출력은 대상 Font 마다 다른데, D2Coding 은 wide-char 형태로 한글 code 를 입력 받도록 만들어 졌고, UnFont 와 같은 Linux 서체를 사용할 경우는 UTF-8 encoding 을 사용해야 합니다.