Windwos + VisualC++(VC6) + SDL + OpenGL メモ
STATUS: 故障中x2
ちょっと仕事で3Dにプロットしたいものがあったので、趣味と実益を兼ねてSDL+OpenGLでプログラムを書いてみた。
久しぶりにSDL触ったので、いろいろ忘れてる〜。以下環境つくるまでのメモ。
【前提環境】
・Microsoft Windows 2000
・Microsoft Visual C++ 6.0 (VC6)
● SDLをインストール
・SDLのサイトからダウンロードしてきて適当なフォルダに展開。
いまのバージョンは1.2.9。
フォルダは「D:\SDK\SDL-1.2.9」とした。
・VCの設定でライブラリのディレクトリを指定
メニューの「ツール」→「オプション」でダイアログ開いて、「ディレクトリ」タブの…
インクルードファイルに「D:\SDK\SDL-1.2.9\include」、ライブラリファイルに「D:\SDK\SDL-1.2.9\lib」を追加。
※最近はどっちかというと、プロジェクトの設定のほうの「追加ライブラリのパス」とかに書くのが好み
● プロジェクトを作る
VCの新規プロジェクトでプロジェクトを作る。
「Win32 Application」か「Win32 Console Application」どっちでもいい。(違いは後述)
「空のプロジェクト」を選ぶ
プロジェクトの設定の「C/C++」タブの「コード生成」の「仕様するランタイムライブラリ」は「マルチスレッド(DLL)」にする。(デバッグかリリース)
「D:\SDK\SDL-1.2.9\lib\SDL.dll」をプロジェクトのフォルダにコピーしておく。
● 「Win32 Application」その後
適当にソースを書くMain関数から書いてOK(WinMainはいらない→SDLmain.libのなかにある)
ライブラリは、SDL.lib と SDLmain.lib をリンク。
こんか感じでソースにかいてもいい。
#pragma comment(lib, "SDL.lib")
#pragma comment(lib, "SDLmain.lib")
ヘッダはこんな感じでインクルード
#include <SDL.h>
※注意
Main関数は、以下の形式にしないとダメ(「sdlmain.lib(SDL_win32_main.obj) : error LNK2001: 外部シンボル "_SDL_main" は未解決です」エラーになる)→参考
int main(int argc, char* argv[])
※その他
余計なコンソールウィンドウひらかないのはいいけど、Printfが使えない(?)のでデバッグがメンドイ。Debugウィンドウに標準出力出す方法ってあったかな?
● 「Win32 Console Application」その後
適当にソースを書く。
main関数は好きなように書いてヨシ。
ライブラリは、SDL.lib をリンク。(SDLmain.lib は不要)
ヘッダはこんな感じでインクルード
#include <SDL.h>
※注意
プリコンパイル済みヘッダが〜と怒られたら、プロジェクトの設定で「プリコンパイル済みヘッダ使わない」にして黙らせる。
(stdsfx.hインクルードするようにすればでないんだけど)
● OpenGLを使う準備
ライブラリとかはVC入れた時点で入っている。
#pragma comment(lib, "opengl32.lib")
#pragma comment(lib, "glu32.lib")
#include <GL/gl.h>
#include <GL/glu.h>
とかすれば動く。
お好みによって以下を追加。
#pragma comment(lib, "glaux.lib")
#pragma comment(lib, "glut32.lib")
#include <GL/glaux.h>
#include <GL/glut.h>
※注意
先に #include <windows.h> とかしておかないと、gl.hがコンパイル通らない。
● 参考URL
・SDL日本語マニュアル (tomotacoさんとこの)
Example 2-8. SDL と OpenGLはサンプルの先頭に以下を追加でそのまま動く。
#pragma comment(lib, "opengl32.lib")
#pragma comment(lib, "glu32.lib")
#include <windows.h>
#include <GL/gl.h>
#include <GL/glu.h>
● 昔作ったプログラム (Windows用 / SDL使ってない)