Make render scale configurable in ui for vulkan

This commit is contained in:
Benau 2022-08-28 09:27:08 +08:00
parent 8f061c6367
commit e6f8dcfdb0
4 changed files with 36 additions and 5 deletions

View File

@ -337,6 +337,7 @@ namespace GE
destroySwapChainRelated(false/*handle_surface*/);
createSwapChainRelated(false/*handle_surface*/);
}
void updateRenderScale(float value);
uint32_t getGraphicsFamily() const { return m_graphics_family; }
unsigned getGraphicsQueueCount() const
{ return m_graphics_queue_count; }

View File

@ -2413,6 +2413,25 @@ bool GEVulkanDriver::setRenderTarget(video::ITexture* texture,
return true;
} // setRenderTarget
// ----------------------------------------------------------------------------
void GEVulkanDriver::updateRenderScale(float value)
{
if (getGEConfig()->m_render_scale == value)
return;
waitIdle();
setDisableWaitIdle(true);
destroySwapChainRelated(false/*handle_surface*/);
getGEConfig()->m_render_scale = value;
createSwapChainRelated(false/*handle_surface*/);
for (auto& dc : static_cast<GEVulkanSceneManager*>(
m_irrlicht_device->getSceneManager())->getDrawCalls())
dc.second = std::unique_ptr<GEVulkanDrawCall>(new GEVulkanDrawCall);
GEVulkanSkyBoxRenderer::destroy();
GEVulkan2dRenderer::destroy();
GEVulkan2dRenderer::init(this);
setDisableWaitIdle(false);
} // updateRenderScale
}
namespace irr

View File

@ -414,6 +414,8 @@ void IrrDriver::initDevice()
#ifndef SERVER_ONLY
GE::getGEConfig()->m_texture_compression =
UserConfigParams::m_texture_compression;
GE::getGEConfig()->m_render_scale =
UserConfigParams::m_scale_rtts_factor;
#endif
}
else

View File

@ -464,7 +464,10 @@ void OptionsScreenVideo::init()
gfx->setActive(!in_game && CVS->isGLSL());
getWidget<ButtonWidget>("custom")->setActive(!in_game || !CVS->isGLSL());
if (getWidget<SpinnerWidget>("scale_rtts")->isActivated())
getWidget<SpinnerWidget>("scale_rtts")->setActive(!in_game);
{
getWidget<SpinnerWidget>("scale_rtts")->setActive(!in_game ||
GE::getDriver()->getDriverType() == video::EDT_VULKAN);
}
#endif
#if defined(MOBILE_STK) || defined(__SWITCH__)
@ -555,7 +558,8 @@ void OptionsScreenVideo::updateGfxSlider()
setActive(UserConfigParams::m_dynamic_lights && CVS->isGLSL());
// Same with Render resolution slider
getWidget<GUIEngine::SpinnerWidget>("scale_rtts")->
setActive(UserConfigParams::m_dynamic_lights && CVS->isGLSL());
setActive((UserConfigParams::m_dynamic_lights && CVS->isGLSL()) ||
GE::getDriver()->getDriverType() == video::EDT_VULKAN);
updateTooltip();
#endif
@ -791,9 +795,11 @@ void OptionsScreenVideo::eventCallback(Widget* widget, const std::string& name,
getWidget<GUIEngine::SpinnerWidget>("blur_level")->setActive(level >= 2);
// Same with Render resolution slider
#ifndef SERVER_ONLY
getWidget<GUIEngine::SpinnerWidget>("scale_rtts")->
setActive(UserConfigParams::m_dynamic_lights);
setActive(UserConfigParams::m_dynamic_lights ||
GE::getDriver()->getDriverType() == video::EDT_VULKAN);
#endif
UserConfigParams::m_animated_characters = m_presets[level].animatedCharacters;
UserConfigParams::m_particles_effects = m_presets[level].particles;
setImageQuality(m_presets[level].image_quality);
@ -844,7 +850,10 @@ void OptionsScreenVideo::eventCallback(Widget* widget, const std::string& name,
assert(level < (int)m_scale_rtts_custom_presets.size());
UserConfigParams::m_scale_rtts_factor = m_scale_rtts_custom_presets[level].value;
#ifndef SERVER_ONLY
if (GE::getVKDriver())
GE::getVKDriver()->updateRenderScale(UserConfigParams::m_scale_rtts_factor);
#endif
updateScaleRTTsSlider();
}
else if (name == "rememberWinpos")