目次 - API(機能別) - ディスプレイとウィンドウ - SDL_GetClosestDisplayMode

# SDL_GetClosestDisplayMode

要求に最も近いディスプレイモードを検索する

## 構文

`SDL_DisplayMode* SDL_GetClosestDisplayMode(int displayIndex, const SDL_DisplayMode* mode, SDL_DisplayMode* closest)`

## 引数

displayIndex | 調査するディスプレイの番号
mode | 要求するSDL_DisplayMode
closest | 要求に最も近い利用可能なモードを代入するSDL_DisplayModeのポインタ

## 戻り値

成功のときclosestへのポインタ, 利用可能なディスプレイモードがないときNULLを戻す. SDL_GetError()を呼んで詳細を知ることができる.

## サンプルコード

``

    // SDL2のSDL_GetClosestDisplayMode()を使う

    #include "SDL.h"
    #include <stdio.h>

    int main(int argc, char* argv[]) {

        // 代入される構造体を宣言する
        SDL_DisplayMode target, closest;

        SDL_Init(SDL_INIT_VIDEO);

        // 要求する解像度等を設定する
        target.w = 600;
        target.h = 500;
        target.format = 0;  // 無視される
        target.refresh_rate = 0; // 無視される
        target.driverdata   = 0; // 0で初期化する
        printf("要求: \t%dx%dpx @ %dhz \n", target.w, target.h, target.refresh_rate);

        // ディスプレイモードをSDL_GetClosestDisplayに参照呼び出しで渡す
        // そして戻り値がNULLでないかチェックする
        if (SDL_GetClosestDisplayMode(0, &target, &closest) == NULL)

            // 戻り値がNULLならば, 一致するモードが見つからなかった
            printf("\n一致するディスプレイモードが見つからなかった!\n\n");

        else
            // その他ならば, 最も近いディスプレイモードが使える
            // SDL_DisplayMode構造体をアクセスして受け取った値を見る
            printf("受信: \t%dx%dpx @ %dhz \n", closest.w, closest.h, closest.refresh_rate);

        // 終了処理を行いプログラムを終了する
        SDL_Quit();
        return 0;

    }

## 詳細

利用可能なディスプレイモードが検索され, 要求と最も近いモードがclosestに代入される. modeのformatとrefresh_rateが0の場合, デスクトップのモードとなる. モードは, サイズを最優先で検索し, ピクセル形式は次の優先度となる. そして最後に更新周期をチェックする. 利用可能なモードが要求に対して小さすぎる場合, NULLを戻す.

## 関連項目(関数)

SDL_GetDisplayMode
SDL_GetNumDisplayModes

## SDL Wikiへのリンク

SDL_GetClosestDisplayMode - SDL Wiki