Allow to set lower RTTs resolution.
It allows to increase performance on devices that have only one available resolution. It also allows to draw GUI elements in full resolution while rendering the scene with slightly lower resolution, which gives you few additional FPS. Note that particles don't work as expected yet with this feature.
This commit is contained in:
@@ -491,6 +491,10 @@ namespace UserConfigParams
|
||||
PARAM_PREFIX BoolUserConfigParam m_old_driver_popup
|
||||
PARAM_DEFAULT(BoolUserConfigParam(true, "old_driver_popup",
|
||||
&m_video_group, "Determines if popup message about too old drivers should be displayed."));
|
||||
PARAM_PREFIX FloatUserConfigParam m_scale_rtts_factor
|
||||
PARAM_DEFAULT(FloatUserConfigParam(1.0f, "m_scale_rtts_factor",
|
||||
&m_video_group, "Allows to increase performance by setting lower RTTs "
|
||||
"resolution. Value should be smaller or equal to 1.0"));
|
||||
|
||||
// ---- Debug - not saved to config file
|
||||
/** If gamepad debugging is enabled. */
|
||||
|
||||
@@ -216,8 +216,10 @@ GPUTimer &IrrDriver::getGPUTimer(unsigned i)
|
||||
void IrrDriver::computeMatrixesAndCameras(scene::ICameraSceneNode *const camnode,
|
||||
size_t width, size_t height)
|
||||
{
|
||||
m_current_screen_size = core::vector2df(float(width), float(height));
|
||||
m_shadow_matrices->computeMatrixesAndCameras(camnode, width, height);
|
||||
float w = width * UserConfigParams::m_scale_rtts_factor;
|
||||
float h = height * UserConfigParams::m_scale_rtts_factor;
|
||||
m_current_screen_size = core::vector2df(w, h);
|
||||
m_shadow_matrices->computeMatrixesAndCameras(camnode, w, h);
|
||||
} // computeMatrixesAndCameras
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
@@ -285,6 +285,7 @@ void IrrDriver::renderGLSL(float dt)
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||
if (CVS->isDefferedEnabled())
|
||||
camera->activate();
|
||||
glViewport(viewport.UpperLeftCorner.X, viewport.UpperLeftCorner.Y, viewport.LowerRightCorner.X, viewport.LowerRightCorner.Y);
|
||||
m_post_processing->renderPassThrough(fbo->getRTT()[0], viewport.LowerRightCorner.X - viewport.UpperLeftCorner.X, viewport.LowerRightCorner.Y - viewport.UpperLeftCorner.Y);
|
||||
glDisable(GL_FRAMEBUFFER_SRGB);
|
||||
}
|
||||
|
||||
@@ -58,13 +58,15 @@ RTT::RTT(size_t width, size_t height)
|
||||
m_RH_FBO = NULL;
|
||||
using namespace video;
|
||||
using namespace core;
|
||||
|
||||
const dimension2du res(width, height);
|
||||
|
||||
dimension2du res(width * UserConfigParams::m_scale_rtts_factor,
|
||||
height * UserConfigParams::m_scale_rtts_factor);
|
||||
|
||||
const dimension2du half = res/2;
|
||||
const dimension2du quarter = res/4;
|
||||
const dimension2du eighth = res/8;
|
||||
|
||||
const u16 shadowside = 1024;
|
||||
const u16 shadowside = 1024 * UserConfigParams::m_scale_rtts_factor;
|
||||
const dimension2du shadowsize0(shadowside, shadowside);
|
||||
const dimension2du shadowsize1(shadowside / 2, shadowside / 2);
|
||||
const dimension2du shadowsize2(shadowside / 4, shadowside / 4);
|
||||
@@ -118,7 +120,6 @@ RTT::RTT(size_t width, size_t height)
|
||||
|
||||
std::vector<GLuint> somevector;
|
||||
somevector.push_back(RenderTargetTextures[RTT_SSAO]);
|
||||
|
||||
FrameBuffers.push_back(new FrameBuffer(somevector, res.Width, res.Height));
|
||||
somevector.clear();
|
||||
somevector.push_back(RenderTargetTextures[RTT_NORMAL_AND_DEPTH]);
|
||||
@@ -158,12 +159,12 @@ RTT::RTT(size_t width, size_t height)
|
||||
somevector.push_back(RenderTargetTextures[RTT_LINEAR_DEPTH]);
|
||||
FrameBuffers.push_back(new FrameBuffer(somevector, res.Width, res.Height));
|
||||
somevector.clear();
|
||||
|
||||
somevector.push_back(RenderTargetTextures[RTT_HALF1]);
|
||||
FrameBuffers.push_back(new FrameBuffer(somevector, half.Width, half.Height));
|
||||
somevector.clear();
|
||||
somevector.push_back(RenderTargetTextures[RTT_HALF1_R]);
|
||||
FrameBuffers.push_back(new FrameBuffer(somevector, half.Width, half.Height));
|
||||
|
||||
somevector.clear();
|
||||
somevector.push_back(RenderTargetTextures[RTT_HALF2]);
|
||||
FrameBuffers.push_back(new FrameBuffer(somevector, half.Width, half.Height));
|
||||
@@ -186,42 +187,42 @@ RTT::RTT(size_t width, size_t height)
|
||||
somevector.push_back(RenderTargetTextures[RTT_DISPLACE]);
|
||||
FrameBuffers.push_back(new FrameBuffer(somevector, DepthStencilTexture, res.Width, res.Height));
|
||||
somevector.clear();
|
||||
|
||||
somevector.push_back(RenderTargetTextures[RTT_BLOOM_1024]);
|
||||
FrameBuffers.push_back(new FrameBuffer(somevector, 1024, 1024));
|
||||
FrameBuffers.push_back(new FrameBuffer(somevector, shadowsize0.Width, shadowsize0.Height));
|
||||
somevector.clear();
|
||||
somevector.push_back(RenderTargetTextures[RTT_SCALAR_1024]);
|
||||
FrameBuffers.push_back(new FrameBuffer(somevector, 1024, 1024));
|
||||
FrameBuffers.push_back(new FrameBuffer(somevector, shadowsize0.Width, shadowsize0.Height));
|
||||
somevector.clear();
|
||||
|
||||
somevector.push_back(RenderTargetTextures[RTT_BLOOM_512]);
|
||||
FrameBuffers.push_back(new FrameBuffer(somevector, 512, 512));
|
||||
FrameBuffers.push_back(new FrameBuffer(somevector, shadowsize1.Width, shadowsize1.Height));
|
||||
somevector.clear();
|
||||
somevector.push_back(RenderTargetTextures[RTT_TMP_512]);
|
||||
FrameBuffers.push_back(new FrameBuffer(somevector, 512, 512));
|
||||
FrameBuffers.push_back(new FrameBuffer(somevector, shadowsize1.Width, shadowsize1.Height));
|
||||
somevector.clear();
|
||||
somevector.push_back(RenderTargetTextures[RTT_LENS_512]);
|
||||
FrameBuffers.push_back(new FrameBuffer(somevector, 512, 512));
|
||||
|
||||
|
||||
FrameBuffers.push_back(new FrameBuffer(somevector, shadowsize1.Width, shadowsize1.Height));
|
||||
somevector.clear();
|
||||
|
||||
somevector.push_back(RenderTargetTextures[RTT_BLOOM_256]);
|
||||
FrameBuffers.push_back(new FrameBuffer(somevector, 256, 256));
|
||||
FrameBuffers.push_back(new FrameBuffer(somevector, shadowsize2.Width, shadowsize2.Height));
|
||||
somevector.clear();
|
||||
somevector.push_back(RenderTargetTextures[RTT_TMP_256]);
|
||||
FrameBuffers.push_back(new FrameBuffer(somevector, 256, 256));
|
||||
FrameBuffers.push_back(new FrameBuffer(somevector, shadowsize2.Width, shadowsize2.Height));
|
||||
somevector.clear();
|
||||
somevector.push_back(RenderTargetTextures[RTT_LENS_256]);
|
||||
FrameBuffers.push_back(new FrameBuffer(somevector, 256, 256));
|
||||
|
||||
|
||||
FrameBuffers.push_back(new FrameBuffer(somevector, shadowsize2.Width, shadowsize2.Height));
|
||||
somevector.clear();
|
||||
|
||||
somevector.push_back(RenderTargetTextures[RTT_BLOOM_128]);
|
||||
FrameBuffers.push_back(new FrameBuffer(somevector, 128, 128));
|
||||
FrameBuffers.push_back(new FrameBuffer(somevector, shadowsize3.Width, shadowsize3.Height));
|
||||
somevector.clear();
|
||||
somevector.push_back(RenderTargetTextures[RTT_TMP_128]);
|
||||
FrameBuffers.push_back(new FrameBuffer(somevector, 128, 128));
|
||||
FrameBuffers.push_back(new FrameBuffer(somevector, shadowsize3.Width, shadowsize3.Height));
|
||||
somevector.clear();
|
||||
somevector.push_back(RenderTargetTextures[RTT_LENS_128]);
|
||||
FrameBuffers.push_back(new FrameBuffer(somevector, 128, 128));
|
||||
FrameBuffers.push_back(new FrameBuffer(somevector, shadowsize3.Width, shadowsize3.Height));
|
||||
|
||||
if (CVS->isShadowEnabled())
|
||||
{
|
||||
|
||||
@@ -1005,9 +1005,9 @@ EventPropagation InputManager::input(const SEvent& event)
|
||||
if (cam)
|
||||
{
|
||||
// Center of the screen
|
||||
core::vector2df screen_size = irr_driver->getCurrentScreenSize();
|
||||
int mid_x = (int) screen_size.X / 2;
|
||||
int mid_y = (int) screen_size.Y / 2;
|
||||
core::dimension2du screen_size = irr_driver->getActualScreenSize();
|
||||
int mid_x = (int) screen_size.Width / 2;
|
||||
int mid_y = (int) screen_size.Height / 2;
|
||||
// Relative mouse movement
|
||||
int diff_x = event.MouseInput.X - m_mouse_val_x;
|
||||
int diff_y = event.MouseInput.Y - m_mouse_val_y;
|
||||
|
||||
Reference in New Issue
Block a user