C++Builder6でGLUT
今後のためにGLUTの使い方に慣れておこうと思う。
GLUTのダウンロード
Nate Robins - OpenGL - GLUT for Win32
Borland用glut32.libを作る
ダウンロードしたglut-3.7.6-bin.zipを解凍したら、README-win32.txtのBORLAND NOTES:の手順に従ってBorland用のライブラリを作る。
コマンドプロンプトウィンドウを開いて解凍したフォルダに移動し、以下のコマンドを実行する。
implib.exe glut32.lib glut32.dll
今回はこれでちゃんと作れたが、うまくいかない場合は
IMPLIB glut32.lib glut32.def
とするとよいらしい。
開発環境へコピー
glut32.lib を C:\Program Files\Borland\CBuilder6\Lib にコピー
glut.h を C:\Program Files\Borland\CBuilder6\Include\Gl にコピー
glut32.dll を C:\WINDOWS\system32 にコピー
テスト
適当なフォルダに、以下のようなC言語のソースファイル gltest.c を用意する。
#includevoid display(void) { } int main(int argc, char *argv[]) { glutInit(&argc, argv); glutCreateWindow(argv[0]); glutDisplayFunc(display); glutMainLoop(); return 0; }
DOS窓でこのフォルダに移動し、ビルドする。
bcc32.ext gltest.c
成功したら、gltest.exeが出来ている。
gltest.exeを実行すると、ウィンドウが表示される。ウィンドウの内側に起動時の背景が描画され、ウィンドウの位置を変えても再描画されないが、それで正常なので心配しないように。
C++Builderで起こるいくつかの問題について
http://uri.sakura.ne.jp/~cosmic/yuno/lab/gl_intro.html
に説明がある。
オーバーロード関数群の中の 1 つだけしか "C" にできない
C++ でコンパイルしたときに起きるエラーです。 stdlib.h で std::exit を extern "C" で宣言してるのと、 glut.h が ::exit を extern "C" で宣言してるのがぶつかって起きるエラーです。 "C" ではオーバーロード出来ませんから。 glut.h の exit を宣言してる部分をコメント化して解決。
単純にコメントアウトするとCでコンパイルしたときにエラーになるので、
#ifndef __cplusplus が定義されていない場合はexternが有効になるようにした。
#if defined(_WIN32) # ifndef GLUT_BUILDING_LIB # ifndef __cplusplus //追加 extern _CRTIMP void __cdecl exit(int); # endif //追加 # endif #else