2016-09-27 13 views
1
//Get screen resolution 
    SDL_DisplayMode current; 
     cout << "num_displays : " << SDL_GetNumVideoDisplays() << endl; 
     for (int i = 0; i < SDL_GetNumVideoDisplays(); ++i){ 
      SDL_GetDesktopDisplayMode(i, &current); 
      cout << "current.w [ " << current.w << " ] - current.h [ " << current.h << " ]\n"; 
     } 

次のコードは、接続されている各ディスプレイの画面解像度を表示します。問題は、1920 x 1080モードで実行すると、間違った解像度が表示されることです。しかし、メインディスプレイで解像度を1600 x 900以下に下げると、current.w &のcurrent.hの値が完璧です。SDL_GetDesktopDisplayMode()が取得できません1080

これはSDLの制限ですか、ディスプレイドライバに問題がありますか?

IDE:コードブロック(32ビット) - コンパイラ:MinGWの

EDIT:間違ったが、実際には非常に特定の値ではないごみです。 1920 - 1080の代わりに間違った出力が常にあります1536 - 864

+2

「間違っている」とは実際に何を意味するのですか(その半分は負、NaN、...)ですか? – Brendan

+2

要因は1.25あなた(またはあなたのOS)はこの解像度であなたのデスクトップ(highdpi)スケーリングを1.25に設定しましたか?その場合、アプリケーションをhighdpi対応に設定したいかもしれませんが、OS上で実行されます(osx上のplistまたはウィンドウ上のマニフェスト)。 – PeterT

答えて

3

@PeterTが正しくなっています。私はWindows 10を使用しており、スケーリングは125%でした。スケーリングを100%に減らすことで問題は解決しました。 私の解像度を下げると、Windowsは自動的にスケーリングを100%に変更しました。

+2

ウィンドウについて心配しているのであれば、ウィンドウフラグ['SDL_WINDOW_ALLOW_HIGHDPI'](https://wiki.libsdl.org/SDL_WindowFlags)でネイティブ解像度でレンダリングできるだけかもしれないと思います。 – PeterT

関連する問題