SDL_TextureとSDL_Surfaceの使いわけ

昨日よりは少し進み、画像の描画に関しては8割がたSDL_Textureを使うようにできた。残り二割は解像度の問題と、まだ未確認の全画面モード切替だけど、それらは後回し。あとはSGEの線分描画と、SDL_ttfの文字列描画が対応できればいいんだけどなあ。
現在SDL_SetVideoMode関数の代わりに以下のようにしている。最後のscreen変数が従来のSDL_SetVideoMode関数の戻り値に相当する(はず)。アプリケーションとしてはこのscreen変数のサーフェスに対して描画して、最後にSDL_RenderCopy(surface->textureID (以下略) って感じにすればいいはずなんだけど、大丈夫かな。

// ウィンドウ
window_id = SDL_CreateWindow("Test App",
  SDL_WINDOWPOS_CENTERED,  SDL_WINDOWPOS_CENTERED,
  width, height, SDL_WINDOW_SHOWN);
// レンダラー
SDL_CreateRenderer(window_id, -1, 0);
// テクスチャー
SDL_DisplayMode mode;
SDL_GetDesktopDisplayMode(&mode);
main_texture_id = SDL_CreateTexture(mode.format,
SDL_TEXTUREACCESS_LOCAL, WIDTH, HEIGHT);
// サーフェス。
screen = SDL_CreateRGBSurfaceFromTexture(main_texture_id);

ちなみのこのコードはsdl_compat.cでSDL_SetVideoMode関数内のコードを簡略化したもの。SDL_SetVideoMode関数を直接使わない理由は、SDL_SelectRenderer関数などに渡すウィンドウIDを得るため。SDL_SetVideoMode関数を使うとSDLライブラリ内部の変数にウィンドウIDを格納するだけでアプリケーションからは参照できず、かつウィンドウIDを使って呼び出す関数が結構多いので、アプリケーション側に保持するためこのようにした。