D言語からFTGLでも使ってみるデモ

先日OpenGLからフォントを使えるライブラリFTGLをビルドしてそのまま放置していたのですが、重い腰を上げてD言語から使ってみました。
FreeType関係の定義をD言語で書き直すのが面倒なので、まずはC言語用のデモを動かしてみるところまでやってみました。

C言語用のデモ

C言語からFTGLを使うデモのソース
"$(FTGL)/demo/c-demo.c"がそうです。これをD言語に書き換えてみます。

用意するもの

opengl.d, openglu.d, glut.d
D言語からOpenGL, GLUTを使うためのソースコードです。shinhさんのサイトからダウンロードして"$(DMD)/import"に入れておくと楽です。
opengl32.lib, glu32.lib
上記のサイトのopengl.zipの中に入っています。"$(DMD)/lib"に入れておくと楽です。
glut32.dll, ftgl.dll
先日の記事参考。パスの通るところ*1に置く必要があります。
glut32.lib, ftgl.lib
先日の記事参考。そのままでは使えないので下記の作業をしないといけません。

glut32.lib, ftgl.libの変換

コンパイラdmdを使う場合、今回使用するglut32.libとftgl.libをdmd用に変換しないと使えません。
変換方法はやねうらおさんのサイトを参考にBorland C++ Compilerを使えば無料で変換できます。
ダウンロード先は今確認したところembarcaderoならインストーラを登録なしでダウンロードできるようです。
implib(bccなら"$(BCC)/Bin/implib.exe")を用意できたら、

$ implib -c -a glut32.lib glut32.dll

のようにglut32.libとftgl.libを変換したものをdmdのlibフォルダ("$(DMD)/lib")に入れておきましょう。

D言語に変換(写経とも)

c-demo.cがincludeしているヘッダファイルを見ながら手直しします。
私が書いたソースコードhttp://yukkepc.web.fc2.com/src/ftgl-demo.dに上げておきます*2
c-demo.cとの違いは次の通りです。

  • ftglCreateCustomFontは面倒だったので省略しました。
  • 終了の仕方が分からなかったので例外を投げています。
  • フォントをMSゴシックにして"こんにちは FTGL!"と表示します。

実行結果

$ dmd ftgl-demo.d opengl32.lib glu32.lib glut32.lib ftgl.lib


D言語からデモが動きました!
FTGL全体をD言語から使えるようにするのは大変*3なので使いたい部分だけ書くのがいいのかなと思います。

*1:exeファイルと同じところか"/Windows/System"に置くのが簡単です

*2:ソースの再利用はFTGLのMITライセンスを守ってください

*3:htodを使って機械変換できればいいのですが、FreeTypeのヘッダファイルをincludeしているせいか上手くいかないのであきらめました