diff --git a/src/hardware/hw_defs.h b/src/hardware/hw_defs.h index 8214be85b..cd02be906 100644 --- a/src/hardware/hw_defs.h +++ b/src/hardware/hw_defs.h @@ -157,6 +157,7 @@ enum SHADER_MODEL, SHADER_MODEL_LIGHTING, SHADER_WATER, + SHADER_BRIGHTMAP_WATER, SHADER_FOG, SHADER_SKY, SHADER_PALETTE_POSTPROCESS, diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c index 7c4c5055f..d4bf70eae 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -545,6 +545,8 @@ static void HWR_RenderPlane(subsector_t *subsector, extrasubsector_t *xsub, bool shader = SHADER_FOG; else if (PolyFlags & PF_Ripple) shader = SHADER_WATER; + else if ((PolyFlags & PF_Ripple) && levelflat != NULL && levelflat->type == LEVELFLAT_TEXTURE && R_GetTextureBrightmap(levelflat->texture_id) && HWR_ShouldUsePaletteRendering()) + shader = SHADER_BRIGHTMAP_WATER; else if (levelflat != NULL && levelflat->type == LEVELFLAT_TEXTURE && R_GetTextureBrightmap(levelflat->texture_id) && HWR_ShouldUsePaletteRendering()) shader = SHADER_BRIGHTMAP_FLOOR; else diff --git a/src/hardware/hw_shaders.c b/src/hardware/hw_shaders.c index f9f0ad66d..51e07c12f 100644 --- a/src/hardware/hw_shaders.c +++ b/src/hardware/hw_shaders.c @@ -48,6 +48,9 @@ static struct { // Water shader {GLSL_DEFAULT_VERTEX_SHADER, GLSL_WATER_FRAGMENT_SHADER}, + // Brightmap Water shader + {GLSL_DEFAULT_VERTEX_SHADER, GLSL_WATER_FRAGMENT_SHADER_NOPAL}, + // Fog shader {GLSL_DEFAULT_VERTEX_SHADER, GLSL_FOG_FRAGMENT_SHADER}, @@ -443,6 +446,7 @@ customshaderxlat_t shaderxlat[] = {"Sprite", SHADER_SPRITE}, {"Model", SHADER_MODEL}, {"WaterRipple", SHADER_WATER}, + {"BrightmapWaterRipple", SHADER_BRIGHTMAP_WATER}, {"Fog", SHADER_FOG}, {"Sky", SHADER_SKY}, {"PalettePostprocess", SHADER_PALETTE_POSTPROCESS}, diff --git a/src/hardware/hw_shaders.h b/src/hardware/hw_shaders.h index 61c46de29..245359fad 100644 --- a/src/hardware/hw_shaders.h +++ b/src/hardware/hw_shaders.h @@ -352,6 +352,36 @@ "gl_FragColor = final_color;\n" \ "}\n" \ "#endif\0" + +#define GLSL_WATER_FRAGMENT_SHADER_NOPAL \ + GLSL_FLOOR_FUDGES \ + "const float freq = 0.025;\n" \ + "const float amp = 0.025;\n" \ + "const float speed = 2.0;\n" \ + "const float pi = 3.14159;\n" \ + "uniform sampler2D tex;\n" \ + "uniform sampler2D brightmap;\n" \ + "uniform vec4 poly_color;\n" \ + "uniform vec4 tint_color;\n" \ + "uniform vec4 fade_color;\n" \ + "uniform float lighting;\n" \ + "uniform float fade_start;\n" \ + "uniform float fade_end;\n" \ + "uniform float leveltime;\n" \ + GLSL_DOOM_COLORMAP \ + GLSL_DOOM_LIGHT_EQUATION \ + "void main(void) {\n" \ + GLSL_WATER_TEXEL \ + "vec4 base_color = texel * poly_color;\n" \ + "vec4 final_color = base_color;\n" \ + "float brightmap_mix = floor(texture2D(brightmap, gl_TexCoord[0].st).r);\n" \ + "float light_gain = (255.0 - lighting) * brightmap_mix;\n" \ + "float final_lighting = lighting + light_gain;\n" \ + GLSL_SOFTWARE_TINT_EQUATION \ + GLSL_SOFTWARE_FADE_EQUATION \ + "final_color.a = texel.a * poly_color.a;\n" \ + "gl_FragColor = final_color;\n" \ + "}\n" \ // // Fog block shader