Skip to content

Commit a9b3fdc

Browse files
committed
renderer: implement dithering
1 parent 237eb7b commit a9b3fdc

File tree

4 files changed

+26
-1
lines changed

4 files changed

+26
-1
lines changed

src/engine/renderer/gl_shader.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -799,6 +799,10 @@ static std::string GenEngineConstants() {
799799
AddDefine( str, "r_highPrecisionRendering", 1 );
800800
}
801801

802+
if ( r_dithering.Get() ) {
803+
AddDefine( str, "r_dithering", 1 );
804+
}
805+
802806
return str;
803807
}
804808

@@ -3066,4 +3070,4 @@ GlobalUBOProxy::GlobalUBOProxy() :
30663070
u_Tonemap( this ),
30673071
u_TonemapParms( this ),
30683072
u_Exposure( this ) {
3069-
}
3073+
}

src/engine/renderer/glsl_source/cameraEffects_fp.glsl

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,22 @@ void main()
9292
}
9393
#endif
9494

95+
#if defined(r_dithering)
96+
const float bayer[ 16 ] = {
97+
0.0f, 8.0f, 2.0f, 10.0f,
98+
12.0f, 4.0f, 14.0f, 6.0f,
99+
3.0f, 11.0f, 1.0f, 9.0f,
100+
15.0f, 7.0f, 13.0f, 5.0f
101+
};
102+
103+
float dither = bayer[
104+
int( mod( gl_FragCoord.x, 4.0 ) ) +
105+
int( mod( gl_FragCoord.y, 4.0 ) ) * 4
106+
] / 16.0;
107+
108+
color.rgb += vec3( ( dither - 0.50 ) / 255.0 );
109+
#endif
110+
95111
color.rgb = clamp( color.rgb, vec3( 0.0f ), vec3( 1.0f ) );
96112

97113
if ( u_SRGB )

src/engine/renderer/tr_init.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,9 @@ Cvar::Cvar<int> r_rendererAPI( "r_rendererAPI", "Renderer API: 0: OpenGL, 1: Vul
206206
"r_toneMappingDarkAreaPointLDR", "Convert to this brightness at dark area cut-off",
207207
Cvar::NONE, 0.268f, 0.0f, 1.0f );
208208

209+
Cvar::Cvar<bool> r_dithering(
210+
"r_dithering", "Use dithering", Cvar::NONE, true );
211+
209212
cvar_t *r_lockpvs;
210213
cvar_t *r_noportals;
211214

@@ -1267,6 +1270,7 @@ ScreenshotCmd screenshotPNGRegistration("screenshotPNG", ssFormat_t::SSF_PNG, "p
12671270

12681271
Cvar::Latch( r_highPrecisionRendering );
12691272
Cvar::Latch( r_accurateSRGB );
1273+
Cvar::Latch( r_dithering );
12701274

12711275
r_drawBuffer = Cvar_Get( "r_drawBuffer", "GL_BACK", CVAR_CHEAT );
12721276
r_lockpvs = Cvar_Get( "r_lockpvs", "0", CVAR_CHEAT );

src/engine/renderer/tr_local.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2716,6 +2716,7 @@ enum
27162716

27172717
extern Cvar::Cvar<bool> r_highPrecisionRendering;
27182718
extern Cvar::Cvar<bool> r_accurateSRGB;
2719+
extern Cvar::Cvar<bool> r_dithering;
27192720

27202721
extern Cvar::Range<Cvar::Cvar<int>> r_shadows;
27212722

0 commit comments

Comments
 (0)