mirror of
https://github.com/OpenMW/openmw.git
synced 2025-01-30 02:15:34 +00:00
Add support for non-adaptive VSync (feature 7129)
This commit is contained in:
parent
83d15ef786
commit
be488649c3
16 changed files with 480 additions and 392 deletions
|
@ -56,6 +56,7 @@
|
|||
Feature #7058: Implement TestModels (T3D) console command
|
||||
Feature #7087: Block resolution change in the Windowed Fullscreen mode
|
||||
Feature #7125: Remembering console commands between sessions
|
||||
Feature #7129: Add support for non-adaptive VSync
|
||||
Feature #7130: Ability to set MyGUI logging verbosity
|
||||
Feature #7148: Optimize string literal lookup in mwscript
|
||||
Feature #7194: Ori to show texture paths
|
||||
|
|
|
@ -93,13 +93,18 @@ bool Launcher::GraphicsPage::loadSettings()
|
|||
return false;
|
||||
|
||||
// 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"));
|
||||
if (windowMode > static_cast<size_t>(Settings::WindowMode::Windowed))
|
||||
windowMode = 0;
|
||||
windowModeComboBox->setCurrentIndex(windowMode);
|
||||
slotFullScreenChanged(windowMode);
|
||||
|
||||
if (Settings::Manager::getBool("window border", "Video"))
|
||||
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
|
||||
// user settings file (which by definition should only contain settings the user has touched)
|
||||
bool cVSync = vSyncCheckBox->checkState();
|
||||
if (cVSync != Settings::Manager::getBool("vsync", "Video"))
|
||||
Settings::Manager::setBool("vsync", "Video", cVSync);
|
||||
int cVSync = vSyncComboBox->currentIndex();
|
||||
if (cVSync != Settings::Manager::getInt("vsync mode", "Video"))
|
||||
Settings::Manager::setInt("vsync mode", "Video", cVSync);
|
||||
|
||||
int cWindowMode = windowModeComboBox->currentIndex();
|
||||
if (cWindowMode != Settings::Manager::getInt("window mode", "Video"))
|
||||
|
|
|
@ -473,7 +473,7 @@ void OMW::Engine::createWindow()
|
|||
Settings::WindowMode windowMode
|
||||
= static_cast<Settings::WindowMode>(Settings::Manager::getInt("window mode", "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"));
|
||||
|
||||
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->windowDecoration = !(SDL_GetWindowFlags(mWindow) & SDL_WINDOW_BORDERLESS);
|
||||
traits->screenNum = SDL_GetWindowDisplayIndex(mWindow);
|
||||
traits->vsync = vsync;
|
||||
traits->vsync = 0;
|
||||
traits->inheritedWindowData = new SDLUtil::GraphicsWindowSDL2::WindowData(mWindow);
|
||||
|
||||
graphicsWindow = new SDLUtil::GraphicsWindowSDL2(traits);
|
||||
graphicsWindow = new SDLUtil::GraphicsWindowSDL2(traits, vsync);
|
||||
if (!graphicsWindow->valid())
|
||||
throw std::runtime_error("Failed to create GraphicsContext");
|
||||
|
||||
|
|
|
@ -256,6 +256,7 @@ namespace MWGui
|
|||
getWidget(mOkButton, "OkButton");
|
||||
getWidget(mResolutionList, "ResolutionList");
|
||||
getWidget(mWindowModeList, "WindowModeList");
|
||||
getWidget(mVSyncModeList, "VSyncModeList");
|
||||
getWidget(mWindowBorderButton, "WindowBorderButton");
|
||||
getWidget(mTextureFilteringButton, "TextureFilteringButton");
|
||||
getWidget(mControlsBox, "ControlsBox");
|
||||
|
@ -315,6 +316,7 @@ namespace MWGui
|
|||
mMaxLights->eventComboChangePosition += MyGUI::newDelegate(this, &SettingsWindow::onMaxLightsChanged);
|
||||
|
||||
mWindowModeList->eventComboChangePosition += MyGUI::newDelegate(this, &SettingsWindow::onWindowModeChanged);
|
||||
mVSyncModeList->eventComboChangePosition += MyGUI::newDelegate(this, &SettingsWindow::onVSyncModeChanged);
|
||||
|
||||
mKeyboardSwitch->eventMouseButtonClick += MyGUI::newDelegate(this, &SettingsWindow::onKeyboardSwitchClicked);
|
||||
mControllerSwitch->eventMouseButtonClick
|
||||
|
@ -562,6 +564,16 @@ namespace MWGui
|
|||
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)
|
||||
{
|
||||
if (pos == MyGUI::ITEM_NONE)
|
||||
|
@ -870,6 +882,16 @@ namespace MWGui
|
|||
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()
|
||||
{
|
||||
const int h = MWBase::Environment::get().getWindowManager()->getFontHeight() + 2;
|
||||
|
@ -1033,6 +1055,7 @@ namespace MWGui
|
|||
updateControlsBox();
|
||||
updateLightSettings();
|
||||
updateWindowModeSettings();
|
||||
updateVSyncModeSettings();
|
||||
resetScrollbars();
|
||||
renderScriptSettings();
|
||||
MWBase::Environment::get().getWindowManager()->setKeyFocusWidget(mOkButton);
|
||||
|
|
|
@ -18,6 +18,8 @@ namespace MWGui
|
|||
|
||||
void updateLightSettings();
|
||||
|
||||
void updateVSyncModeSettings();
|
||||
|
||||
void updateWindowModeSettings();
|
||||
|
||||
void onResChange(int, int) override;
|
||||
|
@ -29,6 +31,7 @@ namespace MWGui
|
|||
// graphics
|
||||
MyGUI::ListBox* mResolutionList;
|
||||
MyGUI::ComboBox* mWindowModeList;
|
||||
MyGUI::ComboBox* mVSyncModeList;
|
||||
MyGUI::Button* mWindowBorderButton;
|
||||
MyGUI::ComboBox* mTextureFilteringButton;
|
||||
|
||||
|
@ -83,6 +86,7 @@ namespace MWGui
|
|||
void onLanguageChanged(size_t langPriority, 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 onInputTabMouseWheel(MyGUI::Widget* _sender, int _rel);
|
||||
|
|
|
@ -1148,8 +1148,8 @@ namespace MWGui
|
|||
|| setting.second == "window mode" || setting.second == "window border"))
|
||||
changeRes = true;
|
||||
|
||||
else if (setting.first == "Video" && setting.second == "vsync")
|
||||
mVideoWrapper->setSyncToVBlank(Settings::Manager::getBool("vsync", "Video"));
|
||||
else if (setting.first == "Video" && setting.second == "vsync mode")
|
||||
mVideoWrapper->setSyncToVBlank(Settings::Manager::getInt("vsync mode", "Video"));
|
||||
else if (setting.first == "Video" && (setting.second == "gamma" || setting.second == "contrast"))
|
||||
mVideoWrapper->setGammaContrast(
|
||||
Settings::Manager::getFloat("gamma", "Video"), Settings::Manager::getFloat("contrast", "Video"));
|
||||
|
|
|
@ -14,7 +14,7 @@ namespace SDLUtil
|
|||
close(true);
|
||||
}
|
||||
|
||||
GraphicsWindowSDL2::GraphicsWindowSDL2(osg::GraphicsContext::Traits* traits)
|
||||
GraphicsWindowSDL2::GraphicsWindowSDL2(osg::GraphicsContext::Traits* traits, int vsync)
|
||||
: mWindow(nullptr)
|
||||
, mContext(nullptr)
|
||||
, mValid(false)
|
||||
|
@ -23,6 +23,13 @@ namespace SDLUtil
|
|||
{
|
||||
_traits = traits;
|
||||
|
||||
if (vsync == 2)
|
||||
mVSyncMode = VSyncMode::Adaptive;
|
||||
else if (vsync == 1)
|
||||
mVSyncMode = VSyncMode::Enabled;
|
||||
else
|
||||
mVSyncMode = VSyncMode::Disabled;
|
||||
|
||||
init();
|
||||
if (GraphicsWindowSDL2::valid())
|
||||
{
|
||||
|
@ -134,7 +141,7 @@ namespace SDLUtil
|
|||
openmw_gl4es_init(mWindow);
|
||||
#endif
|
||||
|
||||
setSwapInterval(_traits->vsync);
|
||||
setSwapInterval(mVSyncMode);
|
||||
|
||||
// Update traits with what we've actually been given
|
||||
// Use intermediate to avoid signed/unsigned mismatch
|
||||
|
@ -233,29 +240,41 @@ namespace SDLUtil
|
|||
}
|
||||
|
||||
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_GLContext oldCtx = SDL_GL_GetCurrentContext();
|
||||
|
||||
SDL_GL_MakeCurrent(mWindow, mContext);
|
||||
|
||||
setSwapInterval(on);
|
||||
setSwapInterval(mode);
|
||||
|
||||
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)
|
||||
{
|
||||
OSG_NOTICE << "Adaptive vsync unsupported" << std::endl;
|
||||
if (SDL_GL_SetSwapInterval(1) == -1)
|
||||
{
|
||||
OSG_NOTICE << "Vertical synchronization unsupported, disabling" << std::endl;
|
||||
SDL_GL_SetSwapInterval(0);
|
||||
}
|
||||
setSwapInterval(VSyncMode::Enabled);
|
||||
}
|
||||
}
|
||||
else if (mode == VSyncMode::Enabled)
|
||||
{
|
||||
if (SDL_GL_SetSwapInterval(1) == -1)
|
||||
{
|
||||
OSG_NOTICE << "Vertical synchronization unsupported, disabling" << std::endl;
|
||||
setSwapInterval(VSyncMode::Disabled);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
|
@ -7,6 +7,12 @@
|
|||
|
||||
namespace SDLUtil
|
||||
{
|
||||
enum VSyncMode
|
||||
{
|
||||
Disabled = 0,
|
||||
Enabled = 1,
|
||||
Adaptive = 2
|
||||
};
|
||||
|
||||
class GraphicsWindowSDL2 : public osgViewer::GraphicsWindow
|
||||
{
|
||||
|
@ -16,13 +22,14 @@ namespace SDLUtil
|
|||
bool mValid;
|
||||
bool mRealized;
|
||||
bool mOwnsWindow;
|
||||
VSyncMode mVSyncMode;
|
||||
|
||||
void init();
|
||||
|
||||
virtual ~GraphicsWindowSDL2();
|
||||
|
||||
public:
|
||||
GraphicsWindowSDL2(osg::GraphicsContext::Traits* traits);
|
||||
GraphicsWindowSDL2(osg::GraphicsContext::Traits* traits, int vsync);
|
||||
|
||||
bool isSameKindAs(const Object* object) const override
|
||||
{
|
||||
|
@ -53,6 +60,7 @@ namespace SDLUtil
|
|||
|
||||
/** Set sync-to-vblank. */
|
||||
void setSyncToVBlank(bool on) override;
|
||||
void setSyncToVBlank(VSyncMode mode);
|
||||
|
||||
/** Set Window decoration.*/
|
||||
bool setWindowDecorationImplementation(bool flag) override;
|
||||
|
@ -87,7 +95,7 @@ namespace SDLUtil
|
|||
};
|
||||
|
||||
private:
|
||||
void setSwapInterval(bool enable);
|
||||
void setSwapInterval(VSyncMode mode);
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#include "sdlvideowrapper.hpp"
|
||||
|
||||
#include <components/debug/debuglog.hpp>
|
||||
#include <components/sdlutil/sdlgraphicswindow.hpp>
|
||||
#include <components/settings/settings.hpp>
|
||||
|
||||
#include <osgViewer/Viewer>
|
||||
|
@ -29,15 +30,24 @@ namespace SDLUtil
|
|||
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;
|
||||
mViewer->getWindows(windows);
|
||||
mViewer->stopThreading();
|
||||
for (osgViewer::Viewer::Windows::iterator it = windows.begin(); it != windows.end(); ++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();
|
||||
}
|
||||
|
|
|
@ -26,7 +26,7 @@ namespace SDLUtil
|
|||
VideoWrapper(SDL_Window* window, osg::ref_ptr<osgViewer::Viewer> viewer);
|
||||
~VideoWrapper();
|
||||
|
||||
void setSyncToVBlank(bool sync);
|
||||
void setSyncToVBlank(int mode);
|
||||
|
||||
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
|
||||
due to a technical limitation that may be addressed in a future version of OpenMW.
|
||||
|
||||
vsync
|
||||
-----
|
||||
vsync mode
|
||||
----------
|
||||
|
||||
:Type: boolean
|
||||
:Range: True/False
|
||||
:Default: False
|
||||
:Type: integer
|
||||
:Range: 0, 1, 2
|
||||
:Default: 0
|
||||
|
||||
This setting determines whether frame draws are synchronized with the vertical refresh rate of your monitor.
|
||||
Enabling this setting can reduce screen tearing,
|
||||
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
|
||||
(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.
|
||||
It can also be changed by toggling the Vertical Sync check box in the Graphics tab of the OpenMW Launcher.
|
||||
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 combo box in the Graphics tab of the OpenMW Launcher.
|
||||
|
||||
framerate limit
|
||||
---------------
|
||||
|
|
|
@ -77,6 +77,7 @@ TextureFilteringTrilinear: "Trilinear"
|
|||
ToggleHUD: "Toggle HUD"
|
||||
TogglePostProcessorHUD: "Toggle Post Processor HUD"
|
||||
VSync: "VSync"
|
||||
VSyncAdaptive: "Adaptive"
|
||||
Water: "Water"
|
||||
WaterShader: "Water shader"
|
||||
WaterShaderTextureQuality: "Texture quality"
|
||||
|
|
|
@ -77,6 +77,7 @@ TextureFilteringTrilinear: "Трилинейная"
|
|||
ToggleHUD: "Переключить HUD"
|
||||
TogglePostProcessorHUD: "Меню настроек постобработки"
|
||||
VSync: "Вертикальная синхронизация"
|
||||
VSyncAdaptive: "Адаптивная"
|
||||
Water: "Вода"
|
||||
WaterShader: "Шейдер воды"
|
||||
WaterShaderTextureQuality: "Качество текстуры воды"
|
||||
|
|
|
@ -275,28 +275,28 @@
|
|||
<Property key="ButtonAutoWidth" value="true"/>
|
||||
<Widget type="TabItem">
|
||||
<Property key="Caption" value=" #{sVideo} "/>
|
||||
<Widget type="ListBox" skin="MW_List" position="0 4 185 225" align="Left Top" name="ResolutionList"/>
|
||||
<Widget type="TextBox" skin="NormalText" position="197 4 185 18" align="Left Top">
|
||||
<Widget type="ListBox" skin="MW_List" position="0 4 195 225" align="Left Top" name="ResolutionList"/>
|
||||
<Widget type="TextBox" skin="NormalText" position="207 4 250 18" align="Left Top">
|
||||
<Property key="Caption" value="#{OMWEngine:WindowMode}"/>
|
||||
</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">
|
||||
<Property key="AddItem" value="#{OMWEngine:WindowModeFullscreen}"/>
|
||||
<Property key="AddItem" value="#{OMWEngine:WindowModeWindowedFullscreen}"/>
|
||||
<Property key="AddItem" value="#{OMWEngine:WindowModeWindowed}"/>
|
||||
</Widget>
|
||||
</Widget>
|
||||
<Widget type="HBox" position="197 58 400 28">
|
||||
<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}"/>
|
||||
<Widget type="TextBox" skin="NormalText" position="207 54 250 18" align="Left Top">
|
||||
<Property key="Caption" value="#{OMWEngine:VSync}"/>
|
||||
</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 type="HBox" position="207 108 300 28">
|
||||
<Widget type="AutoSizedButton" skin="MW_Button" position="0 0 24 24" align="Left Top" name="WindowBorderButton">
|
||||
<UserString key="SettingCategory" value="Video"/>
|
||||
<UserString key="SettingName" value="window border"/>
|
||||
|
@ -306,7 +306,7 @@
|
|||
<Property key="Caption" value="#{OMWEngine:WindowBorder}"/>
|
||||
</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">
|
||||
<UserString key="SettingCategory" value="Post Processing"/>
|
||||
<UserString key="SettingName" value="enabled"/>
|
||||
|
@ -320,11 +320,11 @@
|
|||
</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}"/>
|
||||
</Widget>
|
||||
<Widget type="AutoSizedTextBox" skin="SandText" position="197 196 300 32" align="Left Top" name="WindowModeHint">
|
||||
<Property key="Caption" value="#{SettingsMenu:WindowModeHint}"/>
|
||||
<Widget type="AutoSizedTextBox" skin="SandText" position="207 216 300 32" align="Left Top" name="WindowModeHint">
|
||||
<Property key="Caption" value="#{OMWEngine:WindowModeHint}"/>
|
||||
</Widget>
|
||||
|
||||
<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).
|
||||
antialiasing = 0
|
||||
|
||||
# Enable vertical syncing to reduce tearing defects.
|
||||
vsync = false
|
||||
# Vertical syncing to reduce tearing defects.
|
||||
# 0 = Off
|
||||
# 1 = On
|
||||
# 2 = Adaptive
|
||||
vsync mode = 0
|
||||
|
||||
# Maximum frames per second. 0.0 is unlimited, or >0.0 to limit.
|
||||
framerate limit = 300
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>650</width>
|
||||
<height>340</height>
|
||||
<height>358</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
|
@ -22,190 +22,210 @@
|
|||
</attribute>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QWidget" name="DisplayWidget">
|
||||
<layout class="QGridLayout" name="gridLayout_4" columnstretch="1,0">
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="antiAliasingLabel">
|
||||
<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>Anti-aliasing:</string>
|
||||
<string>0</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<widget class="QCheckBox" name="framerateLimitCheckBox">
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Framerate Limit:</string>
|
||||
<string>2</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<layout class="QGridLayout" name="resolutionLayout">
|
||||
<item row="1" column="2">
|
||||
<layout class="QHBoxLayout" name="customResolutionLayout" stretch="1,0,1">
|
||||
<item>
|
||||
<widget class="QSpinBox" name="customWidthSpinBox">
|
||||
<property name="minimum">
|
||||
<number>800</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="multiplyLabel">
|
||||
<property name="text">
|
||||
<string> x </string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSpinBox" name="customHeightSpinBox">
|
||||
<property name="minimum">
|
||||
<number>600</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QRadioButton" name="customRadioButton">
|
||||
<property name="text">
|
||||
<string>Custom:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QRadioButton" name="standardRadioButton">
|
||||
<property name="text">
|
||||
<string>Standard:</string>
|
||||
</property>
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QComboBox" name="resolutionComboBox"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="6" 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">
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Window Border</string>
|
||||
<string>4</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QComboBox" name="windowModeComboBox">
|
||||
<property name="currentIndex">
|
||||
<number>0</number>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>8</string>
|
||||
</property>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Fullscreen</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Windowed Fullscreen</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Windowed</string>
|
||||
</property>
|
||||
</item>
|
||||
</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">
|
||||
<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">
|
||||
<property name="text">
|
||||
<string>Anti-aliasing:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="1">
|
||||
<layout class="QGridLayout" name="resolutionLayout">
|
||||
<item row="1" column="2">
|
||||
<layout class="QHBoxLayout" name="customResolutionLayout" stretch="1,0,1">
|
||||
<item>
|
||||
<widget class="QSpinBox" name="customWidthSpinBox">
|
||||
<property name="minimum">
|
||||
<number>800</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="multiplyLabel">
|
||||
<property name="text">
|
||||
<string> x </string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSpinBox" name="customHeightSpinBox">
|
||||
<property name="minimum">
|
||||
<number>600</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QRadioButton" name="customRadioButton">
|
||||
<property name="text">
|
||||
<string>Custom:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="windowModeLabel">
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QRadioButton" name="standardRadioButton">
|
||||
<property name="text">
|
||||
<string>Standard:</string>
|
||||
</property>
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QComboBox" name="resolutionComboBox"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QComboBox" name="windowModeComboBox">
|
||||
<property name="currentIndex">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Window Mode:</string>
|
||||
<string>Fullscreen</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<widget class="QLabel" name="resolutionLabel">
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Resolution:</string>
|
||||
<string>Windowed Fullscreen</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">
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Screen:</string>
|
||||
<string>Windowed</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">
|
||||
<widget class="QCheckBox" name="vSyncCheckBox">
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" 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="vSyncComboBox">
|
||||
<property name="currentIndex">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Vertical Sync</string>
|
||||
<string>Disabled</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</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>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
|
@ -265,192 +285,182 @@
|
|||
</attribute>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<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">
|
||||
|
||||
<item row="0" column="0">
|
||||
<widget class="QCheckBox" name="playerShadowsCheckBox">
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>Enable shadows exclusively for the player character. May have a very minor performance impact.</p></body></html></string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="shadowsLayout" columnstretch="0,0">
|
||||
<item row="0" column="0">
|
||||
<widget class="QCheckBox" name="playerShadowsCheckBox">
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>Enable shadows exclusively for the player character. May have a very minor performance impact.</p></body></html></string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Enable Player Shadows</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QCheckBox" name="actorShadowsCheckBox">
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>Enable shadows for NPCs and creatures besides the player character. May have a minor performance impact.</p></body></html></string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Enable Actor Shadows</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QCheckBox" name="objectShadowsCheckBox">
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>Enable shadows for primarily inanimate objects. May have a significant performance impact.</p></body></html></string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Enable Object Shadows</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QCheckBox" name="terrainShadowsCheckBox">
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>Enable shadows for the terrain including distant terrain. May have a significant performance and shadow quality impact.</p></body></html></string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Enable Terrain Shadows</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QCheckBox" name="indoorShadowsCheckBox">
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>Due to limitations with Morrowind's data, only actors can cast shadows indoors, which some might feel is distracting.</p><p>Has no effect if actor/player shadows are not enabled.</p></body></html></string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Enable Indoor Shadows</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<widget class="QLabel" name="shadowComputeSceneBoundsLabel">
|
||||
<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>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Shadow Near Far Computation Method:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<widget class="QComboBox" name="shadowComputeSceneBoundsComboBox">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Enable Player Shadows</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QCheckBox" name="actorShadowsCheckBox">
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>Enable shadows for NPCs and creatures besides the player character. May have a minor performance impact.</p></body></html></string>
|
||||
<string>bounds</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Enable Actor Shadows</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QCheckBox" name="objectShadowsCheckBox">
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>Enable shadows for primarily inanimate objects. May have a significant performance impact.</p></body></html></string>
|
||||
<string>primitives</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Enable Object Shadows</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QCheckBox" name="terrainShadowsCheckBox">
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>Enable shadows for the terrain including distant terrain. May have a significant performance and shadow quality impact.</p></body></html></string>
|
||||
<string>none</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<widget class="QLabel" name="shadowResolutionLabel">
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>The resolution of each individual shadow map. Increasing it significantly improves shadow quality but may have a minor performance impact.</p></body></html></string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Shadow Map Resolution:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="1">
|
||||
<widget class="QComboBox" name="shadowResolutionComboBox">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Enable Terrain Shadows</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QCheckBox" name="indoorShadowsCheckBox">
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>Due to limitations with Morrowind's data, only actors can cast shadows indoors, which some might feel is distracting.</p><p>Has no effect if actor/player shadows are not enabled.</p></body></html></string>
|
||||
<string>512</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Enable Indoor Shadows</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<widget class="QLabel" name="shadowComputeSceneBoundsLabel">
|
||||
<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>1024</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Shadow Near Far Computation Method:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="1">compute scene bounds
|
||||
<widget class="QComboBox" name="shadowComputeSceneBoundsComboBox">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>bounds</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>primitives</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>none</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<widget class="QLabel" name="shadowResolutionLabel">
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>The resolution of each individual shadow map. Increasing it significantly improves shadow quality but may have a minor performance impact.</p></body></html></string>
|
||||
<string>2048</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Shadow Map Resolution:</string>
|
||||
<string>4096</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="1">
|
||||
<widget class="QComboBox" name="shadowResolutionComboBox">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>512</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>1024</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>2048</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>4096</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="0">
|
||||
<widget class="QCheckBox" name="shadowDistanceCheckBox">
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>The distance from the camera at which shadows completely disappear.</p></body></html></string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Shadow Distance Limit:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="1">
|
||||
<widget class="QSpinBox" name="shadowDistanceSpinBox">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>64 game units is 1 real life yard or about 0.9 m</p></body></html></string>
|
||||
</property>
|
||||
<property name="suffix">
|
||||
<string> unit(s)</string>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<number>512</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>81920</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>8192</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="0">
|
||||
<widget class="QLabel" name="fadeStartLabel">
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>The fraction of the limit above at which shadows begin to gradually fade away.</p></body></html></string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Fade Start Multiplier:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="1">
|
||||
<widget class="QDoubleSpinBox" name="fadeStartSpinBox">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="decimals">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<double>0</double>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<double>1</double>
|
||||
</property>
|
||||
<property name="value">
|
||||
<double>0.90</double>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="0">
|
||||
<widget class="QCheckBox" name="shadowDistanceCheckBox">
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>The distance from the camera at which shadows completely disappear.</p></body></html></string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Shadow Distance Limit:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="1">
|
||||
<widget class="QSpinBox" name="shadowDistanceSpinBox">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>64 game units is 1 real life yard or about 0.9 m</p></body></html></string>
|
||||
</property>
|
||||
<property name="suffix">
|
||||
<string> unit(s)</string>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<number>512</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>81920</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>8192</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="0">
|
||||
<widget class="QLabel" name="fadeStartLabel">
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>The fraction of the limit above at which shadows begin to gradually fade away.</p></body></html></string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Fade Start Multiplier:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="1">
|
||||
<widget class="QDoubleSpinBox" name="fadeStartSpinBox">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="decimals">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<double>0.000000000000000</double>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<double>1.000000000000000</double>
|
||||
</property>
|
||||
<property name="value">
|
||||
<double>0.900000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
|
|
Loading…
Reference in a new issue