From 9e6dc297cb3a128aed6b31c572b2bcf471d54201 Mon Sep 17 00:00:00 2001 From: Pavel Rojtberg Date: Fri, 2 Sep 2022 21:08:12 +0200 Subject: [PATCH] WIP: query SDL for video modes --- .../Bites/src/OgreApplicationContextSDL.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Components/Bites/src/OgreApplicationContextSDL.cpp b/Components/Bites/src/OgreApplicationContextSDL.cpp index 78dcd292915..db8ed0169b3 100644 --- a/Components/Bites/src/OgreApplicationContextSDL.cpp +++ b/Components/Bites/src/OgreApplicationContextSDL.cpp @@ -30,6 +30,13 @@ void ApplicationContextSDL::removeInputListener(NativeWindowType* win, InputList mInputListeners.erase(std::make_pair(SDL_GetWindowID(win), lis)); } +static void removeDuplicates(std::vector& c) +{ + std::sort(c.begin(), c.end()); + auto p = std::unique(c.begin(), c.end()); + c.erase(p, c.end()); +} + NativeWindowPair ApplicationContextSDL::createWindow(const Ogre::String& name, Ogre::uint32 w, Ogre::uint32 h, Ogre::NameValuePairList miscParams) { NativeWindowPair ret = {NULL, NULL}; @@ -39,6 +46,18 @@ NativeWindowPair ApplicationContextSDL::createWindow(const Ogre::String& name, O Ogre::LogManager::getSingleton().logMessage("[SDL] gamecontrollerdb.txt loaded"); SDL_InitSubSystem(SDL_INIT_VIDEO | SDL_INIT_GAMECONTROLLER); + + // For now we consider primary display only + int numDispModes = SDL_GetNumDisplayModes(0); + std::vector modes; + for(int i = 0; i < numDispModes; i++) { + SDL_DisplayMode mode; + SDL_GetDisplayMode(0, i, &mode); + modes.push_back(Ogre::StringUtil::format("%4d x %4d", mode.w, mode.h)); + } + removeDuplicates(modes); + for(auto rs : mRoot->getAvailableRenderers()) + const_cast(rs->getConfigOptions().at("Video Mode")).possibleValues = modes; } auto p = mRoot->getRenderSystem()->getRenderWindowDescription();