目次 - SDL 3.0 API(機能別) - 2Dレンダリング - SDL_CreateRenderer

SDL_CreateRenderer

ウィンドウの2Dレンダリングコンテキストを生成する

ヘッダ

SDL3/SDL_render.h

構文

SDL_Renderer * SDL_CreateRenderer(SDL_Window *window, const char *name);

引数

SDL_Window *windowレンダリングを表示するウィンドウ
const char *name初期化するレンダリングドライバの名前. NULLのときSDLが選択する

戻り値

(SDL_Renderer *) 成功のときレンダリングコンテキスト, 失敗のときNULLを戻す. SDL_GetError()を呼んで詳細を知ることができる.

詳細

特定のレンダラを使用したいならば, ここで名前を指定することができる. 利用できるレンダラの一覧はSDL_GetRenderDriver()で得られる. インデックス番号は0からSDL_GetNumRenderDrivers()-1の範囲である. 特定のレンダラが必要ない場合は, NULLを指定するとSDLがユーザのシステムで利用できるものの中から最もよいものを選択する.

nameがコンマで区切られた一覧の場合, SDLはそれぞれの名前を一覧の順に1つが成功するか全て失敗するまで試す.

デフォルトではレンダリングサイズはウィンドウのピクセル数のサイズと同じだが, SDL_SetRenderLogicalPresentation()で論理サイズと拡大縮小の設定ができる.

スレッドセーフ

この関数を呼べるのはメインスレッドのみである.

バージョン

SDL 3.2.0以降

サンプルコード

#include <SDL3/SDL.h>
#include <SDL3/SDL_main.h>

int main(int argc, char *argv[])
{
    SDL_Window *win = NULL;
    SDL_Renderer *renderer = NULL;
    SDL_Texture *bitmapTex = NULL;
    SDL_Surface *bitmapSurface = NULL;
    int width = 320, height = 240;
    bool loopShouldStop = false;

    SDL_Init(SDL_INIT_VIDEO);

    win = SDL_CreateWindow("Hello World", width, height, 0);

    renderer = SDL_CreateRenderer(win, NULL);

    bitmapSurface = SDL_LoadBMP("img/hello.bmp");
    bitmapTex = SDL_CreateTextureFromSurface(renderer, bitmapSurface);
    SDL_DestroySurface(bitmapSurface);

    while (!loopShouldStop)
    {
        SDL_Event event;
        while (SDL_PollEvent(&event))
        {
            switch (event.type)
            {
                case SDL_EVENT_QUIT:
                    loopShouldStop = true;
                    break;
            }
        }

        SDL_RenderClear(renderer);
        SDL_RenderTexture(renderer, bitmapTex, NULL, NULL);
        SDL_RenderPresent(renderer);
    }

    SDL_DestroyTexture(bitmapTex);
    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(win);

    SDL_Quit();

    return 0;
}

関連項目

SDL Wikiへのリンク

SDL_CreateRenderer - SDL Wiki