AFAIK невозможно с помощью SDL получить обновленные разрешения (кто-нибудь, пожалуйста, исправьте меня, если я ошибаюсь).
Способ, которым вы могли бы приблизиться к этому, использует API вашей ОС. В вашем случае вы говорили, что используете Windows. Поэтому вы можете использовать API Windows для получения обновленной информации о разрешении. Это явно не переносимо для других ОС - так что вам нужно будет сделать это для каждой ОС, которую вы хотите поддерживать.
В нижней части моего ответа я привел минимальный пример, который показывает, как вы можете получить разрешение основного дисплея в C++. Если вы хотите более тщательно обрабатывать несколько мониторов и их относительные позиции и т. Д., Вы должны взглянуть на this question.
#include "wtypes.h"
#include <SDL.h>
#include <iostream>
using namespace std;
void GetDesktopResolution(int& w, int& h)
{
RECT r;
GetWindowRect(GetDesktopWindow(), &r);
w = r.right;
h = r.bottom;
}
int main(int argc, char *argv[])
{
SDL_Init(SDL_INIT_EVERYTHING);
SDL_Window* window = SDL_CreateWindow("SDL", 0, 0, 640, 480, SDL_WINDOW_RESIZABLE);
bool running = true;
while(running) {
SDL_Event game_event;
if(SDL_PollEvent(&game_event)) {
switch(game_event.type) {
case SDL_QUIT:
running = false;
break;
}
}
SDL_DisplayMode current;
SDL_GetCurrentDisplayMode(0, ¤t);
cout << "SDL" << current.w << "," << current.h << '\n';
int w, h;
GetDesktopResolution(w, h);
cout << "winapi" << w << "," << h << '\n';
}
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}