mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2024-12-03 09:32:31 +00:00
8c5c39cbe4
I'd forgotten (when doing the original brush texture loader) that turbulent surfaces were unlit and thus always full-bright, then never wrote the turb shader to take care of it. The best solution seems to be to just mix the two colors in the shader as it will allow turb surfaces to be lit in the future (probably with severely limited light counts due to being a forward renderer).
56 lines
1.4 KiB
GLSL
56 lines
1.4 KiB
GLSL
#version 450
|
|
|
|
layout (constant_id = 0) const int MaxTextures = 256;
|
|
|
|
layout (set = 1, binding = 0) uniform sampler samp;
|
|
layout (set = 1, binding = 1) uniform texture2DArray textures[MaxTextures];
|
|
|
|
layout (push_constant) uniform PushConstants {
|
|
layout (offset = 64)
|
|
vec4 fog;
|
|
float time;
|
|
int texind;
|
|
};
|
|
|
|
layout (location = 0) in vec4 tl_st;
|
|
layout (location = 1) in vec3 direction;
|
|
|
|
layout (location = 0) out vec4 frag_color;
|
|
|
|
const float PI = 3.14159265;
|
|
const float SPEED = 20.0;
|
|
const float CYCLE = 128.0;
|
|
const float FACTOR = PI * 2.0 / CYCLE;
|
|
const vec2 BIAS = vec2 (1.0, 1.0);
|
|
const float SCALE = 8.0;
|
|
|
|
vec2
|
|
warp_st (vec2 st, float time)
|
|
{
|
|
vec2 angle = st.ts * CYCLE / 2.0;
|
|
vec2 phase = vec2 (time, time) * SPEED;
|
|
return st + (sin ((angle + phase) * FACTOR) + BIAS) / SCALE;
|
|
}
|
|
|
|
vec4
|
|
fogBlend (vec4 color)
|
|
{
|
|
float az = fog.a * gl_FragCoord.z / gl_FragCoord.w;
|
|
vec3 fog_color = fog.rgb;
|
|
float fog_factor = exp (-az * az);
|
|
|
|
return vec4 (mix (fog_color.rgb, color.rgb, fog_factor), color.a);
|
|
}
|
|
|
|
void
|
|
main (void)
|
|
{
|
|
vec4 c = vec4 (0);
|
|
vec4 e;
|
|
vec3 t_st = vec3 (warp_st (tl_st.xy, time), 0);
|
|
vec3 e_st = vec3 (warp_st (tl_st.xy, time), 1);
|
|
|
|
c = texture (sampler2DArray (textures[texind], samp), t_st);
|
|
e = texture (sampler2DArray (textures[texind], samp), e_st);
|
|
frag_color = c + e;//fogBlend (c);
|
|
}
|