SDL_Surface* SDL_GetWindowSurface(SDL_Window* window)
window | 調査するウィンドウ |
#include "SDL.h" // SDLヘッダをインクルードする
int main(int argc, char* argv[])
{
SDL_Surface *screen; // SDL2でも同じ. 古いコードを持ってくることができる
SDL_Window *window;
SDL_Surface *image;
SDL_Init(SDL_INIT_VIDEO); // ビデオを初期化する
// 普通にウィンドウを生成する
window = SDL_CreateWindow("SDL2 Example", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, 0);
// しかし, 代わりにレンダラーを生成する. これで画面に直接描画できる
screen = SDL_GetWindowSurface(window);
// ここは古いコードと同じである
image = SDL_LoadBMP("box.bmp"); // 画像を読み込む
SDL_BlitSurface(image, NULL, screen, NULL); // スクリーンに転送する
SDL_FreeSurface(image);
// これはSDL 1.2のSDL_Flipのように働く
SDL_UpdateWindowSurface(window);
// 2秒間表示する
SDL_Delay(2000);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
必要ならば, 新しいサーフェイスはウィンドウに最適なピクセル形式で生成される. このサーフェイスはウィンドウが破棄されたとき解放される. このサーフェイスを解放しようとしてはならない.
このサーフェイスはウィンドウのサイズが変わると無効になる. サイズが変わった後は正しいサーフェイスを得るために再びこの関数を呼ぶ必要がある.
ダブルまたはトリプルバッファを効率的に実装できるように, 一部の環境ではサーフェイスのpixelsポインタはSDL_UpdateWindowSurface()を呼ぶたびに変化する
このウィンドウと3DまたはレンダリングAPIを混合して使うことはできない.
この関数はSDL_HINT_FRAMEBUFFER_ACCELERATIONの影響を受ける.