diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/client.cpp | 5 | ||||
-rw-r--r-- | src/graphicsmanager.cpp | 39 | ||||
-rw-r--r-- | src/graphicsmanager.h | 7 | ||||
-rw-r--r-- | src/gui/setup_video.cpp | 13 | ||||
-rw-r--r-- | src/test/testlauncher.cpp | 4 | ||||
-rw-r--r-- | src/test/testmain.cpp | 12 | ||||
-rw-r--r-- | src/test/testmain.h | 2 |
7 files changed, 61 insertions, 21 deletions
diff --git a/src/client.cpp b/src/client.cpp index 8a3f6f026..5bf560d32 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -514,10 +514,7 @@ void Client::gameInit() if (!mOptions.safeMode && mOptions.test.empty() && !config.getBoolValue("videodetected")) { - config.setValue("videodetected", true); - int val = graphicsManager.startDetection(); - if (val >= 0 && val <= 2) - config.setValue("opengl", val); + graphicsManager.detectVideoSettings(); } #endif diff --git a/src/graphicsmanager.cpp b/src/graphicsmanager.cpp index 8e41f4666..21fea5738 100644 --- a/src/graphicsmanager.cpp +++ b/src/graphicsmanager.cpp @@ -85,22 +85,24 @@ GraphicsManager::~GraphicsManager() #endif } -int GraphicsManager::startDetection() +TestMain *GraphicsManager::startDetection() { #ifdef USE_OPENGL TestMain *test = new TestMain(); test->exec(false); - return test->getConfig().getValueInt("opengl", -1); + return test; #else - return 0; + return nullptr; #endif } -bool GraphicsManager::detectGraphics() +int GraphicsManager::detectGraphics() { #ifdef USE_OPENGL logger->log("start detecting best mode..."); logger->log("enable opengl mode"); + int textureSampler = 0; + int compressTextures = 0; SDL_SetVideoMode(100, 100, 0, SDL_ANYFORMAT | SDL_OPENGL); initOpenGL(); @@ -149,6 +151,7 @@ bool GraphicsManager::detectGraphics() // hope it can work well logger->log("detected NVIDIA driver"); config.setValue("useTextureSampler", true); + textureSampler = 1; mode = 1; } @@ -164,6 +167,7 @@ bool GraphicsManager::detectGraphics() { // Mesa detected config.setValue("compresstextures", true); + compressTextures = 1; } config.setValue("opengl", mode); @@ -171,9 +175,9 @@ bool GraphicsManager::detectGraphics() config.write(); logger->log("detection complete"); - return true; + return mode | (1024 * textureSampler) | (2048 * compressTextures); #else - return false; + return 0; #endif } @@ -711,3 +715,26 @@ unsigned int GraphicsManager::getLastError() } return error; } + +void GraphicsManager::detectVideoSettings() +{ + config.setValue("videodetected", true); + TestMain *test = startDetection(); + + if (test) + { + const Configuration &conf = test->getConfig(); + int val = conf.getValueInt("opengl", -1); + if (val >= 0 && val <= 2) + { + config.setValue("opengl", val); + val = conf.getValue("useTextureSampler", -1); + if (val != -1) + config.setValue("useTextureSampler", val); + val = conf.getValue("compresstextures", -1); + if (val != -1) + config.setValue("compresstextures", val); + } + delete test; + } +} diff --git a/src/graphicsmanager.h b/src/graphicsmanager.h index 51c9a9efc..2373e598f 100644 --- a/src/graphicsmanager.h +++ b/src/graphicsmanager.h @@ -37,6 +37,7 @@ #include "localconsts.h" class Graphics; +class TestMain; struct FBOInfo; @@ -49,9 +50,9 @@ class GraphicsManager final void initGraphics(bool noOpenGL); - int startDetection(); + TestMain *startDetection(); - bool detectGraphics(); + int detectGraphics(); bool supportExtension(const std::string &ext); @@ -83,6 +84,8 @@ class GraphicsManager final void updateLimits(); + void detectVideoSettings(); + Graphics *createGraphics(); void createTextureSampler(); diff --git a/src/gui/setup_video.cpp b/src/gui/setup_video.cpp index 5157f8e9f..35293fec4 100644 --- a/src/gui/setup_video.cpp +++ b/src/gui/setup_video.cpp @@ -50,6 +50,8 @@ #include "utils/gettext.h" +#include "test/testmain.h" + #include <guichan/key.hpp> #include <guichan/listmodel.hpp> @@ -559,9 +561,14 @@ void Setup_Video::action(const gcn::ActionEvent &event) } else if (id == "detect") { - const int val = graphicsManager.startDetection(); - if (val >= 0 && val <= 2) - mOpenGLDropDown->setSelected(val); + TestMain *test = graphicsManager.startDetection(); + if (test) + { + const int val = test->getConfig().getValueInt("opengl", -1); + if (val >= 0 && val <= 2) + mOpenGLDropDown->setSelected(val); + delete test; + } } } diff --git a/src/test/testlauncher.cpp b/src/test/testlauncher.cpp index 4352957ef..609198a97 100644 --- a/src/test/testlauncher.cpp +++ b/src/test/testlauncher.cpp @@ -172,6 +172,7 @@ int TestLauncher::testBatches() file << mTest << std::endl; file << batches << std::endl; + return 0; } int TestLauncher::testInternal() @@ -226,9 +227,8 @@ int TestLauncher::testInternal() int TestLauncher::testVideoDetection() { - graphicsManager.detectGraphics(); file << mTest << std::endl; - file << config.getIntValue("opengl") << std::endl; + file << graphicsManager.detectGraphics() << std::endl; return 0; } diff --git a/src/test/testmain.cpp b/src/test/testmain.cpp index 94914c41b..535cfebc4 100644 --- a/src/test/testmain.cpp +++ b/src/test/testmain.cpp @@ -195,17 +195,17 @@ int TestMain::exec(const bool testAudio) */ // if OpenGL implimentation is not good, disable it. - if (!detectMode) + if (!(detectMode & 15)) openGLMode = 0; writeConfig(openGLMode, rescaleTest[openGLMode], - soundTest, info, batchSize); + soundTest, info, batchSize, detectMode); return 0; } void TestMain::writeConfig(const int openGLMode, const int rescale, const int sound, const std::string &info, - const int batchSize) + const int batchSize, const int detectMode) { mConfig.init(Client::getConfigDirectory() + "/config.xml"); @@ -226,6 +226,12 @@ void TestMain::writeConfig(const int openGLMode, const int rescale, // max batch size // mConfig.setValue("batchsize", batchSize); + // additinal modes + mConfig.setValue("useTextureSampler", + static_cast<bool>(detectMode & 1024)); + mConfig.setValue("compresstextures", + static_cast<bool>(detectMode & 2048)); + // stats mConfig.setValue("testInfo", info); diff --git a/src/test/testmain.h b/src/test/testmain.h index 3b3b3fbe0..2367b7d1b 100644 --- a/src/test/testmain.h +++ b/src/test/testmain.h @@ -61,7 +61,7 @@ class TestMain void writeConfig(const int openGLMode, const int rescale, const int sound, const std::string &info, - const int batchSize); + const int batchSize, const int detectMode); int readValue2(const int ver); |