diff --git a/platform/base_glsl.pk3dir/glsl/lightmapped.glsl b/platform/base_glsl.pk3dir/glsl/lightmapped.glsl index a6db75b3..432955de 100644 --- a/platform/base_glsl.pk3dir/glsl/lightmapped.glsl +++ b/platform/base_glsl.pk3dir/glsl/lightmapped.glsl @@ -21,8 +21,8 @@ !!cvardf r_glsl_pcf !!samps =FAKESHADOWS shadowmap -!!cvardf dev_skipdiffuse -!!cvardf dev_skipnormal +!!cvardf r_skipDiffuse +!!cvardf r_skipNormal #include "sys/defs.h" @@ -80,6 +80,7 @@ varying vec2 lm1, lm2, lm3; return lightmaps; } +#if r_skipNormal==0 vec3 lightmap_fragment(vec3 normal_f) { #ifndef DELUXE @@ -99,29 +100,28 @@ varying vec2 lm1, lm2, lm3; return lightmaps; #endif } +#endif void main (void) { vec4 diffuse_f; - vec3 normal_f; - normal_f = normalize(texture2D(s_t1, tex_c).rgb - 0.5); - - if (float(dev_skipdiffuse) == 1.0) { - diffuse_f = vec4(1.0,1.0,1.0,1.0); - } else { - diffuse_f = texture2D(s_t0, tex_c); - } + #if r_skipDiffuse==0 + diffuse_f = texture2D(s_t0, tex_c); + #else + diffuse_f = vec4(1.0,1.0,1.0,1.0); + #endif #ifdef FAKESHADOWS diffuse_f.rgb *= ShadowmapFilter(s_shadowmap, vtexprojcoord); #endif - if (float(dev_skipnormal) == 1.0) { - diffuse_f.rgb *= lightmap_fragment(); - } else { - diffuse_f.rgb *= lightmap_fragment(normal_f); - } + #if r_skipNormal==0 + vec3 normal_f = normalize(texture2D(s_t1, tex_c).rgb - 0.5); + diffuse_f.rgb *= lightmap_fragment(normal_f); + #else + diffuse_f.rgb *= lightmap_fragment(); + #endif gl_FragColor = fog4(diffuse_f); } diff --git a/platform/base_glsl.pk3dir/glsl/lightmapped_alphatest.glsl b/platform/base_glsl.pk3dir/glsl/lightmapped_alphatest.glsl index 3e1ecfcc..6e8535b8 100644 --- a/platform/base_glsl.pk3dir/glsl/lightmapped_alphatest.glsl +++ b/platform/base_glsl.pk3dir/glsl/lightmapped_alphatest.glsl @@ -15,7 +15,8 @@ !!cvardf r_glsl_pcf !!samps =FAKESHADOWS shadowmap -!!cvardf dev_skipnormal +!!cvardf r_skipDiffuse +!!cvardf r_skipNormal #include "sys/defs.h" @@ -72,26 +73,42 @@ varying vec2 lm1, lm2, lm3; return lightmaps; } - vec3 lightmap_fragment (vec3 normal_f) +#if r_skipNormal==0 + vec3 lightmap_fragment(vec3 normal_f) { +#ifndef DELUXE + return lightmap_fragment(); +#else vec3 lightmaps; -#ifdef LIGHTSTYLED + #if defined(LIGHTSTYLED) lightmaps = texture2D(s_lightmap0, lm0).rgb * e_lmscale[0].rgb * dot(normal_f, (texture2D(s_deluxemap0, lm0).rgb - 0.5) * 2.0); lightmaps += texture2D(s_lightmap1, lm1).rgb * e_lmscale[1].rgb * dot(normal_f, (texture2D(s_deluxemap1, lm1).rgb - 0.5) * 2.0); lightmaps += texture2D(s_lightmap2, lm2).rgb * e_lmscale[2].rgb * dot(normal_f, (texture2D(s_deluxemap2, lm2).rgb - 0.5) * 2.0); lightmaps += texture2D(s_lightmap3, lm3).rgb * e_lmscale[3].rgb * dot(normal_f, (texture2D(s_deluxemap3, lm3).rgb - 0.5) * 2.0); -#else + #else lightmaps = texture2D(s_lightmap, lm0).rgb * e_lmscale.rgb * dot(normal_f, (texture2D(s_deluxemap, lm0).rgb - 0.5) * 2.0); -#endif + #endif + return lightmaps; +#endif } +#endif void main (void) { + #if r_skipDiffuse==0 vec4 diffuse_f = texture2D(s_diffuse, tex_c); + #else + vec4 diffuse_f = vec4(1.0,1.0,1.0,1.0); + #endif + + #if r_skipNormal==1 vec3 normal_f = normalize(texture2D(s_normalmap, tex_c).rgb - 0.5); - + #else + #define normal_f vec3(0.0,0.0,1.0) + #endif + if (diffuse_f.a < 0.5) { discard; } @@ -100,11 +117,11 @@ varying vec2 lm1, lm2, lm3; diffuse_f.rgb *= ShadowmapFilter(s_shadowmap, vtexprojcoord); #endif - if (float(dev_skipnormal) == 1.0) { - diffuse_f.rgb *= lightmap_fragment(); - } else { - diffuse_f.rgb *= lightmap_fragment(normal_f); - } + #if r_skipNormal==1 + diffuse_f.rgb *= lightmap_fragment(); + #else + diffuse_f.rgb *= lightmap_fragment(normal_f); + #endif gl_FragColor = fog4(diffuse_f); } diff --git a/platform/base_glsl.pk3dir/glsl/lightmapped_reflect.glsl b/platform/base_glsl.pk3dir/glsl/lightmapped_reflect.glsl index 5e04fdaf..4ec68a18 100644 --- a/platform/base_glsl.pk3dir/glsl/lightmapped_reflect.glsl +++ b/platform/base_glsl.pk3dir/glsl/lightmapped_reflect.glsl @@ -16,6 +16,8 @@ !!cvardf r_glsl_pcf !!samps =FAKESHADOWS shadowmap +!!cvardf r_skipSpecular + #include "sys/defs.h" varying vec2 tex_c; @@ -80,33 +82,44 @@ varying vec2 lm1, lm2, lm3; return lightmaps; } - vec3 lightmap_fragment (vec3 normal_f) +#if r_skipNormal==0 + vec3 lightmap_fragment(vec3 normal_f) { +#ifndef DELUXE + return lightmap_fragment(); +#else vec3 lightmaps; -#ifdef LIGHTSTYLED + #if defined(LIGHTSTYLED) lightmaps = texture2D(s_lightmap0, lm0).rgb * e_lmscale[0].rgb * dot(normal_f, (texture2D(s_deluxemap0, lm0).rgb - 0.5) * 2.0); lightmaps += texture2D(s_lightmap1, lm1).rgb * e_lmscale[1].rgb * dot(normal_f, (texture2D(s_deluxemap1, lm1).rgb - 0.5) * 2.0); lightmaps += texture2D(s_lightmap2, lm2).rgb * e_lmscale[2].rgb * dot(normal_f, (texture2D(s_deluxemap2, lm2).rgb - 0.5) * 2.0); lightmaps += texture2D(s_lightmap3, lm3).rgb * e_lmscale[3].rgb * dot(normal_f, (texture2D(s_deluxemap3, lm3).rgb - 0.5) * 2.0); -#else + #else lightmaps = texture2D(s_lightmap, lm0).rgb * e_lmscale.rgb * dot(normal_f, (texture2D(s_deluxemap, lm0).rgb - 0.5) * 2.0); -#endif + #endif + return lightmaps; +#endif } +#endif void main (void) { vec2 stc; vec4 diffuse_f = texture2D(s_diffuse, tex_c); - vec3 normal_f = normalize(texture2D(s_normalmap, tex_c).rgb - 0.5); - /* modulate the final pixel with the lightmap value */ - if (float(dev_skipnormal) == 1.0) { - diffuse_f.rgb *= lightmap_fragment(); - } else { - diffuse_f.rgb *= lightmap_fragment(normal_f); - } + #if r_skipNormal==1 + vec3 normal_f = normalize(texture2D(s_normalmap, tex_c).rgb - 0.5); + #else + #define normal_f vec3(0.0,0.0,0.5) + #endif + + #if r_skipNormal==1 + diffuse_f.rgb *= lightmap_fragment(); + #else + diffuse_f.rgb *= lightmap_fragment(normal_f); + #endif /* map the reflection buffer onto the surface */ stc = (1.0 + (tf.xy / tf.w)) * 0.5; @@ -115,9 +128,9 @@ varying vec2 lm1, lm2, lm3; diffuse_f.rgb = mix(texture2D(s_reflection, stc).rgb, diffuse_f.rgb, diffuse_f.a); diffuse_f.a = 1.0; - #ifdef FAKESHADOWS + #ifdef FAKESHADOWS diffuse_f.rgb *= ShadowmapFilter(s_shadowmap, vtexprojcoord); - #endif + #endif gl_FragColor = fog4(diffuse_f); } diff --git a/platform/base_glsl.pk3dir/glsl/lightmapped_reflectcube.glsl b/platform/base_glsl.pk3dir/glsl/lightmapped_reflectcube.glsl index 94ad04f5..4a7e869e 100644 --- a/platform/base_glsl.pk3dir/glsl/lightmapped_reflectcube.glsl +++ b/platform/base_glsl.pk3dir/glsl/lightmapped_reflectcube.glsl @@ -16,7 +16,9 @@ !!cvardf r_glsl_pcf !!samps =FAKESHADOWS shadowmap -!!cvardf dev_skipnormal +!!cvardf r_skipDiffuse +!!cvardf r_skipNormal +!!cvardf r_skipSpecular #include "sys/defs.h" @@ -84,46 +86,69 @@ varying vec2 lm1, lm2, lm3; return lightmaps; } - vec3 lightmap_fragment (vec3 normal_f) +#if r_skipNormal==0 + vec3 lightmap_fragment(vec3 normal_f) { +#ifndef DELUXE + return lightmap_fragment(); +#else vec3 lightmaps; -#ifdef LIGHTSTYLED + #if defined(LIGHTSTYLED) lightmaps = texture2D(s_lightmap0, lm0).rgb * e_lmscale[0].rgb * dot(normal_f, (texture2D(s_deluxemap0, lm0).rgb - 0.5) * 2.0); lightmaps += texture2D(s_lightmap1, lm1).rgb * e_lmscale[1].rgb * dot(normal_f, (texture2D(s_deluxemap1, lm1).rgb - 0.5) * 2.0); lightmaps += texture2D(s_lightmap2, lm2).rgb * e_lmscale[2].rgb * dot(normal_f, (texture2D(s_deluxemap2, lm2).rgb - 0.5) * 2.0); lightmaps += texture2D(s_lightmap3, lm3).rgb * e_lmscale[3].rgb * dot(normal_f, (texture2D(s_deluxemap3, lm3).rgb - 0.5) * 2.0); -#else + #else lightmaps = texture2D(s_lightmap, lm0).rgb * e_lmscale.rgb * dot(normal_f, (texture2D(s_deluxemap, lm0).rgb - 0.5) * 2.0); -#endif + #endif + return lightmaps; +#endif } +#endif void main (void) { vec3 cube_c; - vec4 out_f = vec4(1.0, 1.0, 1.0, 1.0); - vec4 diffuse_f = texture2D(s_t0, tex_c); - vec3 normal_f = normalize(texture2D(s_normalmap, tex_c).rgb - 0.5); vec3 env_f; - if (float(dev_skipnormal) == 1.0) { - diffuse_f.rgb *= lightmap_fragment(); - } else { - diffuse_f.rgb *= lightmap_fragment(normal_f); - } + #if r_skipDiffuse==0 + vec4 diffuse_f = texture2D(s_diffuse, tex_c); + #else + vec4 diffuse_f = vec4(1.0,1.0,1.0,1.0); + #endif + + #if r_skipNormal==0 + vec3 normal_f = normalize(texture2D(s_normalmap, tex_c).rgb - 0.5); + #define refl diffuse_f.a + #else + #define normal_f vec3(0.0,0.0,1.0) + #define refl (diffuse_f.a / 2.0) + 0.5 + #endif + + #if r_skipNormal==1 + diffuse_f.rgb *= lightmap_fragment(); + #else + diffuse_f.rgb *= lightmap_fragment(normal_f); + #endif #ifdef FAKESHADOWS diffuse_f.rgb *= ShadowmapFilter(s_shadowmap, vtexprojcoord); #endif + #if r_skipSpecular==0 + vec4 out_f = vec4(1.0, 1.0, 1.0, 1.0); cube_c = reflect(normalize(-eyevector), normal_f.rgb); cube_c = cube_c.x * invsurface[0] + cube_c.y * invsurface[1] + cube_c.z * invsurface[2]; cube_c = (m_model * vec4(cube_c.xyz, 0.0)).xyz; env_f = textureCube(s_box, cube_c).rgb * (e_lmscale.rgb * 0.25); - out_f.rgb = mix(env_f, diffuse_f.rgb, diffuse_f.a); + out_f.rgb = mix(env_f, diffuse_f.rgb, refl); // Add fog to the final fragment gl_FragColor = fog4(out_f); + #else + gl_FragColor = fog4(diffuse_f);; + #endif } #endif diff --git a/platform/base_glsl.pk3dir/glsl/lightmapped_speclazy.glsl b/platform/base_glsl.pk3dir/glsl/lightmapped_speclazy.glsl index 6428b15f..54647f37 100644 --- a/platform/base_glsl.pk3dir/glsl/lightmapped_speclazy.glsl +++ b/platform/base_glsl.pk3dir/glsl/lightmapped_speclazy.glsl @@ -16,7 +16,8 @@ !!cvardf r_glsl_pcf !!samps =FAKESHADOWS shadowmap -!!cvardf dev_skipnormal +!!cvardf r_skipNormal +!!cvardf r_skipSpecular #include "sys/defs.h" @@ -80,28 +81,45 @@ varying vec2 lm1, lm2, lm3; return lightmaps; } - vec3 lightmap_fragment (vec3 normal_f) +#if r_skipNormal==0 + vec3 lightmap_fragment(vec3 normal_f) { +#ifndef DELUXE + return lightmap_fragment(); +#else vec3 lightmaps; -#ifdef LIGHTSTYLED + #if defined(LIGHTSTYLED) lightmaps = texture2D(s_lightmap0, lm0).rgb * e_lmscale[0].rgb * dot(normal_f, (texture2D(s_deluxemap0, lm0).rgb - 0.5) * 2.0); lightmaps += texture2D(s_lightmap1, lm1).rgb * e_lmscale[1].rgb * dot(normal_f, (texture2D(s_deluxemap1, lm1).rgb - 0.5) * 2.0); lightmaps += texture2D(s_lightmap2, lm2).rgb * e_lmscale[2].rgb * dot(normal_f, (texture2D(s_deluxemap2, lm2).rgb - 0.5) * 2.0); lightmaps += texture2D(s_lightmap3, lm3).rgb * e_lmscale[3].rgb * dot(normal_f, (texture2D(s_deluxemap3, lm3).rgb - 0.5) * 2.0); -#else + #else lightmaps = texture2D(s_lightmap, lm0).rgb * e_lmscale.rgb * dot(normal_f, (texture2D(s_deluxemap, lm0).rgb - 0.5) * 2.0); -#endif + #endif + return lightmaps; +#endif } +#endif void main (void) { - vec4 diffuse_f = texture2D(s_diffuse, tex_c); - vec3 normal_f = normalize(texture2D(s_normalmap, tex_c).rgb - 0.5); float gloss = texture2D(s_normalmap, tex_c).a * 0.1; float spec; + #if r_skipDiffuse==0 + vec4 diffuse_f = texture2D(s_diffuse, tex_c); + #else + #define diffuse_f vec4(1.0, 1.0, 1.0, 1.0) + #endif + + #if r_skipNormals==1 + vec3 normal_f = normalize(texture2D(s_normalmap, tex_c).rgb - 0.5); + #else + #define normal_f vec3(0.0,0.0,0.5) + #endif + if (diffuse_f.a < 0.5) { discard; } @@ -110,16 +128,18 @@ varying vec2 lm1, lm2, lm3; diffuse_f.rgb *= ShadowmapFilter(s_shadowmap, vtexprojcoord); #endif - if (float(dev_skipnormal) == 1.0) { - diffuse_f.rgb *= lightmap_fragment(); - } else { - diffuse_f.rgb *= lightmap_fragment(normal_f); - } + #if r_skipNormal==1 + diffuse_f.rgb *= lightmap_fragment(); + #else + diffuse_f.rgb *= lightmap_fragment(normal_f); + #endif + #if r_skipSpecular==0 vec3 halfdir = normalize(normalize(eyevector) - e_light_dir); spec = pow(max(dot(halfdir, normal_f), 0.0), FTE_SPECULAR_EXPONENT); spec *= 0.05; diffuse_f.rgb += spec; + #endif gl_FragColor = fog4(diffuse_f); } diff --git a/platform/base_glsl.pk3dir/glsl/lightmapped_specular.glsl b/platform/base_glsl.pk3dir/glsl/lightmapped_specular.glsl index 1b0c8cc0..1b4d542c 100644 --- a/platform/base_glsl.pk3dir/glsl/lightmapped_specular.glsl +++ b/platform/base_glsl.pk3dir/glsl/lightmapped_specular.glsl @@ -14,10 +14,11 @@ !!permu FAKESHADOWS !!cvardf r_glsl_pcf +!!cvardf r_skipDiffuse +!!cvardf r_skipNormal +!!cvardf r_skipSpecular !!samps =FAKESHADOWS shadowmap -!!cvardf dev_skipnormal - #include "sys/defs.h" varying vec2 tex_c; @@ -80,27 +81,42 @@ varying vec2 lm1, lm2, lm3; return lightmaps; } - vec3 lightmap_fragment (vec3 normal_f) +#if r_skipNormal==0 + vec3 lightmap_fragment(vec3 normal_f) { +#ifndef DELUXE + return lightmap_fragment(); +#else vec3 lightmaps; -#ifdef LIGHTSTYLED + #if defined(LIGHTSTYLED) lightmaps = texture2D(s_lightmap0, lm0).rgb * e_lmscale[0].rgb * dot(normal_f, (texture2D(s_deluxemap0, lm0).rgb - 0.5) * 2.0); lightmaps += texture2D(s_lightmap1, lm1).rgb * e_lmscale[1].rgb * dot(normal_f, (texture2D(s_deluxemap1, lm1).rgb - 0.5) * 2.0); lightmaps += texture2D(s_lightmap2, lm2).rgb * e_lmscale[2].rgb * dot(normal_f, (texture2D(s_deluxemap2, lm2).rgb - 0.5) * 2.0); lightmaps += texture2D(s_lightmap3, lm3).rgb * e_lmscale[3].rgb * dot(normal_f, (texture2D(s_deluxemap3, lm3).rgb - 0.5) * 2.0); -#else + #else lightmaps = texture2D(s_lightmap, lm0).rgb * e_lmscale.rgb * dot(normal_f, (texture2D(s_deluxemap, lm0).rgb - 0.5) * 2.0); -#endif + #endif + return lightmaps; +#endif } +#endif void main (void) { + #if r_skipDiffuse==0 vec4 diffuse_f = texture2D(s_diffuse, tex_c); - vec3 normal_f = normalize(texture2D(s_normalmap, tex_c).rgb - 0.5); - float gloss = texture2D(s_normalmap, tex_c).a * 0.1; + #else + vec4 diffuse_f = vec4(1.0,1.0,1.0,1.0); + #endif + #if r_skipNormal==1 + vec3 normal_f = normalize(texture2D(s_normalmap, tex_c).rgb - 0.5); + #else + #define normal_f vec3(0.0,0.0,0.5) + #endif + if (diffuse_f.a < 0.5) { discard; } @@ -109,18 +125,19 @@ varying vec2 lm1, lm2, lm3; diffuse_f.rgb *= ShadowmapFilter(s_shadowmap, vtexprojcoord); #endif - /* lightmap */ - if (float(dev_skipnormal) == 1.0) { - diffuse_f.rgb *= lightmap_fragment(); - } else { - diffuse_f.rgb *= lightmap_fragment(normal_f); - } + #if r_skipNormal==1 + diffuse_f.rgb *= lightmap_fragment(); + #else + diffuse_f.rgb *= lightmap_fragment(normal_f); + #endif - /* specular */ + #if r_skipSpecular==0 + float gloss = texture2D(s_normalmap, tex_c).a * 0.1; vec3 halfdir = normalize(normalize(eyevector) - e_light_dir); float spec = pow(max(dot(halfdir, normal_f), 0.0), FTE_SPECULAR_EXPONENT); spec *= gloss; diffuse_f.rgb += spec; + #endif gl_FragColor = fog4(diffuse_f); } diff --git a/platform/base_glsl.pk3dir/glsl/lightmapped_specularcube_alt.glsl b/platform/base_glsl.pk3dir/glsl/lightmapped_specularcube_alt.glsl index c6b5f029..b84be44c 100644 --- a/platform/base_glsl.pk3dir/glsl/lightmapped_specularcube_alt.glsl +++ b/platform/base_glsl.pk3dir/glsl/lightmapped_specularcube_alt.glsl @@ -16,7 +16,8 @@ !!cvardf r_glsl_pcf !!samps =FAKESHADOWS shadowmap -!!cvardf dev_skipnormal +!!cvardf r_skipNormal +!!cvardf r_skipSpecular #include "sys/defs.h" @@ -37,11 +38,11 @@ varying vec4 vtexprojcoord; void lightmapped_init(void) { lm0 = v_lmcoord; - #ifdef LIGHTSTYLED + #ifdef LIGHTSTYLED lm1 = v_lmcoord2; lm2 = v_lmcoord3; lm3 = v_lmcoord4; - #endif + #endif } void main (void) @@ -84,27 +85,45 @@ varying vec4 vtexprojcoord; return lightmaps; } - vec3 lightmap_fragment (vec3 normal_f) +#if r_skipNormal==0 + vec3 lightmap_fragment(vec3 normal_f) { +#ifndef DELUXE + return lightmap_fragment(); +#else vec3 lightmaps; -#ifdef LIGHTSTYLED + #if defined(LIGHTSTYLED) lightmaps = texture2D(s_lightmap0, lm0).rgb * e_lmscale[0].rgb * dot(normal_f, (texture2D(s_deluxemap0, lm0).rgb - 0.5) * 2.0); lightmaps += texture2D(s_lightmap1, lm1).rgb * e_lmscale[1].rgb * dot(normal_f, (texture2D(s_deluxemap1, lm1).rgb - 0.5) * 2.0); lightmaps += texture2D(s_lightmap2, lm2).rgb * e_lmscale[2].rgb * dot(normal_f, (texture2D(s_deluxemap2, lm2).rgb - 0.5) * 2.0); lightmaps += texture2D(s_lightmap3, lm3).rgb * e_lmscale[3].rgb * dot(normal_f, (texture2D(s_deluxemap3, lm3).rgb - 0.5) * 2.0); -#else + #else lightmaps = texture2D(s_lightmap, lm0).rgb * e_lmscale.rgb * dot(normal_f, (texture2D(s_deluxemap, lm0).rgb - 0.5) * 2.0); -#endif + #endif + return lightmaps; +#endif } +#endif void main (void) { vec3 cube_c; vec4 out_f = vec4(1.0, 1.0, 1.0, 1.0); + + #if r_skipDiffuse==0 vec4 diffuse_f = texture2D(s_diffuse, tex_c); + #else + #define diffuse_f vec4(1.0, 1.0, 1.0, 1.0) + #endif + + #if r_skipNormal==1 vec3 normal_f = normalize(texture2D(s_normalmap, tex_c).rgb - 0.5); + #else + #define normal_f vec3(0.0,0.0,0.5) + #endif + float gloss = texture2D(s_normalmap, tex_c).a; float spec; @@ -112,20 +131,23 @@ varying vec4 vtexprojcoord; spec = pow(max(dot(halfdir, normal_f), 0.0), FTE_SPECULAR_EXPONENT); spec *= (gloss * 0.1); - if (float(dev_skipnormal) == 1.0) { - diffuse_f.rgb *= lightmap_fragment(); - } else { - diffuse_f.rgb *= lightmap_fragment(normal_f); - } + #if r_skipNormal==1 + diffuse_f.rgb *= lightmap_fragment(); + #else + diffuse_f.rgb *= lightmap_fragment(normal_f); + #endif - #ifdef FAKESHADOWS + #ifdef FAKESHADOWS diffuse_f.rgb *= ShadowmapFilter(s_shadowmap, vtexprojcoord); - #endif + #endif + #if r_skipSpecular==0 cube_c = reflect(normalize(-eyevector), normal_f.rgb); cube_c = cube_c.x * invsurface[0] + cube_c.y * invsurface[1] + cube_c.z * invsurface[2]; cube_c = (m_model * vec4(cube_c.xyz, 0.0)).xyz; out_f.rgb = mix(textureCube(s_reflectcube, cube_c).rgb, diffuse_f.rgb, gloss); + #endif + out_f.rgb += spec; gl_FragColor = fog4(out_f); diff --git a/platform/base_glsl.pk3dir/glsl/rtlight.glsl b/platform/base_glsl.pk3dir/glsl/rtlight.glsl index f454dc13..821a488f 100644 --- a/platform/base_glsl.pk3dir/glsl/rtlight.glsl +++ b/platform/base_glsl.pk3dir/glsl/rtlight.glsl @@ -8,24 +8,17 @@ //============================================================================== !!ver 100 300 -!!permu TESS !!permu BUMP !!permu FRAMEBLEND !!permu SKELETAL -!!permu UPPERLOWER !!permu FOG !!permu REFLECTCUBEMASK !!cvarf r_glsl_offsetmapping_scale !!cvardf r_glsl_pcf -!!cvardf r_tessellation_level=5 !!samps diffuse normalmap specular upper lower reflectcube reflectmask !!samps =PCF shadowmap !!samps =CUBE projectionmap -!!cvardf dev_skipnormal - -#if defined(ORM) || defined(SG) - #define PBR -#endif +!!cvardf r_skipNormal #include "sys/defs.h" @@ -43,26 +36,19 @@ #extension GL_ARB_texture_gather : enable #endif -#ifdef UPPERLOWER -#define UPPER -#define LOWER -#endif - //if there's no vertex normals known, disable some stuff. //FIXME: this results in dupe permutations. #ifdef NOBUMP #undef SPECULAR #undef BUMP -#undef OFFSETMAPPING #endif -#if !defined(TESS_CONTROL_SHADER) - varying vec2 tcbase; + varying vec2 tex_c; varying vec3 lightvector; #if defined(VERTEXCOLOURS) varying vec4 vc; #endif - #if defined(SPECULAR) || defined(OFFSETMAPPING) || defined(REFLECTCUBEMASK) + #if defined(SPECULAR) || defined(REFLECTCUBEMASK) varying vec3 eyevector; #endif #ifdef REFLECTCUBEMASK @@ -71,22 +57,19 @@ #if defined(PCF) || defined(CUBE) || defined(SPOT) || defined(ORTHO) varying vec4 vtexprojcoord; #endif -#endif #ifdef VERTEX_SHADER -#ifdef TESS -varying vec3 vertex, normal; -#endif + #include "sys/skeletal.h" void main () { vec3 n, s, t, w; gl_Position = skeletaltransform_wnst(w,n,s,t); -n = normalize(n); -s = normalize(s); -t = normalize(t); - tcbase = v_texcoord; //pass the texture coords straight through + n = normalize(n); + s = normalize(s); + t = normalize(t); + tex_c = v_texcoord; //pass the texture coords straight through #ifdef ORTHO vec3 lightminusvertex = -l_lightdirection; lightvector.x = dot(lightminusvertex, s.xyz); @@ -107,7 +90,7 @@ t = normalize(t); #if defined(VERTEXCOLOURS) vc = v_colour; #endif -#if defined(SPECULAR)||defined(OFFSETMAPPING) || defined(REFLECTCUBEMASK) +#if defined(SPECULAR) || defined(REFLECTCUBEMASK) vec3 eyeminusvertex = e_eyepos - w.xyz; eyevector.x = dot(eyeminusvertex, s.xyz); eyevector.y = dot(eyeminusvertex, t.xyz); @@ -121,130 +104,15 @@ t = normalize(t); vtexprojcoord = (l_cubematrix*vec4(w.xyz, 1.0)); #endif -#ifdef TESS - vertex = w; - normal = n; -#endif } #endif - - - -#if defined(TESS_CONTROL_SHADER) -layout(vertices = 3) out; - -in vec3 vertex[]; -out vec3 t_vertex[]; -in vec3 normal[]; -out vec3 t_normal[]; -in vec2 tcbase[]; -out vec2 t_tcbase[]; -in vec3 lightvector[]; -out vec3 t_lightvector[]; -#if defined(VERTEXCOLOURS) -in vec4 vc[]; -out vec4 t_vc[]; -#endif -#if defined(SPECULAR) || defined(OFFSETMAPPING) || defined(REFLECTCUBEMASK) -in vec3 eyevector[]; -out vec3 t_eyevector[]; -#endif -void main() -{ - //the control shader needs to pass stuff through -#define id gl_InvocationID - t_vertex[id] = vertex[id]; - t_normal[id] = normal[id]; - t_tcbase[id] = tcbase[id]; - t_lightvector[id] = lightvector[id]; -#if defined(VERTEXCOLOURS) - t_vc[id] = vc[id]; -#endif -#if defined(SPECULAR) || defined(OFFSETMAPPING) || defined(REFLECTCUBEMASK) - t_eyevector[id] = eyevector[id]; -#endif - - gl_TessLevelOuter[0] = float(r_tessellation_level); - gl_TessLevelOuter[1] = float(r_tessellation_level); - gl_TessLevelOuter[2] = float(r_tessellation_level); - gl_TessLevelInner[0] = float(r_tessellation_level); -} -#endif - - - - - - - - - -#if defined(TESS_EVALUATION_SHADER) -layout(triangles) in; - -in vec3 t_vertex[]; -in vec3 t_normal[]; -in vec2 t_tcbase[]; -in vec3 t_lightvector[]; -#if defined(VERTEXCOLOURS) -in vec4 t_vc[]; -#endif -#if defined(SPECULAR) || defined(OFFSETMAPPING) || defined(REFLECTCUBEMASK) -in vec3 t_eyevector[]; -#endif - -#define LERP(a) (gl_TessCoord.x*a[0] + gl_TessCoord.y*a[1] + gl_TessCoord.z*a[2]) -void main() -{ -#define factor 1.0 - tcbase = LERP(t_tcbase); - vec3 w = LERP(t_vertex); - - vec3 t0 = w - dot(w-t_vertex[0],t_normal[0])*t_normal[0]; - vec3 t1 = w - dot(w-t_vertex[1],t_normal[1])*t_normal[1]; - vec3 t2 = w - dot(w-t_vertex[2],t_normal[2])*t_normal[2]; - w = w*(1.0-factor) + factor*(gl_TessCoord.x*t0+gl_TessCoord.y*t1+gl_TessCoord.z*t2); - -#if defined(PCF) || defined(SPOT) || defined(CUBE) || defined(ORTHO) - //for texture projections/shadowmapping on dlights - vtexprojcoord = (l_cubematrix*vec4(w.xyz, 1.0)); -#endif - - //FIXME: we should be recalcing these here, instead of just lerping them - lightvector = LERP(t_lightvector); -#if defined(VERTEXCOLOURS) - vc = LERP(t_vc); -#endif -#if defined(SPECULAR) || defined(OFFSETMAPPING) || defined(REFLECTCUBEMASK) - eyevector = LERP(t_eyevector); -#endif - - gl_Position = m_modelviewprojection * vec4(w,1.0); -} -#endif - - - - - - - - - - - #ifdef FRAGMENT_SHADER #include "sys/fog.h" #include "sys/pcf.h" -#ifdef OFFSETMAPPING -#include "sys/offsetmapping.h" -#endif - -#include "sys/pbr.h" void main () { @@ -265,41 +133,29 @@ void main () #endif //read raw texture samples (offsetmapping munges the tex coords first) -#ifdef OFFSETMAPPING - vec2 tcoffsetmap = offsetmap(s_normalmap, tcbase, eyevector); -#define tcbase tcoffsetmap -#endif + #if defined(FLAT) vec4 bases = vec4(FLAT, FLAT, FLAT, 1.0); #else - vec4 bases = texture2D(s_diffuse, tcbase); + vec4 bases = texture2D(s_diffuse, tex_c); #ifdef VERTEXCOLOURS bases.rgb *= bases.a; #endif #endif -#ifdef UPPER - vec4 uc = texture2D(s_upper, tcbase); - bases.rgb += uc.rgb*e_uppercolour*uc.a; -#endif -#ifdef LOWER - vec4 lc = texture2D(s_lower, tcbase); - bases.rgb += lc.rgb*e_lowercolour*lc.a; -#endif -#if defined(BUMP) || defined(SPECULAR) || defined(REFLECTCUBEMASK) - vec3 bumps; - if (float(dev_skipnormal) == 0.0) { - bumps = normalize(vec3(texture2D(s_normalmap, tcbase)) - 0.5); - /* fix it up a bit */ - bumps = normalize(bumps); - } else { - bumps = vec3(0.0,0.0,1.0); - } +#if defined(BUMP) || defined(SPECULAR) || defined(REFLECTCUBEMASK) + + #if r_skipNormals==1 + vec3 normal_f = normalize(texture2D(s_normalmap, tex_c).rgb - 0.5); + #else + #define normal_f vec3(0.0,0.0,0.5) + #endif + #elif defined(REFLECTCUBEMASK) - vec3 bumps = vec3(0.0,0.0,1.0); + vec3 normal_f = vec3(0.0,0.0,1.0); #endif #ifdef SPECULAR - vec4 specs = texture2D(s_specular, tcbase); + vec4 specs = texture2D(s_specular, tex_c); #endif #define dielectricSpecular 0.04 @@ -329,9 +185,6 @@ void main () #define specrgb 1.0 //vec3(dielectricSpecular) #endif -#ifdef PBR - vec3 diff = DoPBR(bumps, normalize(eyevector), normalize(lightvector), roughness, bases.rgb, specrgb, l_lightcolourscale); -#else vec3 diff; #ifdef NOBUMP //surface can only support ambient lighting, even for lights that try to avoid it. @@ -339,24 +192,23 @@ void main () #else vec3 nl = normalize(lightvector); #ifdef BUMP - diff = bases.rgb * (l_lightcolourscale.x + l_lightcolourscale.y * max(dot(bumps, nl), 0.0)); + diff = bases.rgb * (l_lightcolourscale.x + l_lightcolourscale.y * max(dot(normal_f, nl), 0.0)); #else - //we still do bumpmapping even without bumps to ensure colours are always sane. light.exe does it too. + //we still do bumpmapping even without normal_f to ensure colours are always sane. light.exe does it too. diff = bases.rgb * (l_lightcolourscale.x + l_lightcolourscale.y * max(dot(vec3(0.0, 0.0, 1.0), nl), 0.0)); #endif #endif #ifdef SPECULAR vec3 halfdir = normalize(normalize(eyevector) + nl); - float spec = pow(max(dot(halfdir, bumps), 0.0), FTE_SPECULAR_EXPONENT * gloss)*float(SPECMUL); + float spec = pow(max(dot(halfdir, normal_f), 0.0), FTE_SPECULAR_EXPONENT * gloss)*float(SPECMUL); diff += l_lightcolourscale.z * spec * specrgb; #endif -#endif #ifdef REFLECTCUBEMASK - vec3 rtc = reflect(-eyevector, bumps); + vec3 rtc = reflect(-eyevector, normal_f); rtc = rtc.x*invsurface[0] + rtc.y*invsurface[1] + rtc.z*invsurface[2]; rtc = (m_model * vec4(rtc.xyz,0.0)).xyz; - diff += texture2D(s_reflectmask, tcbase).rgb * textureCube(s_reflectcube, rtc).rgb; + diff += texture2D(s_reflectmask, tex_c).rgb * textureCube(s_reflectcube, rtc).rgb; #endif #ifdef CUBE diff --git a/platform/base_glsl.pk3dir/glsl/terrain.glsl b/platform/base_glsl.pk3dir/glsl/terrain.glsl index 4675ed9f..6d92ba9a 100644 --- a/platform/base_glsl.pk3dir/glsl/terrain.glsl +++ b/platform/base_glsl.pk3dir/glsl/terrain.glsl @@ -21,7 +21,7 @@ !!cvardf r_glsl_pcf !!samps =FAKESHADOWS shadowmap -!!cvardf dev_skipnormal +!!cvardf r_skipNormal #include "sys/defs.h" @@ -80,6 +80,7 @@ varying vec2 lm1, lm2, lm3; return lightmaps; } +#if r_skipNormal==0 vec3 lightmap_fragment(vec3 normal_f) { #ifndef DELUXE @@ -99,16 +100,20 @@ varying vec2 lm1, lm2, lm3; return lightmaps; #endif } +#endif void main ( void ) { vec4 diff1_f = texture2D( s_t0, tex_c); vec4 diff2_f = texture2D( s_t1, tex_c); - vec3 normal1_f = normalize(texture2D(s_t2, tex_c).rgb - 0.5); - vec3 normal2_f = normalize(texture2D(s_t3, tex_c).rgb - 0.5); float alpha = 1.0; float bw = 1.0 - (diff2_f.r + diff2_f.g + diff2_f.b) / 3.0; + #if r_skipNormal==0 + vec3 normal1_f = normalize(texture2D(s_t2, tex_c).rgb - 0.5); + vec3 normal2_f = normalize(texture2D(s_t3, tex_c).rgb - 0.5); + #endif + if (vex_color.a < 1.0) { if (bw > vex_color.a) { alpha = 0.0; @@ -116,14 +121,19 @@ varying vec2 lm1, lm2, lm3; } /* light */ + #if r_skipNormal==0 diff1_f.rgb *= lightmap_fragment(normal1_f); diff2_f.rgb *= lightmap_fragment(normal2_f); + #else + diff1_f.rgb *= lightmap_fragment(); + diff2_f.rgb *= lightmap_fragment(); + #endif vec3 output_f = mix( diff1_f.rgb, diff2_f.rgb, alpha ); - #ifdef FAKESHADOWS + #ifdef FAKESHADOWS output_f.rgb *= ShadowmapFilter(s_shadowmap, vtexprojcoord); - #endif + #endif gl_FragColor = fog4( vec4( output_f.rgb, 1.0 ) ); } diff --git a/platform/base_glsl.pk3dir/glsl/terrain_alpha.glsl b/platform/base_glsl.pk3dir/glsl/terrain_alpha.glsl index f88c9245..a798b5d6 100644 --- a/platform/base_glsl.pk3dir/glsl/terrain_alpha.glsl +++ b/platform/base_glsl.pk3dir/glsl/terrain_alpha.glsl @@ -20,7 +20,8 @@ !!cvardf r_glsl_pcf !!samps =FAKESHADOWS shadowmap -!!cvardf dev_skipnormal +!!cvardf r_skipDiffuse +!!cvardf r_skipNormal #include "sys/defs.h" @@ -65,35 +66,70 @@ varying vec2 lm1, lm2, lm3; #include "sys/fog.h" #include "sys/pcf.h" - vec3 lightmap_fragment (vec3 normal_f) + vec3 lightmap_fragment() { vec3 lightmaps; #ifdef LIGHTSTYLED - lightmaps = texture2D(s_lightmap0, lm0).rgb * e_lmscale[0].rgb * dot(normal_f, (texture2D(s_deluxemap0, lm0).rgb - 0.5) * 2.0); - lightmaps += texture2D(s_lightmap1, lm1).rgb * e_lmscale[1].rgb * dot(normal_f, (texture2D(s_deluxemap1, lm1).rgb - 0.5) * 2.0); - lightmaps += texture2D(s_lightmap2, lm2).rgb * e_lmscale[2].rgb * dot(normal_f, (texture2D(s_deluxemap2, lm2).rgb - 0.5) * 2.0); - lightmaps += texture2D(s_lightmap3, lm3).rgb * e_lmscale[3].rgb * dot(normal_f, (texture2D(s_deluxemap3, lm3).rgb - 0.5) * 2.0); + lightmaps = texture2D(s_lightmap0, lm0).rgb * e_lmscale[0].rgb; + lightmaps += texture2D(s_lightmap1, lm1).rgb * e_lmscale[1].rgb; + lightmaps += texture2D(s_lightmap2, lm2).rgb * e_lmscale[2].rgb; + lightmaps += texture2D(s_lightmap3, lm3).rgb * e_lmscale[3].rgb; #else - lightmaps = texture2D(s_lightmap, lm0).rgb * e_lmscale.rgb * dot(normal_f, (texture2D(s_deluxemap, lm0).rgb - 0.5) * 2.0); + lightmaps = texture2D(s_lightmap, lm0).rgb * e_lmscale.rgb; #endif return lightmaps; } +#if r_skipNormal==0 + vec3 lightmap_fragment(vec3 normal_f) + { +#ifndef DELUXE + return lightmap_fragment(); +#else + vec3 lightmaps; + + #if defined(LIGHTSTYLED) + lightmaps = texture2D(s_lightmap0, lm0).rgb * e_lmscale[0].rgb * dot(normal_f, (texture2D(s_deluxemap0, lm0).rgb - 0.5) * 2.0); + lightmaps += texture2D(s_lightmap1, lm1).rgb * e_lmscale[1].rgb * dot(normal_f, (texture2D(s_deluxemap1, lm1).rgb - 0.5) * 2.0); + lightmaps += texture2D(s_lightmap2, lm2).rgb * e_lmscale[2].rgb * dot(normal_f, (texture2D(s_deluxemap2, lm2).rgb - 0.5) * 2.0); + lightmaps += texture2D(s_lightmap3, lm3).rgb * e_lmscale[3].rgb * dot(normal_f, (texture2D(s_deluxemap3, lm3).rgb - 0.5) * 2.0); + #else + lightmaps = texture2D(s_lightmap, lm0).rgb * e_lmscale.rgb * dot(normal_f, (texture2D(s_deluxemap, lm0).rgb - 0.5) * 2.0); + #endif + + return lightmaps; +#endif + } +#endif + void main ( void ) { - vec3 diffuse_f = texture2D( s_diffuse, tex_c ).rgb; + #if r_skipDiffuse==0 + vec3 diffuse_f = texture2D(s_diffuse, tex_c).rgb; + #else + vec3 diffuse_f = vec3(1.0,1.0,1.0); + #endif + float bw = 1.0 - (diffuse_f.r + diffuse_f.g + diffuse_f.b) / 3.0; - vec3 normal_f = normalize(texture2D(s_normalmap, tex_c).rgb - 0.5); vec4 vcol = vex_color; + #if r_skipNormal==0 + vec3 normal_f; + normal_f = normalize(texture2D(s_normalmap, tex_c).rgb - 0.5); + #endif + if (vcol.a < 1.0) { if (bw > vcol.a) { discard; } } - diffuse_f *= lightmap_fragment(normal_f); + #if r_skipNormal==0 + diffuse_f.rgb *= lightmap_fragment(normal_f); + #else + diffuse_f.rgb *= lightmap_fragment(); + #endif #ifdef FAKESHADOWS diffuse_f *= ShadowmapFilter(s_shadowmap, vtexprojcoord); diff --git a/platform/base_glsl.pk3dir/glsl/terrain_alpha_alt.glsl b/platform/base_glsl.pk3dir/glsl/terrain_alpha_alt.glsl index 8b1c3698..22119687 100644 --- a/platform/base_glsl.pk3dir/glsl/terrain_alpha_alt.glsl +++ b/platform/base_glsl.pk3dir/glsl/terrain_alpha_alt.glsl @@ -20,7 +20,8 @@ !!cvardf r_glsl_pcf !!samps =FAKESHADOWS shadowmap -!!cvardf dev_skipnormal +!!cvardf r_skipDiffuse +!!cvardf r_skipNormal #include "sys/defs.h" @@ -65,29 +66,60 @@ varying vec2 lm1, lm2, lm3; #include "sys/fog.h" #include "sys/pcf.h" - vec3 lightmap_fragment (vec3 normal_f) + vec3 lightmap_fragment() { vec3 lightmaps; #ifdef LIGHTSTYLED - lightmaps = texture2D(s_lightmap0, lm0).rgb * e_lmscale[0].rgb * dot(normal_f, (texture2D(s_deluxemap0, lm0).rgb - 0.5) * 2.0); - lightmaps += texture2D(s_lightmap1, lm1).rgb * e_lmscale[1].rgb * dot(normal_f, (texture2D(s_deluxemap1, lm1).rgb - 0.5) * 2.0); - lightmaps += texture2D(s_lightmap2, lm2).rgb * e_lmscale[2].rgb * dot(normal_f, (texture2D(s_deluxemap2, lm2).rgb - 0.5) * 2.0); - lightmaps += texture2D(s_lightmap3, lm3).rgb * e_lmscale[3].rgb * dot(normal_f, (texture2D(s_deluxemap3, lm3).rgb - 0.5) * 2.0); + lightmaps = texture2D(s_lightmap0, lm0).rgb * e_lmscale[0].rgb; + lightmaps += texture2D(s_lightmap1, lm1).rgb * e_lmscale[1].rgb; + lightmaps += texture2D(s_lightmap2, lm2).rgb * e_lmscale[2].rgb; + lightmaps += texture2D(s_lightmap3, lm3).rgb * e_lmscale[3].rgb; #else - lightmaps = texture2D(s_lightmap, lm0).rgb * e_lmscale.rgb * dot(normal_f, (texture2D(s_deluxemap, lm0).rgb - 0.5) * 2.0); + lightmaps = texture2D(s_lightmap, lm0).rgb * e_lmscale.rgb; #endif return lightmaps; } +#if r_skipNormal==0 + vec3 lightmap_fragment(vec3 normal_f) + { +#ifndef DELUXE + return lightmap_fragment(); +#else + vec3 lightmaps; + + #if defined(LIGHTSTYLED) + lightmaps = texture2D(s_lightmap0, lm0).rgb * e_lmscale[0].rgb * dot(normal_f, (texture2D(s_deluxemap0, lm0).rgb - 0.5) * 2.0); + lightmaps += texture2D(s_lightmap1, lm1).rgb * e_lmscale[1].rgb * dot(normal_f, (texture2D(s_deluxemap1, lm1).rgb - 0.5) * 2.0); + lightmaps += texture2D(s_lightmap2, lm2).rgb * e_lmscale[2].rgb * dot(normal_f, (texture2D(s_deluxemap2, lm2).rgb - 0.5) * 2.0); + lightmaps += texture2D(s_lightmap3, lm3).rgb * e_lmscale[3].rgb * dot(normal_f, (texture2D(s_deluxemap3, lm3).rgb - 0.5) * 2.0); + #else + lightmaps = texture2D(s_lightmap, lm0).rgb * e_lmscale.rgb * dot(normal_f, (texture2D(s_deluxemap, lm0).rgb - 0.5) * 2.0); + #endif + + return lightmaps; +#endif + } +#endif + void main ( void ) { - vec3 diffuse_f = texture2D( s_diffuse, tex_c ).rgb; - vec3 normal_f = normalize(texture2D(s_normalmap, tex_c).rgb - 0.5); + #if r_skipDiffuse==0 + vec3 diffuse_f = texture2D(s_diffuse, tex_c).rgb; + #else + vec3 diffuse_f = vec3(1.0,1.0,1.0); + #endif + float bw = (diffuse_f.r + diffuse_f.g + diffuse_f.b) / 3.0; vec4 vcol = vex_color; float alpha = 1.0; + #if r_skipNormal==0 + vec3 normal_f; + normal_f = normalize(texture2D(s_normalmap, tex_c).rgb - 0.5); + #endif + if (vcol.a < 1.0) { if (bw > vcol.a) { discard; @@ -97,7 +129,11 @@ varying vec2 lm1, lm2, lm3; if (bw > (vcol.a * 0.25)) alpha = vcol.a; - diffuse_f *= lightmap_fragment(normal_f); + #if r_skipNormal==0 + diffuse_f.rgb *= lightmap_fragment(normal_f); + #else + diffuse_f.rgb *= lightmap_fragment(); + #endif #ifdef FAKESHADOWS diffuse_f *= ShadowmapFilter(s_shadowmap, vtexprojcoord); diff --git a/platform/base_glsl.pk3dir/glsl/terrain_skybox.glsl b/platform/base_glsl.pk3dir/glsl/terrain_skybox.glsl index 845ebc81..14a24acf 100644 --- a/platform/base_glsl.pk3dir/glsl/terrain_skybox.glsl +++ b/platform/base_glsl.pk3dir/glsl/terrain_skybox.glsl @@ -48,20 +48,42 @@ varying vec2 lm1, lm2, lm3; #endif #ifdef FRAGMENT_SHADER - vec3 lightmap_fragment (vec3 normal_f) + vec3 lightmap_fragment() { vec3 lightmaps; #ifdef LIGHTSTYLED + lightmaps = texture2D(s_lightmap0, lm0).rgb * e_lmscale[0].rgb; + lightmaps += texture2D(s_lightmap1, lm1).rgb * e_lmscale[1].rgb; + lightmaps += texture2D(s_lightmap2, lm2).rgb * e_lmscale[2].rgb; + lightmaps += texture2D(s_lightmap3, lm3).rgb * e_lmscale[3].rgb; +#else + lightmaps = texture2D(s_lightmap, lm0).rgb * e_lmscale.rgb; +#endif + return lightmaps; + } + +#if r_skipNormal==0 + vec3 lightmap_fragment(vec3 normal_f) + { +#ifndef DELUXE + return lightmap_fragment(); +#else + vec3 lightmaps; + + #if defined(LIGHTSTYLED) lightmaps = texture2D(s_lightmap0, lm0).rgb * e_lmscale[0].rgb * dot(normal_f, (texture2D(s_deluxemap0, lm0).rgb - 0.5) * 2.0); lightmaps += texture2D(s_lightmap1, lm1).rgb * e_lmscale[1].rgb * dot(normal_f, (texture2D(s_deluxemap1, lm1).rgb - 0.5) * 2.0); lightmaps += texture2D(s_lightmap2, lm2).rgb * e_lmscale[2].rgb * dot(normal_f, (texture2D(s_deluxemap2, lm2).rgb - 0.5) * 2.0); lightmaps += texture2D(s_lightmap3, lm3).rgb * e_lmscale[3].rgb * dot(normal_f, (texture2D(s_deluxemap3, lm3).rgb - 0.5) * 2.0); -#else + #else lightmaps = texture2D(s_lightmap, lm0).rgb * e_lmscale.rgb * dot(normal_f, (texture2D(s_deluxemap, lm0).rgb - 0.5) * 2.0); -#endif + #endif + return lightmaps; +#endif } +#endif void main () { diff --git a/platform/base_glsl.pk3dir/glsl/terrain_valley.glsl b/platform/base_glsl.pk3dir/glsl/terrain_valley.glsl index be88e740..e53877f8 100644 --- a/platform/base_glsl.pk3dir/glsl/terrain_valley.glsl +++ b/platform/base_glsl.pk3dir/glsl/terrain_valley.glsl @@ -19,8 +19,8 @@ !!cvardf r_glsl_pcf !!samps =FAKESHADOWS shadowmap -!!cvardf dev_skipdiffuse -!!cvardf dev_skipnormal +!!cvardf r_skipDiffuse +!!cvardf r_skipNormal #include "sys/defs.h" @@ -81,20 +81,27 @@ varying vec2 lm1, lm2, lm3; return lightmaps; } +#if r_skipNormal==0 vec3 lightmap_fragment(vec3 normal_f) { +#ifndef DELUXE + return lightmap_fragment(); +#else vec3 lightmaps; -#ifdef LIGHTSTYLED + #if defined(LIGHTSTYLED) lightmaps = texture2D(s_lightmap0, lm0).rgb * e_lmscale[0].rgb * dot(normal_f, (texture2D(s_deluxemap0, lm0).rgb - 0.5) * 2.0); lightmaps += texture2D(s_lightmap1, lm1).rgb * e_lmscale[1].rgb * dot(normal_f, (texture2D(s_deluxemap1, lm1).rgb - 0.5) * 2.0); lightmaps += texture2D(s_lightmap2, lm2).rgb * e_lmscale[2].rgb * dot(normal_f, (texture2D(s_deluxemap2, lm2).rgb - 0.5) * 2.0); lightmaps += texture2D(s_lightmap3, lm3).rgb * e_lmscale[3].rgb * dot(normal_f, (texture2D(s_deluxemap3, lm3).rgb - 0.5) * 2.0); -#else + #else lightmaps = texture2D(s_lightmap, lm0).rgb * e_lmscale.rgb * dot(normal_f, (texture2D(s_deluxemap, lm0).rgb - 0.5) * 2.0); -#endif + #endif + return lightmaps; +#endif } +#endif void main ( void ) { @@ -108,7 +115,7 @@ varying vec2 lm1, lm2, lm3; diff1_f.rgb *= d1_f; diff2_f.rgb *= d2_f; - if (float(dev_skipnormal) == 1.0) { + if (float(r_skipNormal) == 1.0) { diff1_f.rgb *= lightmap_fragment(); diff2_f.rgb *= lightmap_fragment(); } else { diff --git a/platform/base_glsl.pk3dir/glsl/vertexlit.glsl b/platform/base_glsl.pk3dir/glsl/vertexlit.glsl index 93454a4f..7cab8d4d 100644 --- a/platform/base_glsl.pk3dir/glsl/vertexlit.glsl +++ b/platform/base_glsl.pk3dir/glsl/vertexlit.glsl @@ -16,7 +16,7 @@ !!cvardf r_glsl_pcf !!samps =FAKESHADOWS shadowmap -!!cvardf dev_skipdiffuse +!!cvardf r_skipDiffuse #include "sys/defs.h" @@ -62,18 +62,17 @@ varying vec3 norm; { vec4 diff_f = texture2D(s_diffuse, tex_c); vec4 fb_f = texture2D(s_fullbright, tex_c); - vec3 normal_f = (texture2D(s_normalmap, tex_c).rgb - 0.5) * 2.0; vec3 light; if (diff_f.a < 0.5) { discard; } - #ifdef HALFLAMBERT - light = e_light_ambient + (e_light_mul * halflambert(norm, e_light_dir)); - #else - light = e_light_ambient + (e_light_mul * lambert(norm, e_light_dir)); - #endif + #ifdef HALFLAMBERT + light = e_light_ambient + (e_light_mul * halflambert(norm, e_light_dir)); + #else + light = e_light_ambient + (e_light_mul * lambert(norm, e_light_dir)); + #endif diff_f.rgb *= light; diff_f.rgb += fb_f.rgb; diff --git a/platform/base_glsl.pk3dir/glsl/vertexlit_reflectcube.glsl b/platform/base_glsl.pk3dir/glsl/vertexlit_reflectcube.glsl index 255648fc..d1bbfa17 100644 --- a/platform/base_glsl.pk3dir/glsl/vertexlit_reflectcube.glsl +++ b/platform/base_glsl.pk3dir/glsl/vertexlit_reflectcube.glsl @@ -16,7 +16,8 @@ !!cvardf r_glsl_pcf !!samps =FAKESHADOWS shadowmap -!!cvardf dev_skipenvmaps +!!cvardf r_skipSpecular +!!cvardf r_skipNormal #include "sys/defs.h" @@ -76,28 +77,35 @@ varying mat3 invsurface; vec3 cube_c; vec4 out_f = vec4(1.0, 1.0, 1.0, 1.0); vec4 diff_f = texture2D(s_diffuse, tex_c); - vec4 normal_f = (texture2D(s_normalmap, tex_c) - 0.5) * 2.0; vec3 light; + #if r_skipNormal==0 + vec3 normal_f = (texture2D(s_normalmap, tex_c).rgb - 0.5) * 2.0; + float refl = texture2D(s_normalmap, tex_c).a; + #else + #define normal_f vec3(0.0,0.0,1.0) + float refl = texture2D(s_normalmap, tex_c).a; + #endif + if (diff_f.a < 0.5) { discard; } - #ifdef HALFLAMBERT - light = e_light_ambient + (e_light_mul * halflambert(norm, e_light_dir)); - #else - light = e_light_ambient + (e_light_mul * lambert(norm, e_light_dir)); - #endif + #ifdef HALFLAMBERT + light = e_light_ambient + (e_light_mul * halflambert(norm, e_light_dir)); + #else + light = e_light_ambient + (e_light_mul * lambert(norm, e_light_dir)); + #endif - if (float(dev_skipenvmaps) == 0.0) { - cube_c = reflect(normalize(eyevector), normal_f.rgb); - cube_c = cube_c.x * invsurface[0] + cube_c.y * invsurface[1] + cube_c.z * invsurface[2]; - cube_c = (m_model * vec4(cube_c.xyz, 0.0)).xyz; - diff_f.rgb = mix(textureCube(s_reflectcube, cube_c).rgb, diff_f.rgb, diff_f.a); - } + #if r_skipSpecular==0 + cube_c = reflect(normalize(eyevector), normal_f.rgb); + cube_c = cube_c.x * invsurface[0] + cube_c.y * invsurface[1] + cube_c.z * invsurface[2]; + cube_c = (m_model * vec4(cube_c.xyz, 0.0)).xyz; + diff_f.rgb = mix(textureCube(s_reflectcube, cube_c).rgb, diff_f.rgb, diff_f.a); + #endif diff_f.rgb *= light; - out_f.rgb = mix(textureCube(s_reflectcube, cube_c).rgb, diff_f.rgb, normal_f.a); + out_f.rgb = mix(textureCube(s_reflectcube, cube_c).rgb, diff_f.rgb, refl); #ifdef FAKESHADOWS out_f.rgb *= ShadowmapFilter(s_shadowmap, vtexprojcoord); diff --git a/platform/base_glsl.pk3dir/glsl/vertexlit_specular.glsl b/platform/base_glsl.pk3dir/glsl/vertexlit_specular.glsl index 897dff1d..bbd3e038 100644 --- a/platform/base_glsl.pk3dir/glsl/vertexlit_specular.glsl +++ b/platform/base_glsl.pk3dir/glsl/vertexlit_specular.glsl @@ -16,9 +16,9 @@ !!cvardf r_glsl_pcf !!samps =FAKESHADOWS shadowmap -!!cvardf dev_skipdiffuse -!!cvardf dev_skipspecular -!!cvardf dev_skipenvmaps +!!cvardf r_skipDiffuse +!!cvardf r_skipSpecular +!!cvardf r_skipNormal #include "sys/defs.h" @@ -71,30 +71,41 @@ varying mat3 invsurface; void main () { - vec4 diffuse_f = texture2D( s_diffuse, tex_c ); - vec3 normal_f = (texture2D(s_normalmap, tex_c).rgb - 0.5) * 2.0; vec4 fb_f = texture2D(s_fullbright, tex_c); - float gloss = texture2D( s_normalmap, tex_c ).a; vec3 new_e_light_dir = vec3(cos(e_time), sin(e_time), 0); vec3 light; + #if r_skipDiffuse==0 + vec4 diffuse_f = texture2D(s_diffuse, tex_c); + #else + vec4 diffuse_f = vec4(1.0,1.0,1.0,1.0); + #endif + + #if r_skipNormal==0 + vec3 normal_f = (texture2D(s_normalmap, tex_c).rgb - 0.5) * 2.0; + float gloss = texture2D(s_normalmap, tex_c).a; + #else + #define normal_f vec3(0.0,0.0,1.0) + float gloss = texture2D(s_normalmap, tex_c).a; + #endif + if (diffuse_f.a < 0.5) { discard; } - #ifdef HALFLAMBERT - light = e_light_ambient + (e_light_mul * halflambert(norm, e_light_dir)); - #else - light = e_light_ambient + (e_light_mul * lambert(norm, e_light_dir)); - #endif + #ifdef HALFLAMBERT + light = e_light_ambient + (e_light_mul * halflambert(norm, e_light_dir)); + #else + light = e_light_ambient + (e_light_mul * lambert(norm, e_light_dir)); + #endif - if (float(dev_skipspecular) == 0.0) { - vec3 halfdir = normalize(normalize(eyevector) + e_light_dir); - vec3 bumps = normalize(invsurface * (normal_f)); - float spec = pow(max(dot(halfdir, bumps), 0.0), FTE_SPECULAR_EXPONENT); - spec *= 5.0 * (1.0 - gloss); - diffuse_f.rgb += spec; - } + #if r_skipSpecular==0 + vec3 halfdir = normalize(normalize(eyevector) + e_light_dir); + vec3 bumps = normalize(invsurface * (normal_f)); + float spec = pow(max(dot(halfdir, bumps), 0.0), FTE_SPECULAR_EXPONENT); + spec *= 5.0 * (1.0 - gloss); + diffuse_f.rgb += spec; + #endif diffuse_f.rgb *= light; diffuse_f.rgb += fb_f.rgb; diff --git a/platform/base_glsl.pk3dir/glsl/vertexlit_specularcube.glsl b/platform/base_glsl.pk3dir/glsl/vertexlit_specularcube.glsl index 84fdd476..8911054f 100644 --- a/platform/base_glsl.pk3dir/glsl/vertexlit_specularcube.glsl +++ b/platform/base_glsl.pk3dir/glsl/vertexlit_specularcube.glsl @@ -17,7 +17,8 @@ !!cvardf r_glsl_pcf !!samps =FAKESHADOWS shadowmap -!!cvardf dev_skipnormal +!!cvardf r_skipNormal +!!cvardf r_skipSpecular #include "sys/defs.h" @@ -72,26 +73,34 @@ varying mat3 invsurface; { vec3 cube_c; vec4 diffuse_f = texture2D( s_diffuse, tex_c ); - vec3 normal_f = (texture2D(s_normalmap, tex_c).rgb - 0.5) * 2.0; - float gloss = texture2D( s_normalmap, tex_c ).a; + vec3 new_e_light_dir = vec3(cos(e_time), sin(e_time), 0); vec3 light; - #ifdef HALFLAMBERT - light = e_light_ambient + (e_light_mul * halflambert(norm, e_light_dir)); - #else - light = e_light_ambient + (e_light_mul * lambert(norm, e_light_dir)); - #endif + #if r_skipNormal==0 + vec3 normal_f = (texture2D(s_normalmap, tex_c).rgb - 0.5) * 2.0; + float gloss = texture2D(s_normalmap, tex_c).a; + #else + #define normal_f vec3(0.0,0.0,1.0) + float gloss = texture2D(s_normalmap, tex_c).a; + #endif - /* specular */ + #ifdef HALFLAMBERT + light = e_light_ambient + (e_light_mul * halflambert(norm, e_light_dir)); + #else + light = e_light_ambient + (e_light_mul * lambert(norm, e_light_dir)); + #endif + + #if r_skipSpecular==0 vec3 halfdir = normalize(normalize(eyevector) + e_light_dir); vec3 bumps = normalize(invsurface * (normal_f)); float spec = pow(max(dot(halfdir, bumps), 0.0), FTE_SPECULAR_EXPONENT); spec *= 5.0 * (1.0 - gloss); diffuse_f.rgb += spec * diffuse_f.a; + #endif /* reflectcube */ - cube_c = reflect(normalize(-eyevector), normal_f.rgb * 0.5); + cube_c = reflect(normalize(-eyevector), normal_f.rgb); cube_c = cube_c.x * invsurface[0] + cube_c.y * invsurface[1] + cube_c.z * invsurface[2]; cube_c = (m_model * vec4(cube_c.xyz, 0.0)).xyz; diffuse_f.rgb = mix(textureCube(s_reflectcube, cube_c).rgb, diffuse_f.rgb, diffuse_f.a); diff --git a/platform/base_glsl.pk3dir/glsl/vertexlit_specularcube_alt.glsl b/platform/base_glsl.pk3dir/glsl/vertexlit_specularcube_alt.glsl index 04bc402b..2edd3dca 100644 --- a/platform/base_glsl.pk3dir/glsl/vertexlit_specularcube_alt.glsl +++ b/platform/base_glsl.pk3dir/glsl/vertexlit_specularcube_alt.glsl @@ -16,10 +16,9 @@ !!cvardf r_glsl_pcf !!samps =FAKESHADOWS shadowmap -!!cvardf dev_skipdiffuse -!!cvardf dev_skipnormal -!!cvardf dev_skipspecular -!!cvardf dev_skipenvmaps +!!cvardf r_skipDiffuse +!!cvardf r_skipNormal +!!cvardf r_skipSpecular #include "sys/defs.h" @@ -79,27 +78,26 @@ varying mat3 invsurface; vec3 new_e_light_dir = vec3(cos(e_time), sin(e_time), 0); vec3 light; - #ifdef HALFLAMBERT - light = e_light_ambient + (e_light_mul * halflambert(norm, e_light_dir)); - #else - light = e_light_ambient + (e_light_mul * lambert(norm, e_light_dir)); - #endif + #ifdef HALFLAMBERT + light = e_light_ambient + (e_light_mul * halflambert(norm, e_light_dir)); + #else + light = e_light_ambient + (e_light_mul * lambert(norm, e_light_dir)); + #endif + #if r_skipSpecular==0 + // gloss pass + vec3 halfdir = normalize(normalize(eyevector) + e_light_dir); + vec3 bumps = normalize(invsurface * (normal_f)); + float spec = pow(max(dot(halfdir, bumps), 0.0), FTE_SPECULAR_EXPONENT); + spec *= 5.0 * (1.0 - gloss); + diffuse_f.rgb += spec; + // envmap pass + cube_c = reflect(normalize(-eyevector), normal_f.rgb * 0.5); + cube_c = cube_c.x * invsurface[0] + cube_c.y * invsurface[1] + cube_c.z * invsurface[2]; + cube_c = (m_model * vec4(cube_c.xyz, 0.0)).xyz; + diffuse_f.rgb = mix(textureCube(s_reflectcube, cube_c).rgb, diffuse_f.rgb, gloss); + #endif - if (float(dev_skipspecular) == 0.0) { - vec3 halfdir = normalize(normalize(eyevector) + e_light_dir); - vec3 bumps = normalize(invsurface * (normal_f)); - float spec = pow(max(dot(halfdir, bumps), 0.0), FTE_SPECULAR_EXPONENT); - spec *= 5.0 * (1.0 - gloss); - diffuse_f.rgb += spec; - } - - if (float(dev_skipenvmaps) == 0.0) { - cube_c = reflect(normalize(-eyevector), normal_f.rgb * 0.5); - cube_c = cube_c.x * invsurface[0] + cube_c.y * invsurface[1] + cube_c.z * invsurface[2]; - cube_c = (m_model * vec4(cube_c.xyz, 0.0)).xyz; - diffuse_f.rgb = mix(textureCube(s_reflectcube, cube_c).rgb, diffuse_f.rgb, gloss); - } diffuse_f.rgb *= light; #ifdef FAKESHADOWS