From 0284d635d2fd6693e64a47436992d3681453ed72 Mon Sep 17 00:00:00 2001 From: Flyinghead Date: Mon, 16 Jul 2018 16:28:48 +0200 Subject: [PATCH] Upscale rendered-to textures Increase the size of RTT textures by a given integer factor. Defaults to 1. This gives much better quality textures, particularly visible when used fullscreen for transition or pause screens. --- core/nullDC.cpp | 1 + core/rend/gles/gles.cpp | 7 +++++++ core/rend/gles/gltex.cpp | 7 +++++++ core/types.h | 1 + 4 files changed, 16 insertions(+) diff --git a/core/nullDC.cpp b/core/nullDC.cpp index c1bbeb748..9b3dec0f5 100755 --- a/core/nullDC.cpp +++ b/core/nullDC.cpp @@ -313,6 +313,7 @@ void LoadSettings() settings.rend.WideScreen = cfgLoadInt("config","rend.WideScreen",0); settings.rend.ShowFPS = cfgLoadInt("config", "rend.ShowFPS", 0); settings.rend.RenderToTextureBuffer = cfgLoadInt("config", "rend.RenderToTextureBuffer", 0); + settings.rend.RenderToTextureUpscale = cfgLoadInt("config", "rend.RenderToTextureUpscale", 1); settings.rend.TranslucentPolygonDepthMask = cfgLoadInt("config", "rend.TranslucentPolygonDepthMask", 0); settings.rend.ModifierVolumes = cfgLoadInt("config","rend.ModifierVolumes",1); settings.rend.Clipping = cfgLoadInt("config","rend.Clipping",1); diff --git a/core/rend/gles/gles.cpp b/core/rend/gles/gles.cpp index 8ee55d670..e113365f1 100755 --- a/core/rend/gles/gles.cpp +++ b/core/rend/gles/gles.cpp @@ -1754,6 +1754,13 @@ bool RenderFrame() width *= dc2s_scale_h; height *= dc2s_scale_h; } + else if (settings.rend.RenderToTextureUpscale > 1 && !settings.rend.RenderToTextureBuffer) + { + min_x *= settings.rend.RenderToTextureUpscale; + min_y *= settings.rend.RenderToTextureUpscale; + width *= settings.rend.RenderToTextureUpscale; + height *= settings.rend.RenderToTextureUpscale; + } glScissor(min_x, min_y, width, height); glcache.Enable(GL_SCISSOR_TEST); diff --git a/core/rend/gles/gltex.cpp b/core/rend/gles/gltex.cpp index b3767eea2..91556c08f 100644 --- a/core/rend/gles/gltex.cpp +++ b/core/rend/gles/gltex.cpp @@ -434,6 +434,13 @@ void BindRTT(u32 addy, u32 fbw, u32 fbh, u32 channels, u32 fmt) while (fbw2 < fbw) fbw2 *= 2; + if (settings.rend.RenderToTextureUpscale > 1 && !settings.rend.RenderToTextureBuffer) + { + fbw *= settings.rend.RenderToTextureUpscale; + fbh *= settings.rend.RenderToTextureUpscale; + fbw2 *= settings.rend.RenderToTextureUpscale; + fbh2 *= settings.rend.RenderToTextureUpscale; + } // Get the currently bound frame buffer object. On most platforms this just gives 0. //glGetIntegerv(GL_FRAMEBUFFER_BINDING, &m_i32OriginalFbo); diff --git a/core/types.h b/core/types.h index 0c62273a3..c81c7c21d 100644 --- a/core/types.h +++ b/core/types.h @@ -617,6 +617,7 @@ struct settings_t bool WideScreen; bool ShowFPS; bool RenderToTextureBuffer; + int RenderToTextureUpscale; bool TranslucentPolygonDepthMask; bool ModifierVolumes; bool Clipping;