From 2808f3306f042165ecc127ebc94c7ea23d8f36de Mon Sep 17 00:00:00 2001 From: meag Date: Fri, 16 Jul 2021 11:07:52 +0100 Subject: [PATCH] ALIASMODELS: Add gl_smoothmodels back in (glsl only) Not going to bother with immediate mode --- glc_aliasmodel.c | 9 +++++++-- glm_aliasmodel.c | 9 +++++++-- glsl/draw_aliasmodel.fragment.glsl | 4 ++++ glsl/draw_aliasmodel.vertex.glsl | 4 ++++ glsl/glc/glc_aliasmodel_std.fragment.glsl | 4 ++++ glsl/glc/glc_aliasmodel_std.vertex.glsl | 12 ++++++++---- r_rmain.c | 2 ++ release-notes-latest.md | 1 + 8 files changed, 37 insertions(+), 8 deletions(-) diff --git a/glc_aliasmodel.c b/glc_aliasmodel.c index a55825046..bbd84ac6f 100644 --- a/glc_aliasmodel.c +++ b/glc_aliasmodel.c @@ -56,6 +56,7 @@ extern float r_avertexnormals[NUMVERTEXNORMALS][3]; extern cvar_t r_lerpframes; extern cvar_t gl_outline; extern cvar_t gl_program_aliasmodels; +extern cvar_t gl_smoothmodels; extern float r_framelerp; @@ -245,13 +246,14 @@ static void GLC_AliasModelLightPoint(float color[4], entity_t* ent, vbo_model_ve #define DRAWFLAGS_TEXTURED 2 #define DRAWFLAGS_FULLBRIGHT 4 #define DRAWFLAGS_MUZZLEHACK 8 -#define DRAWFLAGS_MAXIMUM (DRAWFLAGS_CAUSTICS | DRAWFLAGS_TEXTURED | DRAWFLAGS_FULLBRIGHT | DRAWFLAGS_MUZZLEHACK) +#define DRAWFLAGS_FLATSHADING 16 +#define DRAWFLAGS_MAXIMUM (DRAWFLAGS_CAUSTICS | DRAWFLAGS_TEXTURED | DRAWFLAGS_FULLBRIGHT | DRAWFLAGS_MUZZLEHACK | DRAWFLAGS_FLATSHADING) int GLC_AliasModelSubProgramIndex(qbool textured, qbool fullbright, qbool caustics, qbool muzzlehack) { return (textured ? DRAWFLAGS_TEXTURED : 0) | - (fullbright ? DRAWFLAGS_FULLBRIGHT : 0) | + (fullbright ? DRAWFLAGS_FULLBRIGHT : (gl_smoothmodels.integer ? 0 : DRAWFLAGS_FLATSHADING)) | (caustics ? DRAWFLAGS_CAUSTICS : 0) | (muzzlehack ? DRAWFLAGS_MUZZLEHACK : 0); } @@ -275,6 +277,9 @@ qbool GLC_AliasModelStandardCompileSpecific(int subprogram_index) if (subprogram_index & DRAWFLAGS_MUZZLEHACK) { strlcat(included_definitions, "#define EZQ_ALIASMODEL_MUZZLEHACK\n", sizeof(included_definitions)); } + if (subprogram_index & DRAWFLAGS_FLATSHADING) { + strlcat(included_definitions, "#define EZQ_ALIASMODEL_FLATSHADING\n", sizeof(included_definitions)); + } R_ProgramCompileWithInclude(r_program_aliasmodel_std_glc, included_definitions); R_ProgramUniform1i(r_program_uniform_aliasmodel_std_glc_texSampler, 0); diff --git a/glm_aliasmodel.c b/glm_aliasmodel.c index fbd394125..7fe470bfc 100644 --- a/glm_aliasmodel.c +++ b/glm_aliasmodel.c @@ -100,6 +100,7 @@ extern float r_framelerp; #define DRAW_CAUSTIC_TEXTURES 2 #define DRAW_REVERSED_DEPTH 4 #define DRAW_LERP_MUZZLEHACK 8 +#define DRAW_FLAT_SHADING 16 static uniform_block_aliasmodels_t aliasdata; static int cached_mode; @@ -118,12 +119,13 @@ static int TEXTURE_UNIT_CAUSTICS; qbool GLM_CompileAliasModelProgram(void) { - extern cvar_t r_lerpmuzzlehack; + extern cvar_t r_lerpmuzzlehack, gl_smoothmodels; unsigned int drawAlias_desiredOptions = (r_refdef2.drawCaustics ? DRAW_CAUSTIC_TEXTURES : 0) | (glConfig.reversed_depth ? DRAW_REVERSED_DEPTH : 0) | - (r_lerpmuzzlehack.integer ? DRAW_LERP_MUZZLEHACK : 0); + (r_lerpmuzzlehack.integer ? DRAW_LERP_MUZZLEHACK : 0) | + (gl_smoothmodels.integer ? 0 : DRAW_FLAT_SHADING); if (R_ProgramRecompileNeeded(r_program_aliasmodel, drawAlias_desiredOptions)) { static char included_definitions[1024]; @@ -152,6 +154,9 @@ qbool GLM_CompileAliasModelProgram(void) if (drawAlias_desiredOptions & DRAW_LERP_MUZZLEHACK) { strlcat(included_definitions, "#define EZQ_ALIASMODEL_MUZZLEHACK\n", sizeof(included_definitions)); } + if (drawAlias_desiredOptions & DRAW_FLAT_SHADING) { + strlcat(included_definitions, "#define EZQ_ALIASMODEL_FLATSHADING\n", sizeof(included_definitions)); + } // Initialise program for drawing image R_ProgramCompileWithInclude(r_program_aliasmodel, included_definitions); diff --git a/glsl/draw_aliasmodel.fragment.glsl b/glsl/draw_aliasmodel.fragment.glsl index 37ef9353e..eed43686a 100644 --- a/glsl/draw_aliasmodel.fragment.glsl +++ b/glsl/draw_aliasmodel.fragment.glsl @@ -11,7 +11,11 @@ layout(binding=SAMPLER_MATERIAL_TEXTURE_START) uniform sampler2D samplers[SAMPLE in vec2 fsTextureCoord; in vec2 fsAltTextureCoord; +#ifdef EZQ_ALIASMODEL_FLATSHADING +flat in vec4 fsBaseColor; +#else in vec4 fsBaseColor; +#endif flat in int fsFlags; flat in int fsTextureEnabled; flat in int fsMaterialSampler; diff --git a/glsl/draw_aliasmodel.vertex.glsl b/glsl/draw_aliasmodel.vertex.glsl index c67223cb2..0fc90e57c 100644 --- a/glsl/draw_aliasmodel.vertex.glsl +++ b/glsl/draw_aliasmodel.vertex.glsl @@ -17,7 +17,11 @@ layout(std140, binding=EZQ_GL_BINDINGPOINT_ALIASMODEL_DRAWDATA) buffer AliasMode out vec2 fsTextureCoord; out vec2 fsAltTextureCoord; +#ifdef EZQ_ALIASMODEL_FLATSHADING +flat out vec4 fsBaseColor; +#else out vec4 fsBaseColor; +#endif flat out int fsFlags; flat out int fsTextureEnabled; flat out int fsMaterialSampler; diff --git a/glsl/glc/glc_aliasmodel_std.fragment.glsl b/glsl/glc/glc_aliasmodel_std.fragment.glsl index ea9b0fadf..e33541973 100644 --- a/glsl/glc/glc_aliasmodel_std.fragment.glsl +++ b/glsl/glc/glc_aliasmodel_std.fragment.glsl @@ -17,7 +17,11 @@ uniform float fsCausticEffects; varying vec2 fsTextureCoord; #endif +#ifdef EZQ_ALIASMODEL_FLATSHADING +varying flat vec4 fsBaseColor; +#else varying vec4 fsBaseColor; +#endif void main() { diff --git a/glsl/glc/glc_aliasmodel_std.vertex.glsl b/glsl/glc/glc_aliasmodel_std.vertex.glsl index 233c654f4..02fc225d6 100644 --- a/glsl/glc/glc_aliasmodel_std.vertex.glsl +++ b/glsl/glc/glc_aliasmodel_std.vertex.glsl @@ -7,26 +7,30 @@ attribute float flags; #ifdef BACKFACE_PASS // for outline -uniform float lerpFraction; uniform float outlineScale; -varying vec4 fsBaseColor; #else #if defined(TEXTURING_ENABLED) || defined(DRAW_CAUSTIC_TEXTURES) varying vec2 fsTextureCoord; #endif -varying vec4 fsBaseColor; #ifndef FULLBRIGHT_MODELS uniform vec3 angleVector; // normalized uniform float shadelight; // divided by 256 in C uniform float ambientlight; // divided by 256 in C #endif -uniform float lerpFraction; // 0 to 1 #endif // BACKFACE_PASS (outlining) +uniform float lerpFraction; // 0 to 1 +#ifdef EZQ_ALIASMODEL_FLATSHADING +varying flat vec4 fsBaseColor; +#else +varying vec4 fsBaseColor; +#endif + + #define AM_VERTEX_NOLERP 1 void main() diff --git a/r_rmain.c b/r_rmain.c index 220796493..4615cfd0c 100644 --- a/r_rmain.c +++ b/r_rmain.c @@ -210,6 +210,7 @@ cvar_t gl_simpleitems_size = {"gl_simpleitems_size", "16"}; cvar_t gl_simpleitems_orientation = {"gl_simpleitems_orientation", "2"}; cvar_t gl_modulate = {"gl_modulate", "1"}; cvar_t gl_outline = {"gl_outline", "0"}; +cvar_t gl_smoothmodels = {"gl_smoothmodels", "1"}; cvar_t r_fx_geometry = {"r_fx_geometry", "0"}; cvar_t gl_vbo_clientmemory = {"gl_vbo_clientmemory", "0", CVAR_LATCH_GFX }; @@ -612,6 +613,7 @@ void R_Init(void) Cvar_Register(&gl_modulate); Cvar_Register(&gl_outline); + Cvar_Register(&gl_smoothmodels); Cvar_Register(&r_fx_geometry); diff --git a/release-notes-latest.md b/release-notes-latest.md index 7de6e50d7..305bd7660 100644 --- a/release-notes-latest.md +++ b/release-notes-latest.md @@ -5,6 +5,7 @@ Leaving these here as bugs between dev versions of 3.6 aren't in the release not - On startup (after `autoexec.cfg` executed), a `vid_restart`/`s_restart` will be issued if any latched variables were changed (#458) - Fixed bug causing off-by-one error when drawing rectangle outlines (3.5 bug, reported by Matrix, #536) - Detection of AMD drivers .13399 wasn't being working in classic renderer (#416) +- Added `/gl_smoothmodels` back in, (requested by Repast via [quakeworld.nu](https://www.quakeworld.nu/forum/topic/7508/why-is-the-command-glsmoothmodels-r)) ### Changes from alpha7=>alpha8 (Feb 9th => July 13th)