Skip to content

Commit 8f276c4

Browse files
committed
renderer: implement high precision rendering framebuffers
1 parent affbe51 commit 8f276c4

File tree

3 files changed

+17
-1
lines changed

3 files changed

+17
-1
lines changed

src/engine/renderer/tr_image.cpp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2412,13 +2412,22 @@ static void R_CreateCurrentRenderImage()
24122412

24132413
imageParams_t imageParams = {};
24142414
imageParams.bits = IF_NOPICMIP;
2415+
2416+
if ( glConfig2.textureFloatAvailable && r_highPrecisionRendering.Get() )
2417+
{
2418+
imageParams.bits |= IF_RGBA16;
2419+
}
2420+
24152421
imageParams.filterType = filterType_t::FT_NEAREST;
24162422
imageParams.wrapType = wrapTypeEnum_t::WT_CLAMP;
24172423

24182424
tr.currentRenderImage[0] = R_CreateImage( "_currentRender[0]", nullptr, width, height, 1, imageParams );
24192425
tr.currentRenderImage[1] = R_CreateImage( "_currentRender[1]", nullptr, width, height, 1, imageParams );
24202426

2421-
imageParams.bits |= IF_PACKED_DEPTH24_STENCIL8;
2427+
imageParams = {};
2428+
imageParams.bits = IF_NOPICMIP | IF_PACKED_DEPTH24_STENCIL8;
2429+
imageParams.filterType = filterType_t::FT_NEAREST;
2430+
imageParams.wrapType = wrapTypeEnum_t::WT_CLAMP;
24222431

24232432
tr.currentDepthImage = R_CreateImage( "_currentDepth", nullptr, width, height, 1, imageParams );
24242433
}

src/engine/renderer/tr_init.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,9 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
176176
cvar_t *r_halfLambertLighting;
177177
cvar_t *r_rimLighting;
178178
cvar_t *r_rimExponent;
179+
180+
Cvar::Cvar<bool> r_highPrecisionRendering("r_highPrecisionRendering", "use high precision frame buffers for rendering and blending", Cvar::NONE, true);
181+
179182
cvar_t *r_gamma;
180183
cvar_t *r_lockpvs;
181184
cvar_t *r_noportals;
@@ -1241,6 +1244,8 @@ ScreenshotCmd screenshotPNGRegistration("screenshotPNG", ssFormat_t::SSF_PNG, "p
12411244
r_rimExponent = Cvar_Get( "r_rimExponent", "3", CVAR_CHEAT | CVAR_LATCH );
12421245
AssertCvarRange( r_rimExponent, 0.5, 8.0, false );
12431246

1247+
Cvar::Latch( r_highPrecisionRendering );
1248+
12441249
r_drawBuffer = Cvar_Get( "r_drawBuffer", "GL_BACK", CVAR_CHEAT );
12451250
r_lockpvs = Cvar_Get( "r_lockpvs", "0", CVAR_CHEAT );
12461251
r_noportals = Cvar_Get( "r_noportals", "0", CVAR_CHEAT );

src/engine/renderer/tr_local.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3015,6 +3015,8 @@ enum class deluxeMode_t { NONE, GRID, MAP };
30153015
extern cvar_t *r_rimLighting;
30163016
extern cvar_t *r_rimExponent;
30173017

3018+
extern Cvar::Cvar<bool> r_highPrecisionRendering;
3019+
30183020
extern cvar_t *r_logFile; // number of frames to emit GL logs
30193021

30203022
extern cvar_t *r_clear; // force screen clear every frame

0 commit comments

Comments
 (0)