3.29.2009

coLinux+MinGW+Debian+OpenGLなクロスコンパイル環境でfreeglutを使う

久しぶりの変態環境下での作業に関するメモ。

以前構築したglut環境ではキーボードの同時押しとかが利用できなくてちょっと不便だなぁと思っていたので、その代替え手段を探していたところ、freeglutなる代替え手段が存在することを発見。

通常リリースの最終更新が2005年と、既に枯れていて安定した運用が望めそうなので、さっそく入手。
(かといって開発が停止しているわけではないので、ソコントコよろしく。)
入手すると、中身はソースコードのみ。
ドキュメント曰く、「使うなら自分でビルドしたまえ明智君。」という事らしい。
既に変態環境で使うことをもくろんでいるので、こんなの予想していなかった。

けれども、せっかくやろうと決めたので方策を練る。
んで、実際に試したのが
・ VS2008でビルド
・ 変態環境に移して運用
というもの。結論から言えば、それでうまくいっている。
んで、この文書がその時のメモ。


まずはVS2008でビルド。
これについては特に書くことはないけど、自前でビルドしようと思っている人は、通常のビルドではなく、バッチビルドを実行しなければ正しいファイルを得られないという点に注意。

「自分でビルドするのがめんどい」って人向けに、私の私家製ビルド品をいつものところに置いておきますんで使ってください。
私がやったのはVS2008によるバッチビルドだけで、ソースに関していじったところはない(プロジェクトファイルの変換ぐらいはしたけど)ので、ソースが欲しい人はオリジナルのものを。
ライセンスはXライセンスらしいので、それに従った運用をすればOkだと思う。
(問題があればご連絡ください。)
※ ちなみに配布しているアーカイブ中では、*_d.libってやつがデバッグ版で、_dの無いものがリリース版のビルドなのでお間違いなく。

ヘッダーファイルとライブラリファイルをゲットしたら、まずはヘッダーを以前の記事同様、OpenGLのインクルードファイルを展開したGLディレクトリ以下に放り込む。
ライブラリは、
/usr/i586-mingw32msvc/lib

以下に。
(アーカイブに入っているのは*.aファイルではなく*.libファイルだけれども、特に変換の必要は無く、そのまま利用できる。)

そこまでできたら、適当なソースコードを用意。
今回は前回の記事で使ったのと同じものを利用。


#include <gl/freeglut.h>

void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POLYGON);
glColor3d(1.0, 0.0, 0.0); /* red */
glVertex2d(-0.9, -0.9);
glColor3d(0.0, 1.0, 0.0); /* green */
glVertex2d(-0.9, 0.9);
glColor3d(0.0, 0.0, 1.0); /* blue */
glVertex2d( 0.9, 0.9);
glColor3d(1.0, 1.0, 0.0); /* yellow */
glVertex2d( 0.9, -0.9);
glEnd();
glFlush();
}

int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA);
glutCreateWindow(argv[0]);
glutDisplayFunc(display);
glClearColor(0.0, 0.0, 0.0, 0.0);
glutMainLoop();

return 0;
}


ポイントは、#includeにfreeglutを指定すること。
それから、コンパイルのためのコマンドは

mingw-cc gl.c -lfreeglut -lglu32 -lopengl32 -mwindows


などとする。
-lfreeglutの部分は、使うfreeglutなファイルに合わせて変えると良い感じ。
(デバッグ版なら_dをつけるし、スタティックリンク版ならそのようする)

こうしてできたファイルは、実行時にfreeglut.dllを要求するので、そこだけ注意。
glutがglut32.dllを要求したのと同じやね。

※ ここでも、配布しているアーカイブはデバッグ版とリリース版で別名にしているけれど、これは単に衝突しないように&見分けがつくようにとの配慮なので、使うときにはどちらもfreeglut.dllにリネームしないと正しくお動かないので注意

して、できあがったものの実行結果が以下。



使えるAPIについては公式サイトからAPIのリストを確認できるけれども、基本的にはglut互換なので心配なし。
あとは何に使うかが問題か(笑)

0 件のコメント: