SDL_Surface* SDL_CreateRGBSurface(Uint32 flags, int width, int height, int depth, Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask)
flags | 未使用 常に0にすること |
width | サーフェイスの幅 |
height | サーフェイスの高さ |
depth | サーフェイスのビット深度 (詳細を参照すること) |
Rmask | ピクセルの赤マスク |
Gmask | ピクセルの緑マスク |
Bmask | ピクセルの青マスク |
Amask | ピクセルのαマスク |
/* OpenGLのテクスチャとして使うために
各ピクセルがR,G,B,A順の32bitサーフェイスを生成する */
SDL_Surface *surface;
Uint32 rmask, gmask, bmask, amask;
/* SDLはピクセルを32bitの値として解釈する.
よって, マスクはマシンのエンディアン(バイト順)に依存する */
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
rmask = 0xff000000;
gmask = 0x00ff0000;
bmask = 0x0000ff00;
amask = 0x000000ff;
#else
rmask = 0x000000ff;
gmask = 0x0000ff00;
bmask = 0x00ff0000;
amask = 0xff000000;
#endif
surface = SDL_CreateRGBSurface(0, width, height, 32,
rmask, gmask, bmask, amask);
if (surface == NULL) {
SDL_Log("CreateRGBSurface 失敗: %s", SDL_GetError());
exit(1);
}
/* または, 指定のビット深度のデフォルトのマスクを使う */
surface = SDL_CreateRGBSurface(0, width, height, 32, 0, 0, 0, 0);
depthが4または8のとき, 空のパレットが生成される. depthが8を超えるとき, 引数の[RGBA]maskを使ったピクセル形式が設定される.
[RGBA]maskはピクセルの色を指定するためのビットマスクとして使われる.
例えば, RmaskがFF0000ならば, 赤のデータは最上位バイトに格納される.
[RGB]maskを0にすると, ビット深度に基づいたデフォルトの値になる.
(例: SDL_CreateRGBSurface(0,w,h,32,0,0,0,0);
)
しかし, Amaskを0にすると, αマスクは0になる.
αマスク付きサーフェイスのブレンドモードの初期値は SDL_SetSurfaceBlendMode(surface, SDL_BLENDMODE_BLEND)
である.
SDL_SetSurfaceBlendMode()で別のブレンドモードに変えることができる.