mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-05-10 12:36:53 +03:00
Merge branch 'vsync' into 'master'
Add support for non-adaptive VSync Closes #7129 See merge request OpenMW/openmw!2769
This commit is contained in:
commit
e8e97679f7
16 changed files with 480 additions and 392 deletions
|
@ -58,6 +58,7 @@
|
||||||
Feature #7058: Implement TestModels (T3D) console command
|
Feature #7058: Implement TestModels (T3D) console command
|
||||||
Feature #7087: Block resolution change in the Windowed Fullscreen mode
|
Feature #7087: Block resolution change in the Windowed Fullscreen mode
|
||||||
Feature #7125: Remembering console commands between sessions
|
Feature #7125: Remembering console commands between sessions
|
||||||
|
Feature #7129: Add support for non-adaptive VSync
|
||||||
Feature #7130: Ability to set MyGUI logging verbosity
|
Feature #7130: Ability to set MyGUI logging verbosity
|
||||||
Feature #7148: Optimize string literal lookup in mwscript
|
Feature #7148: Optimize string literal lookup in mwscript
|
||||||
Feature #7194: Ori to show texture paths
|
Feature #7194: Ori to show texture paths
|
||||||
|
|
|
@ -93,13 +93,18 @@ bool Launcher::GraphicsPage::loadSettings()
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// Visuals
|
// Visuals
|
||||||
if (Settings::Manager::getBool("vsync", "Video"))
|
|
||||||
vSyncCheckBox->setCheckState(Qt::Checked);
|
int vsync = Settings::Manager::getInt("vsync mode", "Video");
|
||||||
|
if (vsync < 0 || vsync > 2)
|
||||||
|
vsync = 0;
|
||||||
|
|
||||||
|
vSyncComboBox->setCurrentIndex(vsync);
|
||||||
|
|
||||||
size_t windowMode = static_cast<size_t>(Settings::Manager::getInt("window mode", "Video"));
|
size_t windowMode = static_cast<size_t>(Settings::Manager::getInt("window mode", "Video"));
|
||||||
if (windowMode > static_cast<size_t>(Settings::WindowMode::Windowed))
|
if (windowMode > static_cast<size_t>(Settings::WindowMode::Windowed))
|
||||||
windowMode = 0;
|
windowMode = 0;
|
||||||
windowModeComboBox->setCurrentIndex(windowMode);
|
windowModeComboBox->setCurrentIndex(windowMode);
|
||||||
|
slotFullScreenChanged(windowMode);
|
||||||
|
|
||||||
if (Settings::Manager::getBool("window border", "Video"))
|
if (Settings::Manager::getBool("window border", "Video"))
|
||||||
windowBorderCheckBox->setCheckState(Qt::Checked);
|
windowBorderCheckBox->setCheckState(Qt::Checked);
|
||||||
|
@ -185,9 +190,9 @@ void Launcher::GraphicsPage::saveSettings()
|
||||||
|
|
||||||
// Ensure we only set the new settings if they changed. This is to avoid cluttering the
|
// Ensure we only set the new settings if they changed. This is to avoid cluttering the
|
||||||
// user settings file (which by definition should only contain settings the user has touched)
|
// user settings file (which by definition should only contain settings the user has touched)
|
||||||
bool cVSync = vSyncCheckBox->checkState();
|
int cVSync = vSyncComboBox->currentIndex();
|
||||||
if (cVSync != Settings::Manager::getBool("vsync", "Video"))
|
if (cVSync != Settings::Manager::getInt("vsync mode", "Video"))
|
||||||
Settings::Manager::setBool("vsync", "Video", cVSync);
|
Settings::Manager::setInt("vsync mode", "Video", cVSync);
|
||||||
|
|
||||||
int cWindowMode = windowModeComboBox->currentIndex();
|
int cWindowMode = windowModeComboBox->currentIndex();
|
||||||
if (cWindowMode != Settings::Manager::getInt("window mode", "Video"))
|
if (cWindowMode != Settings::Manager::getInt("window mode", "Video"))
|
||||||
|
|
|
@ -473,7 +473,7 @@ void OMW::Engine::createWindow()
|
||||||
Settings::WindowMode windowMode
|
Settings::WindowMode windowMode
|
||||||
= static_cast<Settings::WindowMode>(Settings::Manager::getInt("window mode", "Video"));
|
= static_cast<Settings::WindowMode>(Settings::Manager::getInt("window mode", "Video"));
|
||||||
bool windowBorder = Settings::Manager::getBool("window border", "Video");
|
bool windowBorder = Settings::Manager::getBool("window border", "Video");
|
||||||
bool vsync = Settings::Manager::getBool("vsync", "Video");
|
int vsync = Settings::Manager::getInt("vsync mode", "Video");
|
||||||
unsigned int antialiasing = std::max(0, Settings::Manager::getInt("antialiasing", "Video"));
|
unsigned int antialiasing = std::max(0, Settings::Manager::getInt("antialiasing", "Video"));
|
||||||
|
|
||||||
int pos_x = SDL_WINDOWPOS_CENTERED_DISPLAY(screen), pos_y = SDL_WINDOWPOS_CENTERED_DISPLAY(screen);
|
int pos_x = SDL_WINDOWPOS_CENTERED_DISPLAY(screen), pos_y = SDL_WINDOWPOS_CENTERED_DISPLAY(screen);
|
||||||
|
@ -560,10 +560,10 @@ void OMW::Engine::createWindow()
|
||||||
traits->windowName = SDL_GetWindowTitle(mWindow);
|
traits->windowName = SDL_GetWindowTitle(mWindow);
|
||||||
traits->windowDecoration = !(SDL_GetWindowFlags(mWindow) & SDL_WINDOW_BORDERLESS);
|
traits->windowDecoration = !(SDL_GetWindowFlags(mWindow) & SDL_WINDOW_BORDERLESS);
|
||||||
traits->screenNum = SDL_GetWindowDisplayIndex(mWindow);
|
traits->screenNum = SDL_GetWindowDisplayIndex(mWindow);
|
||||||
traits->vsync = vsync;
|
traits->vsync = 0;
|
||||||
traits->inheritedWindowData = new SDLUtil::GraphicsWindowSDL2::WindowData(mWindow);
|
traits->inheritedWindowData = new SDLUtil::GraphicsWindowSDL2::WindowData(mWindow);
|
||||||
|
|
||||||
graphicsWindow = new SDLUtil::GraphicsWindowSDL2(traits);
|
graphicsWindow = new SDLUtil::GraphicsWindowSDL2(traits, vsync);
|
||||||
if (!graphicsWindow->valid())
|
if (!graphicsWindow->valid())
|
||||||
throw std::runtime_error("Failed to create GraphicsContext");
|
throw std::runtime_error("Failed to create GraphicsContext");
|
||||||
|
|
||||||
|
|
|
@ -256,6 +256,7 @@ namespace MWGui
|
||||||
getWidget(mOkButton, "OkButton");
|
getWidget(mOkButton, "OkButton");
|
||||||
getWidget(mResolutionList, "ResolutionList");
|
getWidget(mResolutionList, "ResolutionList");
|
||||||
getWidget(mWindowModeList, "WindowModeList");
|
getWidget(mWindowModeList, "WindowModeList");
|
||||||
|
getWidget(mVSyncModeList, "VSyncModeList");
|
||||||
getWidget(mWindowBorderButton, "WindowBorderButton");
|
getWidget(mWindowBorderButton, "WindowBorderButton");
|
||||||
getWidget(mTextureFilteringButton, "TextureFilteringButton");
|
getWidget(mTextureFilteringButton, "TextureFilteringButton");
|
||||||
getWidget(mControlsBox, "ControlsBox");
|
getWidget(mControlsBox, "ControlsBox");
|
||||||
|
@ -315,6 +316,7 @@ namespace MWGui
|
||||||
mMaxLights->eventComboChangePosition += MyGUI::newDelegate(this, &SettingsWindow::onMaxLightsChanged);
|
mMaxLights->eventComboChangePosition += MyGUI::newDelegate(this, &SettingsWindow::onMaxLightsChanged);
|
||||||
|
|
||||||
mWindowModeList->eventComboChangePosition += MyGUI::newDelegate(this, &SettingsWindow::onWindowModeChanged);
|
mWindowModeList->eventComboChangePosition += MyGUI::newDelegate(this, &SettingsWindow::onWindowModeChanged);
|
||||||
|
mVSyncModeList->eventComboChangePosition += MyGUI::newDelegate(this, &SettingsWindow::onVSyncModeChanged);
|
||||||
|
|
||||||
mKeyboardSwitch->eventMouseButtonClick += MyGUI::newDelegate(this, &SettingsWindow::onKeyboardSwitchClicked);
|
mKeyboardSwitch->eventMouseButtonClick += MyGUI::newDelegate(this, &SettingsWindow::onKeyboardSwitchClicked);
|
||||||
mControllerSwitch->eventMouseButtonClick
|
mControllerSwitch->eventMouseButtonClick
|
||||||
|
@ -562,6 +564,16 @@ namespace MWGui
|
||||||
Settings::Manager::setStringArray("preferred locales", "General", currentLocales);
|
Settings::Manager::setStringArray("preferred locales", "General", currentLocales);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SettingsWindow::onVSyncModeChanged(MyGUI::ComboBox* _sender, size_t pos)
|
||||||
|
{
|
||||||
|
if (pos == MyGUI::ITEM_NONE)
|
||||||
|
return;
|
||||||
|
|
||||||
|
int index = static_cast<int>(_sender->getIndexSelected());
|
||||||
|
Settings::Manager::setInt("vsync mode", "Video", index);
|
||||||
|
apply();
|
||||||
|
}
|
||||||
|
|
||||||
void SettingsWindow::onWindowModeChanged(MyGUI::ComboBox* _sender, size_t pos)
|
void SettingsWindow::onWindowModeChanged(MyGUI::ComboBox* _sender, size_t pos)
|
||||||
{
|
{
|
||||||
if (pos == MyGUI::ITEM_NONE)
|
if (pos == MyGUI::ITEM_NONE)
|
||||||
|
@ -870,6 +882,16 @@ namespace MWGui
|
||||||
mResolutionList->setEnabled(false);
|
mResolutionList->setEnabled(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SettingsWindow::updateVSyncModeSettings()
|
||||||
|
{
|
||||||
|
int index = static_cast<size_t>(Settings::Manager::getInt("vsync mode", "Video"));
|
||||||
|
|
||||||
|
if (index < 0 || index > 2)
|
||||||
|
index = 0;
|
||||||
|
|
||||||
|
mVSyncModeList->setIndexSelected(index);
|
||||||
|
}
|
||||||
|
|
||||||
void SettingsWindow::layoutControlsBox()
|
void SettingsWindow::layoutControlsBox()
|
||||||
{
|
{
|
||||||
const int h = MWBase::Environment::get().getWindowManager()->getFontHeight() + 2;
|
const int h = MWBase::Environment::get().getWindowManager()->getFontHeight() + 2;
|
||||||
|
@ -1033,6 +1055,7 @@ namespace MWGui
|
||||||
updateControlsBox();
|
updateControlsBox();
|
||||||
updateLightSettings();
|
updateLightSettings();
|
||||||
updateWindowModeSettings();
|
updateWindowModeSettings();
|
||||||
|
updateVSyncModeSettings();
|
||||||
resetScrollbars();
|
resetScrollbars();
|
||||||
renderScriptSettings();
|
renderScriptSettings();
|
||||||
MWBase::Environment::get().getWindowManager()->setKeyFocusWidget(mOkButton);
|
MWBase::Environment::get().getWindowManager()->setKeyFocusWidget(mOkButton);
|
||||||
|
|
|
@ -18,6 +18,8 @@ namespace MWGui
|
||||||
|
|
||||||
void updateLightSettings();
|
void updateLightSettings();
|
||||||
|
|
||||||
|
void updateVSyncModeSettings();
|
||||||
|
|
||||||
void updateWindowModeSettings();
|
void updateWindowModeSettings();
|
||||||
|
|
||||||
void onResChange(int, int) override;
|
void onResChange(int, int) override;
|
||||||
|
@ -29,6 +31,7 @@ namespace MWGui
|
||||||
// graphics
|
// graphics
|
||||||
MyGUI::ListBox* mResolutionList;
|
MyGUI::ListBox* mResolutionList;
|
||||||
MyGUI::ComboBox* mWindowModeList;
|
MyGUI::ComboBox* mWindowModeList;
|
||||||
|
MyGUI::ComboBox* mVSyncModeList;
|
||||||
MyGUI::Button* mWindowBorderButton;
|
MyGUI::Button* mWindowBorderButton;
|
||||||
MyGUI::ComboBox* mTextureFilteringButton;
|
MyGUI::ComboBox* mTextureFilteringButton;
|
||||||
|
|
||||||
|
@ -83,6 +86,7 @@ namespace MWGui
|
||||||
void onLanguageChanged(size_t langPriority, MyGUI::ComboBox* _sender, size_t pos);
|
void onLanguageChanged(size_t langPriority, MyGUI::ComboBox* _sender, size_t pos);
|
||||||
|
|
||||||
void onWindowModeChanged(MyGUI::ComboBox* _sender, size_t pos);
|
void onWindowModeChanged(MyGUI::ComboBox* _sender, size_t pos);
|
||||||
|
void onVSyncModeChanged(MyGUI::ComboBox* _sender, size_t pos);
|
||||||
|
|
||||||
void onRebindAction(MyGUI::Widget* _sender);
|
void onRebindAction(MyGUI::Widget* _sender);
|
||||||
void onInputTabMouseWheel(MyGUI::Widget* _sender, int _rel);
|
void onInputTabMouseWheel(MyGUI::Widget* _sender, int _rel);
|
||||||
|
|
|
@ -1148,8 +1148,8 @@ namespace MWGui
|
||||||
|| setting.second == "window mode" || setting.second == "window border"))
|
|| setting.second == "window mode" || setting.second == "window border"))
|
||||||
changeRes = true;
|
changeRes = true;
|
||||||
|
|
||||||
else if (setting.first == "Video" && setting.second == "vsync")
|
else if (setting.first == "Video" && setting.second == "vsync mode")
|
||||||
mVideoWrapper->setSyncToVBlank(Settings::Manager::getBool("vsync", "Video"));
|
mVideoWrapper->setSyncToVBlank(Settings::Manager::getInt("vsync mode", "Video"));
|
||||||
else if (setting.first == "Video" && (setting.second == "gamma" || setting.second == "contrast"))
|
else if (setting.first == "Video" && (setting.second == "gamma" || setting.second == "contrast"))
|
||||||
mVideoWrapper->setGammaContrast(
|
mVideoWrapper->setGammaContrast(
|
||||||
Settings::Manager::getFloat("gamma", "Video"), Settings::Manager::getFloat("contrast", "Video"));
|
Settings::Manager::getFloat("gamma", "Video"), Settings::Manager::getFloat("contrast", "Video"));
|
||||||
|
|
|
@ -14,7 +14,7 @@ namespace SDLUtil
|
||||||
close(true);
|
close(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
GraphicsWindowSDL2::GraphicsWindowSDL2(osg::GraphicsContext::Traits* traits)
|
GraphicsWindowSDL2::GraphicsWindowSDL2(osg::GraphicsContext::Traits* traits, int vsync)
|
||||||
: mWindow(nullptr)
|
: mWindow(nullptr)
|
||||||
, mContext(nullptr)
|
, mContext(nullptr)
|
||||||
, mValid(false)
|
, mValid(false)
|
||||||
|
@ -23,6 +23,13 @@ namespace SDLUtil
|
||||||
{
|
{
|
||||||
_traits = traits;
|
_traits = traits;
|
||||||
|
|
||||||
|
if (vsync == 2)
|
||||||
|
mVSyncMode = VSyncMode::Adaptive;
|
||||||
|
else if (vsync == 1)
|
||||||
|
mVSyncMode = VSyncMode::Enabled;
|
||||||
|
else
|
||||||
|
mVSyncMode = VSyncMode::Disabled;
|
||||||
|
|
||||||
init();
|
init();
|
||||||
if (GraphicsWindowSDL2::valid())
|
if (GraphicsWindowSDL2::valid())
|
||||||
{
|
{
|
||||||
|
@ -134,7 +141,7 @@ namespace SDLUtil
|
||||||
openmw_gl4es_init(mWindow);
|
openmw_gl4es_init(mWindow);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
setSwapInterval(_traits->vsync);
|
setSwapInterval(mVSyncMode);
|
||||||
|
|
||||||
// Update traits with what we've actually been given
|
// Update traits with what we've actually been given
|
||||||
// Use intermediate to avoid signed/unsigned mismatch
|
// Use intermediate to avoid signed/unsigned mismatch
|
||||||
|
@ -233,29 +240,41 @@ namespace SDLUtil
|
||||||
}
|
}
|
||||||
|
|
||||||
void GraphicsWindowSDL2::setSyncToVBlank(bool on)
|
void GraphicsWindowSDL2::setSyncToVBlank(bool on)
|
||||||
|
{
|
||||||
|
throw std::runtime_error(
|
||||||
|
"setSyncToVBlank with bool argument is not supported. Use the VSyncMode argument instead.");
|
||||||
|
}
|
||||||
|
|
||||||
|
void GraphicsWindowSDL2::setSyncToVBlank(VSyncMode mode)
|
||||||
{
|
{
|
||||||
SDL_Window* oldWin = SDL_GL_GetCurrentWindow();
|
SDL_Window* oldWin = SDL_GL_GetCurrentWindow();
|
||||||
SDL_GLContext oldCtx = SDL_GL_GetCurrentContext();
|
SDL_GLContext oldCtx = SDL_GL_GetCurrentContext();
|
||||||
|
|
||||||
SDL_GL_MakeCurrent(mWindow, mContext);
|
SDL_GL_MakeCurrent(mWindow, mContext);
|
||||||
|
|
||||||
setSwapInterval(on);
|
setSwapInterval(mode);
|
||||||
|
|
||||||
SDL_GL_MakeCurrent(oldWin, oldCtx);
|
SDL_GL_MakeCurrent(oldWin, oldCtx);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GraphicsWindowSDL2::setSwapInterval(bool enable)
|
void GraphicsWindowSDL2::setSwapInterval(VSyncMode mode)
|
||||||
{
|
{
|
||||||
if (enable)
|
mVSyncMode = mode;
|
||||||
|
|
||||||
|
if (mode == VSyncMode::Adaptive)
|
||||||
{
|
{
|
||||||
if (SDL_GL_SetSwapInterval(-1) == -1)
|
if (SDL_GL_SetSwapInterval(-1) == -1)
|
||||||
{
|
{
|
||||||
OSG_NOTICE << "Adaptive vsync unsupported" << std::endl;
|
OSG_NOTICE << "Adaptive vsync unsupported" << std::endl;
|
||||||
|
setSwapInterval(VSyncMode::Enabled);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (mode == VSyncMode::Enabled)
|
||||||
|
{
|
||||||
if (SDL_GL_SetSwapInterval(1) == -1)
|
if (SDL_GL_SetSwapInterval(1) == -1)
|
||||||
{
|
{
|
||||||
OSG_NOTICE << "Vertical synchronization unsupported, disabling" << std::endl;
|
OSG_NOTICE << "Vertical synchronization unsupported, disabling" << std::endl;
|
||||||
SDL_GL_SetSwapInterval(0);
|
setSwapInterval(VSyncMode::Disabled);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -7,6 +7,12 @@
|
||||||
|
|
||||||
namespace SDLUtil
|
namespace SDLUtil
|
||||||
{
|
{
|
||||||
|
enum VSyncMode
|
||||||
|
{
|
||||||
|
Disabled = 0,
|
||||||
|
Enabled = 1,
|
||||||
|
Adaptive = 2
|
||||||
|
};
|
||||||
|
|
||||||
class GraphicsWindowSDL2 : public osgViewer::GraphicsWindow
|
class GraphicsWindowSDL2 : public osgViewer::GraphicsWindow
|
||||||
{
|
{
|
||||||
|
@ -16,13 +22,14 @@ namespace SDLUtil
|
||||||
bool mValid;
|
bool mValid;
|
||||||
bool mRealized;
|
bool mRealized;
|
||||||
bool mOwnsWindow;
|
bool mOwnsWindow;
|
||||||
|
VSyncMode mVSyncMode;
|
||||||
|
|
||||||
void init();
|
void init();
|
||||||
|
|
||||||
virtual ~GraphicsWindowSDL2();
|
virtual ~GraphicsWindowSDL2();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
GraphicsWindowSDL2(osg::GraphicsContext::Traits* traits);
|
GraphicsWindowSDL2(osg::GraphicsContext::Traits* traits, int vsync);
|
||||||
|
|
||||||
bool isSameKindAs(const Object* object) const override
|
bool isSameKindAs(const Object* object) const override
|
||||||
{
|
{
|
||||||
|
@ -53,6 +60,7 @@ namespace SDLUtil
|
||||||
|
|
||||||
/** Set sync-to-vblank. */
|
/** Set sync-to-vblank. */
|
||||||
void setSyncToVBlank(bool on) override;
|
void setSyncToVBlank(bool on) override;
|
||||||
|
void setSyncToVBlank(VSyncMode mode);
|
||||||
|
|
||||||
/** Set Window decoration.*/
|
/** Set Window decoration.*/
|
||||||
bool setWindowDecorationImplementation(bool flag) override;
|
bool setWindowDecorationImplementation(bool flag) override;
|
||||||
|
@ -87,7 +95,7 @@ namespace SDLUtil
|
||||||
};
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void setSwapInterval(bool enable);
|
void setSwapInterval(VSyncMode mode);
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include "sdlvideowrapper.hpp"
|
#include "sdlvideowrapper.hpp"
|
||||||
|
|
||||||
#include <components/debug/debuglog.hpp>
|
#include <components/debug/debuglog.hpp>
|
||||||
|
#include <components/sdlutil/sdlgraphicswindow.hpp>
|
||||||
#include <components/settings/settings.hpp>
|
#include <components/settings/settings.hpp>
|
||||||
|
|
||||||
#include <osgViewer/Viewer>
|
#include <osgViewer/Viewer>
|
||||||
|
@ -29,15 +30,24 @@ namespace SDLUtil
|
||||||
SDL_SetWindowGammaRamp(mWindow, mOldSystemGammaRamp, &mOldSystemGammaRamp[256], &mOldSystemGammaRamp[512]);
|
SDL_SetWindowGammaRamp(mWindow, mOldSystemGammaRamp, &mOldSystemGammaRamp[256], &mOldSystemGammaRamp[512]);
|
||||||
}
|
}
|
||||||
|
|
||||||
void VideoWrapper::setSyncToVBlank(bool sync)
|
void VideoWrapper::setSyncToVBlank(int mode)
|
||||||
{
|
{
|
||||||
|
VSyncMode vsyncMode = VSyncMode::Disabled;
|
||||||
|
if (mode == 1)
|
||||||
|
vsyncMode = VSyncMode::Enabled;
|
||||||
|
else if (mode == 2)
|
||||||
|
vsyncMode = VSyncMode::Adaptive;
|
||||||
|
|
||||||
osgViewer::Viewer::Windows windows;
|
osgViewer::Viewer::Windows windows;
|
||||||
mViewer->getWindows(windows);
|
mViewer->getWindows(windows);
|
||||||
mViewer->stopThreading();
|
mViewer->stopThreading();
|
||||||
for (osgViewer::Viewer::Windows::iterator it = windows.begin(); it != windows.end(); ++it)
|
for (osgViewer::Viewer::Windows::iterator it = windows.begin(); it != windows.end(); ++it)
|
||||||
{
|
{
|
||||||
osgViewer::GraphicsWindow* win = *it;
|
osgViewer::GraphicsWindow* win = *it;
|
||||||
win->setSyncToVBlank(sync);
|
if (GraphicsWindowSDL2* sdl2win = dynamic_cast<GraphicsWindowSDL2*>(win))
|
||||||
|
sdl2win->setSyncToVBlank(vsyncMode);
|
||||||
|
else
|
||||||
|
win->setSyncToVBlank(static_cast<bool>(mode));
|
||||||
}
|
}
|
||||||
mViewer->startThreading();
|
mViewer->startThreading();
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,7 @@ namespace SDLUtil
|
||||||
VideoWrapper(SDL_Window* window, osg::ref_ptr<osgViewer::Viewer> viewer);
|
VideoWrapper(SDL_Window* window, osg::ref_ptr<osgViewer::Viewer> viewer);
|
||||||
~VideoWrapper();
|
~VideoWrapper();
|
||||||
|
|
||||||
void setSyncToVBlank(bool sync);
|
void setSyncToVBlank(int mode);
|
||||||
|
|
||||||
void setGammaContrast(float gamma, float contrast);
|
void setGammaContrast(float gamma, float contrast);
|
||||||
|
|
||||||
|
|
|
@ -125,22 +125,25 @@ This setting can be configured from a list of valid choices in the Graphics pane
|
||||||
but cannot be changed during game play
|
but cannot be changed during game play
|
||||||
due to a technical limitation that may be addressed in a future version of OpenMW.
|
due to a technical limitation that may be addressed in a future version of OpenMW.
|
||||||
|
|
||||||
vsync
|
vsync mode
|
||||||
-----
|
----------
|
||||||
|
|
||||||
:Type: boolean
|
:Type: integer
|
||||||
:Range: True/False
|
:Range: 0, 1, 2
|
||||||
:Default: False
|
:Default: 0
|
||||||
|
|
||||||
This setting determines whether frame draws are synchronized with the vertical refresh rate of your monitor.
|
This setting determines whether frame draws are synchronized with the vertical refresh rate of your monitor.
|
||||||
Enabling this setting can reduce screen tearing,
|
Enabling this setting can reduce screen tearing,
|
||||||
a visual defect caused by updating the image buffer in the middle of a screen draw.
|
a visual defect caused by updating the image buffer in the middle of a screen draw.
|
||||||
Enabling this option typically implies limiting the framerate to the refresh rate of your monitor,
|
Enabling this option (1 or 2) typically implies limiting the framerate to the refresh rate of your monitor,
|
||||||
but may also introduce additional delays caused by having to wait until the appropriate time
|
but may also introduce additional delays caused by having to wait until the appropriate time
|
||||||
(the vertical blanking interval) to draw a frame, and a loss in mouse responsiveness known as 'input lag'.
|
(the vertical blanking interval) to draw a frame, and a loss in mouse responsiveness known as 'input lag'.
|
||||||
|
Mode 2 of this option corresponds to the use of adaptive vsync. Adaptive vsync is turned off if the framerate
|
||||||
|
cannot reach your display's refresh rate. This prevents the input lag from becoming unbearable but may lead to tearing.
|
||||||
|
Some hardware might not support this mode, in which case traditional vsync will be used.
|
||||||
|
|
||||||
This setting can be adjusted in game using the VSync button in the Video tab of the Video panel in the Options menu.
|
This setting can be adjusted in game using the VSync combo box in the Video tab of the Video panel in the Options menu.
|
||||||
It can also be changed by toggling the Vertical Sync check box in the Graphics tab of the OpenMW Launcher.
|
It can also be changed by toggling the Vertical Sync combo box in the Graphics tab of the OpenMW Launcher.
|
||||||
|
|
||||||
framerate limit
|
framerate limit
|
||||||
---------------
|
---------------
|
||||||
|
|
|
@ -77,6 +77,7 @@ TextureFilteringTrilinear: "Trilinear"
|
||||||
ToggleHUD: "Toggle HUD"
|
ToggleHUD: "Toggle HUD"
|
||||||
TogglePostProcessorHUD: "Toggle Post Processor HUD"
|
TogglePostProcessorHUD: "Toggle Post Processor HUD"
|
||||||
VSync: "VSync"
|
VSync: "VSync"
|
||||||
|
VSyncAdaptive: "Adaptive"
|
||||||
Water: "Water"
|
Water: "Water"
|
||||||
WaterShader: "Water shader"
|
WaterShader: "Water shader"
|
||||||
WaterShaderTextureQuality: "Texture quality"
|
WaterShaderTextureQuality: "Texture quality"
|
||||||
|
|
|
@ -77,6 +77,7 @@ TextureFilteringTrilinear: "Трилинейная"
|
||||||
ToggleHUD: "Переключить HUD"
|
ToggleHUD: "Переключить HUD"
|
||||||
TogglePostProcessorHUD: "Меню настроек постобработки"
|
TogglePostProcessorHUD: "Меню настроек постобработки"
|
||||||
VSync: "Вертикальная синхронизация"
|
VSync: "Вертикальная синхронизация"
|
||||||
|
VSyncAdaptive: "Адаптивная"
|
||||||
Water: "Вода"
|
Water: "Вода"
|
||||||
WaterShader: "Шейдер воды"
|
WaterShader: "Шейдер воды"
|
||||||
WaterShaderTextureQuality: "Качество текстуры воды"
|
WaterShaderTextureQuality: "Качество текстуры воды"
|
||||||
|
|
|
@ -275,28 +275,28 @@
|
||||||
<Property key="ButtonAutoWidth" value="true"/>
|
<Property key="ButtonAutoWidth" value="true"/>
|
||||||
<Widget type="TabItem">
|
<Widget type="TabItem">
|
||||||
<Property key="Caption" value=" #{sVideo} "/>
|
<Property key="Caption" value=" #{sVideo} "/>
|
||||||
<Widget type="ListBox" skin="MW_List" position="0 4 185 225" align="Left Top" name="ResolutionList"/>
|
<Widget type="ListBox" skin="MW_List" position="0 4 195 225" align="Left Top" name="ResolutionList"/>
|
||||||
<Widget type="TextBox" skin="NormalText" position="197 4 185 18" align="Left Top">
|
<Widget type="TextBox" skin="NormalText" position="207 4 250 18" align="Left Top">
|
||||||
<Property key="Caption" value="#{OMWEngine:WindowMode}"/>
|
<Property key="Caption" value="#{OMWEngine:WindowMode}"/>
|
||||||
</Widget>
|
</Widget>
|
||||||
<Widget type="HBox" position="197 28 400 24">
|
<Widget type="HBox" position="207 24 400 24">
|
||||||
<Widget type="ComboBox" skin="MW_ComboBox" position="0 0 200 24" align="Left Top" name="WindowModeList">
|
<Widget type="ComboBox" skin="MW_ComboBox" position="0 0 200 24" align="Left Top" name="WindowModeList">
|
||||||
<Property key="AddItem" value="#{OMWEngine:WindowModeFullscreen}"/>
|
<Property key="AddItem" value="#{OMWEngine:WindowModeFullscreen}"/>
|
||||||
<Property key="AddItem" value="#{OMWEngine:WindowModeWindowedFullscreen}"/>
|
<Property key="AddItem" value="#{OMWEngine:WindowModeWindowedFullscreen}"/>
|
||||||
<Property key="AddItem" value="#{OMWEngine:WindowModeWindowed}"/>
|
<Property key="AddItem" value="#{OMWEngine:WindowModeWindowed}"/>
|
||||||
</Widget>
|
</Widget>
|
||||||
</Widget>
|
</Widget>
|
||||||
<Widget type="HBox" position="197 58 400 28">
|
<Widget type="TextBox" skin="NormalText" position="207 54 250 18" align="Left Top">
|
||||||
<Widget type="AutoSizedButton" skin="MW_Button" position="0 0 24 24" align="Left Top" name="VSyncButton">
|
|
||||||
<UserString key="SettingCategory" value="Video"/>
|
|
||||||
<UserString key="SettingName" value="vsync"/>
|
|
||||||
<UserString key="SettingType" value="CheckButton"/>
|
|
||||||
</Widget>
|
|
||||||
<Widget type="AutoSizedTextBox" skin="SandText" position="28 4 48 16" align="Left Top">
|
|
||||||
<Property key="Caption" value="#{OMWEngine:VSync}"/>
|
<Property key="Caption" value="#{OMWEngine:VSync}"/>
|
||||||
</Widget>
|
</Widget>
|
||||||
|
<Widget type="HBox" position="207 74 400 28">
|
||||||
|
<Widget type="ComboBox" skin="MW_ComboBox" position="0 0 200 24" align="Left Top" name="VSyncModeList">
|
||||||
|
<Property key="AddItem" value="#{sOff}"/>
|
||||||
|
<Property key="AddItem" value="#{sOn}"/>
|
||||||
|
<Property key="AddItem" value="#{OMWEngine:VSyncAdaptive}"/>
|
||||||
</Widget>
|
</Widget>
|
||||||
<Widget type="HBox" position="197 88 300 28">
|
</Widget>
|
||||||
|
<Widget type="HBox" position="207 108 300 28">
|
||||||
<Widget type="AutoSizedButton" skin="MW_Button" position="0 0 24 24" align="Left Top" name="WindowBorderButton">
|
<Widget type="AutoSizedButton" skin="MW_Button" position="0 0 24 24" align="Left Top" name="WindowBorderButton">
|
||||||
<UserString key="SettingCategory" value="Video"/>
|
<UserString key="SettingCategory" value="Video"/>
|
||||||
<UserString key="SettingName" value="window border"/>
|
<UserString key="SettingName" value="window border"/>
|
||||||
|
@ -306,7 +306,7 @@
|
||||||
<Property key="Caption" value="#{OMWEngine:WindowBorder}"/>
|
<Property key="Caption" value="#{OMWEngine:WindowBorder}"/>
|
||||||
</Widget>
|
</Widget>
|
||||||
</Widget>
|
</Widget>
|
||||||
<Widget type="HBox" position="197 118 300 28">
|
<Widget type="HBox" position="207 142 300 28">
|
||||||
<Widget type="AutoSizedButton" skin="MW_Button" position="0 0 24 24" align="Left Top" name="WindowBorderButton">
|
<Widget type="AutoSizedButton" skin="MW_Button" position="0 0 24 24" align="Left Top" name="WindowBorderButton">
|
||||||
<UserString key="SettingCategory" value="Post Processing"/>
|
<UserString key="SettingCategory" value="Post Processing"/>
|
||||||
<UserString key="SettingName" value="enabled"/>
|
<UserString key="SettingName" value="enabled"/>
|
||||||
|
@ -320,11 +320,11 @@
|
||||||
</Widget>
|
</Widget>
|
||||||
</Widget>
|
</Widget>
|
||||||
|
|
||||||
<Widget type="AutoSizedTextBox" skin="SandText" position="197 154 300 32" align="Left Top">
|
<Widget type="AutoSizedTextBox" skin="SandText" position="207 174 300 32" align="Left Top">
|
||||||
<Property key="Caption" value="#{OMWEngine:FrameRateHint}"/>
|
<Property key="Caption" value="#{OMWEngine:FrameRateHint}"/>
|
||||||
</Widget>
|
</Widget>
|
||||||
<Widget type="AutoSizedTextBox" skin="SandText" position="197 196 300 32" align="Left Top" name="WindowModeHint">
|
<Widget type="AutoSizedTextBox" skin="SandText" position="207 216 300 32" align="Left Top" name="WindowModeHint">
|
||||||
<Property key="Caption" value="#{SettingsMenu:WindowModeHint}"/>
|
<Property key="Caption" value="#{OMWEngine:WindowModeHint}"/>
|
||||||
</Widget>
|
</Widget>
|
||||||
|
|
||||||
<Widget type="TextBox" skin="NormalText" position="0 238 352 18" align="Left Top" name="FovText">
|
<Widget type="TextBox" skin="NormalText" position="0 238 352 18" align="Left Top" name="FovText">
|
||||||
|
|
|
@ -627,8 +627,11 @@ window border = true
|
||||||
# Anti-aliasing reduces jagged polygon edges. (0, 2, 4, 8, 16).
|
# Anti-aliasing reduces jagged polygon edges. (0, 2, 4, 8, 16).
|
||||||
antialiasing = 0
|
antialiasing = 0
|
||||||
|
|
||||||
# Enable vertical syncing to reduce tearing defects.
|
# Vertical syncing to reduce tearing defects.
|
||||||
vsync = false
|
# 0 = Off
|
||||||
|
# 1 = On
|
||||||
|
# 2 = Adaptive
|
||||||
|
vsync mode = 0
|
||||||
|
|
||||||
# Maximum frames per second. 0.0 is unlimited, or >0.0 to limit.
|
# Maximum frames per second. 0.0 is unlimited, or >0.0 to limit.
|
||||||
framerate limit = 300
|
framerate limit = 300
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>650</width>
|
<width>650</width>
|
||||||
<height>340</height>
|
<height>358</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout">
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
@ -22,23 +22,78 @@
|
||||||
</attribute>
|
</attribute>
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QWidget" name="DisplayWidget">
|
|
||||||
<layout class="QGridLayout" name="gridLayout_4" columnstretch="1,0">
|
<layout class="QGridLayout" name="gridLayout_4" columnstretch="1,0">
|
||||||
|
<item row="5" column="0">
|
||||||
|
<widget class="QLabel" name="screenLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>Screen:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="1">
|
||||||
|
<widget class="QComboBox" name="antiAliasingComboBox">
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>0</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>2</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>4</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>8</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>16</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="1">
|
||||||
|
<widget class="QComboBox" name="screenComboBox"/>
|
||||||
|
</item>
|
||||||
<item row="3" column="0">
|
<item row="3" column="0">
|
||||||
|
<widget class="QLabel" name="windowModeLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>Window Mode:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="6" column="0">
|
||||||
|
<widget class="QLabel" name="resolutionLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>Resolution:</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<widget class="QLabel" name="vSyncLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>Vertical Sync:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="0">
|
||||||
<widget class="QLabel" name="antiAliasingLabel">
|
<widget class="QLabel" name="antiAliasingLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Anti-aliasing:</string>
|
<string>Anti-aliasing:</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="6" column="0">
|
<item row="6" column="1">
|
||||||
<widget class="QCheckBox" name="framerateLimitCheckBox">
|
|
||||||
<property name="text">
|
|
||||||
<string>Framerate Limit:</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="5" column="1">
|
|
||||||
<layout class="QGridLayout" name="resolutionLayout">
|
<layout class="QGridLayout" name="resolutionLayout">
|
||||||
<item row="1" column="2">
|
<item row="1" column="2">
|
||||||
<layout class="QHBoxLayout" name="customResolutionLayout" stretch="1,0,1">
|
<layout class="QHBoxLayout" name="customResolutionLayout" stretch="1,0,1">
|
||||||
|
@ -87,39 +142,7 @@
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item row="6" column="1">
|
<item row="3" column="1">
|
||||||
<widget class="QDoubleSpinBox" name="framerateLimitSpinBox">
|
|
||||||
<property name="enabled">
|
|
||||||
<bool>false</bool>
|
|
||||||
</property>
|
|
||||||
<property name="suffix">
|
|
||||||
<string> FPS</string>
|
|
||||||
</property>
|
|
||||||
<property name="decimals">
|
|
||||||
<number>1</number>
|
|
||||||
</property>
|
|
||||||
<property name="minimum">
|
|
||||||
<double>1</double>
|
|
||||||
</property>
|
|
||||||
<property name="maximum">
|
|
||||||
<double>1000</double>
|
|
||||||
</property>
|
|
||||||
<property name="singleStep">
|
|
||||||
<double>15</double>
|
|
||||||
</property>
|
|
||||||
<property name="value">
|
|
||||||
<double>300</double>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="0">
|
|
||||||
<widget class="QCheckBox" name="windowBorderCheckBox">
|
|
||||||
<property name="text">
|
|
||||||
<string>Window Border</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="1">
|
|
||||||
<widget class="QComboBox" name="windowModeComboBox">
|
<widget class="QComboBox" name="windowModeComboBox">
|
||||||
<property name="currentIndex">
|
<property name="currentIndex">
|
||||||
<number>0</number>
|
<number>0</number>
|
||||||
|
@ -141,71 +164,68 @@
|
||||||
</item>
|
</item>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="0">
|
|
||||||
<widget class="QLabel" name="windowModeLabel">
|
|
||||||
<property name="text">
|
|
||||||
<string>Window Mode:</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="5" column="0">
|
|
||||||
<widget class="QLabel" name="resolutionLabel">
|
|
||||||
<property name="text">
|
|
||||||
<string>Resolution:</string>
|
|
||||||
</property>
|
|
||||||
<property name="alignment">
|
|
||||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="4" column="1">
|
|
||||||
<widget class="QComboBox" name="screenComboBox"/>
|
|
||||||
</item>
|
|
||||||
<item row="4" column="0">
|
|
||||||
<widget class="QLabel" name="screenLabel">
|
|
||||||
<property name="text">
|
|
||||||
<string>Screen:</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="1">
|
|
||||||
<widget class="QComboBox" name="antiAliasingComboBox">
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string>0</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string>2</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string>4</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string>8</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string>16</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QCheckBox" name="vSyncCheckBox">
|
<widget class="QCheckBox" name="windowBorderCheckBox">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Vertical Sync</string>
|
<string>Window Border</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<widget class="QComboBox" name="vSyncComboBox">
|
||||||
|
<property name="currentIndex">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Disabled</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Enabled</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Adaptive</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QCheckBox" name="framerateLimitCheckBox">
|
||||||
|
<property name="text">
|
||||||
|
<string>Framerate Limit:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QDoubleSpinBox" name="framerateLimitSpinBox">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="suffix">
|
||||||
|
<string> FPS</string>
|
||||||
|
</property>
|
||||||
|
<property name="decimals">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
<property name="minimum">
|
||||||
|
<double>1.000000000000000</double>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<double>1000.000000000000000</double>
|
||||||
|
</property>
|
||||||
|
<property name="singleStep">
|
||||||
|
<double>15.000000000000000</double>
|
||||||
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<double>300.000000000000000</double>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
|
@ -265,15 +285,7 @@
|
||||||
</attribute>
|
</attribute>
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QWidget" name="ShadowWidget">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
|
||||||
<horstretch>1</horstretch>
|
|
||||||
<verstretch>1</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<layout class="QGridLayout" name="shadowsLayout" columnstretch="0,0">
|
<layout class="QGridLayout" name="shadowsLayout" columnstretch="0,0">
|
||||||
|
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QCheckBox" name="playerShadowsCheckBox">
|
<widget class="QCheckBox" name="playerShadowsCheckBox">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
|
@ -327,14 +339,14 @@
|
||||||
<item row="5" column="0">
|
<item row="5" column="0">
|
||||||
<widget class="QLabel" name="shadowComputeSceneBoundsLabel">
|
<widget class="QLabel" name="shadowComputeSceneBoundsLabel">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string><html><head/><body><p>Type of "compute scene bounds" computation method to be used. Bounds (default) for good balance between performance and shadow quality, primitives for better looking shadows or none for no computation.</p></body></html></string>
|
<string><html><head/><body><p>Type of "compute scene bounds" computation method to be used. Bounds (default) for good balance between performance and shadow quality, primitives for better looking shadows or none for no computation.</p></body></html></string>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Shadow Near Far Computation Method:</string>
|
<string>Shadow Near Far Computation Method:</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="5" column="1">compute scene bounds
|
<item row="5" column="1">
|
||||||
<widget class="QComboBox" name="shadowComputeSceneBoundsComboBox">
|
<widget class="QComboBox" name="shadowComputeSceneBoundsComboBox">
|
||||||
<item>
|
<item>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
|
@ -438,19 +450,17 @@
|
||||||
<number>2</number>
|
<number>2</number>
|
||||||
</property>
|
</property>
|
||||||
<property name="minimum">
|
<property name="minimum">
|
||||||
<double>0</double>
|
<double>0.000000000000000</double>
|
||||||
</property>
|
</property>
|
||||||
<property name="maximum">
|
<property name="maximum">
|
||||||
<double>1</double>
|
<double>1.000000000000000</double>
|
||||||
</property>
|
</property>
|
||||||
<property name="value">
|
<property name="value">
|
||||||
<double>0.90</double>
|
<double>0.900000000000000</double>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue