目次 - API(機能別) - サーフェイスの生成と単純な描画 - SDL_CreateRGBSurface

# SDL_CreateRGBSurface

新しいRGBサーフェイスを生成する

## 構文

`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 | ピクセルのαマスク

## 戻り値

成功のとき生成されたSDL_Surface, 失敗のときNULLを戻す. SDL_GetError()を呼んで詳細を知ることができる.

## サンプルコード

``

        /* 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) {
            fprintf(stderr, "CreateRGBSurface 失敗: %s\n", 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()で別のブレンドモードに変えることができる.

## 関連項目(関数)

SDL_CreateRGBSurfaceFrom
SDL_FreeSurface

## SDL Wikiへのリンク

SDL_CreateRGBSurface - SDL Wiki