ここ数日、「C/C++へのLua組込み実践」を読んでいるんですけど、サンプルでSDLが使われています。解説はLua中心とはいえ全く知らない状態では読む気にならないので、ちょっと触ってみる事にしました。環境はOSXです。
インストールは特に変わった事はなく普通にmake installするだけです。これでlibSDLmain.a libSDL.aがインストールされるのでリンクして使えばいい感じですね。
$ wget http://www.libsdl.org/release/SDL-1.2.14.tar.gz
$ tar zxvf SDL-1.2.14.tar.gz
$ cd SDL-1.2.14
$ ./configure
$ make
$ sudo make install
そして以下がハローワールド的なサンプルです。四角とビットマップを描画しています。冒頭の画像はこのサンプルを実行した時のものになります。Eventループの書き方がやや特徴的な感じがしますが、それ以外は良くある雰囲気のコードですね。
#include "SDL.h"
#include "stdio.h"
int main(int argc,char *argv[]) {
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
fprintf(stderr,"failed to init SDL.\n");
exit(1);
}
SDL_Surface *screen = SDL_SetVideoMode(520, 350, 32, SDL_SWSURFACE);
if (!screen) {
fprintf(stderr,"failed to get screen.\n");
SDL_Quit();
exit(1);
}
// draw bitmap
SDL_Surface *img = SDL_LoadBMP("hellosdl.bmp");
if (img) {
SDL_Rect dst = {10, 30, 0, 0};
SDL_BlitSurface(img, NULL, screen, &dst);
SDL_FreeSurface(img);
}
// draw rect
SDL_Rect rect = {10, 10, 100, 100};
SDL_FillRect(screen, &rect, 0x0000FF00);
// update screen
SDL_UpdateRect(screen, 0, 0, 0, 0);
// event loop
while (1) {
SDL_Event evt = {};
while(SDL_PollEvent(&evt)) {
switch (evt.type) {
case SDL_QUIT:
goto EXIT;
break;
}
}
}
EXIT:
SDL_Quit();
return 0;
}
ビルドが少し変わっていて、sdl-configコマンドを使って以下のように行うようです。
$ g++ main.cpp `sdl-config --cflags --libs`
あんまり把握してないんですけど、WindowとかEventとかプラットフォームに依存した部分をSDLで書いとけばクロスプラットフォームなコードが書けるらしいよっていう認識です。
ざっくりとしたチュートリアルっぽいドキュメントはコレで、リファレンスはコレ。あんまりドキュメントは整備されていないので、ヘッダを読むのが早いかもしれませんね。