web-dev-qa-db-ja.com

SDLで画面サイズを取得する方法

SDLとC++を使ってプログラムを作ろうとしています。 SDLで画面の幅と高さをピクセル単位で取得するにはどうすればよいですか?ウィンドウの幅ではなく画面の幅を取得しようとしています。 。 。 。

7
tam bakaka

SDL2では、 SDL_GetCurrentDisplayMode または SDL_GetDesktopDisplayMode ニーズに応じて。使用例:

SDL_DisplayMode DM;
SDL_GetCurrentDisplayMode(0, &DM);
auto Width = DM.w;
auto Height = DM.h;

高DPIディスプレイでは、これは物理解像度ではなく仮想解像度を返します。

SDL2 wikiから:

SDLがフルスクリーンで実行され、解像度が変更された場合、[ SDL_GetDesktopDisplayMode ()]と SDL_GetCurrentDisplayMode ()には違いがあります。その場合、[ SDL_GetDesktopDisplayMode ()]は、現在の表示モードではなく、以前のネイティブ表示モードを返します。

14
emlai

フルスクリーンの場合: _SDL_GetRendererOutputSize_を使用すると非常に簡単に実行できます

次のように_SDL_Renderer*_を渡す必要があります。

_int w, h;

SDL_GetRendererOutputSize(renderer, &w, &h);
_

void SDL_GetRendererOutputSize(SDL_Renderer *レンダラー、int * w、int * h)

レンダラーレンダリングコンテキスト

wレンダラーの幅で埋められたポインター

hレンダラーの高さで埋められたポインター

フルスクリーン以外の場合:

SDL_GetDesktopDisplayMode()の使用

_SDL_DisplayMode dm;

if (SDL_GetDesktopDisplayMode(0, &dm) != 0)
{
     SDL_Log("SDL_GetDesktopDisplayMode failed: %s", SDL_GetError());
     return 1;
}

int w, h;
w = dm.w;
h = dm.h;
_

エラーチェックをしてください!または、_SDL_GetDesktopDisplayMode_が失敗すると、あなたは自分の人生を憎むでしょう!

3
kovacsmarcell