#include #include #include #include int main(int argc, char** argv) { SDL_Init(SDL_INIT_VIDEO); int numDisplayModes{ }; if((numDisplayModes = SDL_GetNumDisplayModes(0)) < 1) { std::cerr << "No display modes found." << std::endl; SDL_Quit(); return EXIT_FAILURE; } std::vector displayModes; SDL_DisplayMode currentDisplayMode{ }; if(SDL_GetCurrentDisplayMode(0, ¤tDisplayMode) != 0) { std::cerr << "Unable to get details for current display mode." << std::endl; SDL_Quit(); return EXIT_FAILURE; } displayModes.push_back(currentDisplayMode); for(int i{ }; i < numDisplayModes; i++) { SDL_DisplayMode newDisplayMode{ }; if(SDL_GetDisplayMode(0, i, &newDisplayMode) != 0) { std::cerr << "Unable to get details for display mode " << i << "." << std::endl; SDL_Quit(); return EXIT_FAILURE; } displayModes.push_back(newDisplayMode); } for(const auto displayMode : displayModes) { static auto count = 0; std::cout << (count++ == 0 ? "Current Resolution " : "Resolution ") << displayMode.w << " x " << displayMode.h << " "; auto sdlWindow = SDL_CreateWindow(nullptr, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, displayMode.w, displayMode.h, SDL_WINDOW_FULLSCREEN | SDL_WINDOW_OPENGL); if(sdlWindow == nullptr) { std::cout << "FAIL, null pointer"; } else { auto glContext = SDL_GL_CreateContext(sdlWindow); int actualWidth{ }, actualHeight{ }; SDL_GL_GetDrawableSize(sdlWindow, &actualWidth, &actualHeight); if(actualWidth != displayMode.w || actualHeight != displayMode.h) std::cout << "FAIL, got " << actualWidth << " x " << actualHeight; else std::cout << "PASS"; SDL_GL_DeleteContext(glContext); SDL_DestroyWindow(sdlWindow); } std::cout << std::endl; } SDL_Quit(); return EXIT_SUCCESS; }