SDL_SurfaceとSDL_Texture

SDL_Textureを扱えるようにはなった。今度は既存のSDL_Surfaceを対象としたライブラリをどうするか、ということ。しかし、SDLのソースを読んでいるうちに何とかなるかもしれないと思いはじめた。
先程知ったが、SDL_SetVideoMode関数で得られるサーフェスにはテクスチャーIDが含まれている。これはSDL_Surfaceを扱う関数の内部でテクスチャーが使われていることを意味していて、実際SDL_SetVideoMode関数内部ではSDL_CreateTexture関数で得られたテクスチャーをSDL_CreateSurfaceFromTexture関数に使ってサーフェスを得ている。他の関数でもサーフェスを通してテクスチャーを参照する関数が多い。
現在手元ではSDL_imageを使って画像を読み込んでいる。このライブラリの関数はいきなりサーフェスを返すが、内部では
単にSDL_CreateRGBSurface関数が呼ばれるだけで、このままではテクスチャーは作られない。そのサーフェスを一旦SDL_CreateTextureFromSurface関数でテクスチャーを作成して、さらにSDL_CreateSurfaceFromTexture関数でテクスチャー入りサーフェスを作ることになるのだろう。

// こんな感じ?
SDL_Surface *tmp = IMG_Load("hoehoe.jpg");
SDL_TextureID tex_id = SDL_CreateTextureFromSurface(0, SDL_TEXTUREACCESS_LOCAL, tmp);
SDL_Surface *surface = SDL_CreateSurfaceFromTexture(tex_id);
SDL_FreeSurface(tmp);

まだこのサーフェスとテクスチャーの関係を実感していないのでやや不安だが、こうしてテクスチャー入りサーフェスを作っておけば、SDL 1.2までの外部ライブラリの利用もいけるのではないかなあ、と思っている。なんにせよ試してみないと分かんないよね。続きは明日、というか今日の朝。
余談で気になることが一つ。上記に挙げたSDL_SetVideoMode関数など、サーフェスを扱う関数がsdl_compat.cというソースにあるが、これは今後サーフェスを扱う関数はSDL 1.2に対する互換性のためだけに存在して、SDL 1.3以降ではテクスチャーを扱うのが主流になるのかもしれない、と邪推してみた。実はtestsprite2というサンプル(が使っているCommonInit関数)でもSDL_Init関数を使わず、ビデオの初期化はSDL_VideoInit関数、オーディオもSDL_AudioInit関数が呼ばれているところからして、今後SDLの利用の仕方がガラッと変わるような気がしている。