GLUTのコンパイル

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


ダウンロードに時間がかかるので、別にWindowsSDKとかいらないって場合は、
上記の物に同梱されているものから抽出したヘッダファイルを自己責任でどうぞ。
コンパイルの時にだけでも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 〜〜〜

というようにオプションをつける。