FREEGLUTを使ってるけども、QtではGLUTを使ってるので、GLUT環境も作ろうと思った。
Mingwでの動作を期待。
ついでにglutに互換しているFREEGLUTの2.6.0もコンパイル。
MinGW+MSYS環境ができている事が前提。
GLUT
手順は以下を参照。
http://vision.kuee.kyoto-u.ac.jp/~nob/doc/opengl/opengl.html
しかし、以下のファイルが足りなくてエラーになった。
crtdbg.h
crtdefs.h
sal.h
vadefs.h
解決には以下からMicrosoft platform SDKを導入して、pathを通せばいいだけの話。
Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1
http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=c17ba869-9671-4330-a63e-1fd44e0e2505
ダウンロードに時間がかかるので、別にWindowsのSDKとかいらないって場合は、
上記の物に同梱されているものから抽出したヘッダファイルを自己責任でどうぞ。
コンパイルの時にだけでもmingwのincludeフォルダに入れておけばOK.
コンパイルして出来上がったlibglut32.aをlibフォルダ、include/GL/glut.hをinclude/GLにでも入れれば完了。
FreeGLUT
コンパイル手順のみメモ。
ソースのダウンロード
http://freeglut.sourceforge.net/index.php#download
MSYS上で以下を見ながらコンパイル。ちなみにスタティックリンク。
http://blogs.dion.ne.jp/kazuu/archives/2006-11-1.html
CFLAGS="-O2 -g -DFREEGLUT_STATIC" ./configure
make -C src
以下のエラーがでた。
最適化時の弊害でコンパイラのバージョンによって出ない時も。
freeglut_init.c: In function 'glutInit':
freeglut_init.c:631: error: 'parsedWidth' may be used uninitialized in this function
freeglut_init.c:632: error: 'parsedHeight' may be used uninitialized in this function
値が初期化されてないとエラーになる模様。
この場合は初期値として0を代入すればいい。
freeglut_joystick.c: In function 'fgJoystickDetect':
freeglut_joystick.c:1687: error: the address of 'fgJoystick' will always evaluate as 'true'
判定が常に真となる場合はエラー。
その箇所付近をコメントアウトして対処。
コンパイルが通ると、src/.libs/libglut.aが出来上がるので、これをlibフォルダへコピー。
既存のglutと置き換えるなら、libglut32.aを何かにリネームした後に、
libglut.aをlibglut32.aに名前を変えて置き換えればOK。
includeファイルも置き換える。
include\GLの中身を既存のinclude\GLに上書き。
スタティックリンク版なのでソース内に、
#define FREEGLUT_STATIC #include <GL/gl.h> #include <GL/glut.h>
もしくは、コンパイル時に
gcc -DFREEGLUT_STATIC 〜〜〜
というようにオプションをつける。