mirror of
https://github.com/open-goal/jak-project
synced 2026-08-17 21:43:27 -04:00
83 lines
1.8 KiB
GLSL
83 lines
1.8 KiB
GLSL
#version 410 core
|
|
|
|
|
|
out vec4 color;
|
|
in vec2 tex_coord;
|
|
|
|
uniform float alpha_reject;
|
|
uniform float color_mult;
|
|
uniform vec4 fog_color;
|
|
in float fog;
|
|
in vec4 fragment_color;
|
|
|
|
flat in uvec2 tex_info;
|
|
|
|
uniform int gfx_hack_no_tex;
|
|
uniform uint warp_sample_mode;
|
|
|
|
uniform sampler2D tex_T0;
|
|
|
|
vec4 sample_tex(vec2 coord, uint unit) {
|
|
return texture(tex_T0, coord);
|
|
}
|
|
|
|
void main() {
|
|
// 0x1 is tcc
|
|
// 0x2 is decal
|
|
// 0x4 is fog
|
|
|
|
if (warp_sample_mode == 1 || gfx_hack_no_tex == 0) {
|
|
vec4 T0 = sample_tex(tex_coord.xy, tex_info.x);
|
|
if ((tex_info.y & 1u) == 0) {
|
|
if ((tex_info.y & 2u) == 0) {
|
|
// modulate + no tcc
|
|
color.rgb = fragment_color.rgb * T0.rgb;
|
|
color.a = fragment_color.a;
|
|
} else {
|
|
// decal + no tcc
|
|
color.rgb = T0.rgb * 0.5;
|
|
color.a = fragment_color.a;
|
|
}
|
|
} else {
|
|
if ((tex_info.y & 2u) == 0) {
|
|
// modulate + tcc
|
|
color = fragment_color * T0;
|
|
} else {
|
|
// decal + tcc
|
|
color.rgb = T0.rgb * 0.5;
|
|
color.a = T0.a;
|
|
}
|
|
}
|
|
color *= 2;
|
|
} else {
|
|
if ((tex_info.y & 1u) == 0) {
|
|
if ((tex_info.y & 2u) == 0) {
|
|
// modulate + no tcc
|
|
color.rgb = fragment_color.rgb;
|
|
color.a = fragment_color.a * 2;
|
|
} else {
|
|
// decal + no tcc
|
|
color.rgb = vec3(1);
|
|
color.a = fragment_color.a * 2;
|
|
}
|
|
} else {
|
|
if ((tex_info.y & 2u) == 0) {
|
|
// modulate + tcc
|
|
color = fragment_color;
|
|
} else {
|
|
// decal + tcc
|
|
color.rgb = vec3(0.5);
|
|
color.a = 1.0;
|
|
}
|
|
}
|
|
}
|
|
color.rgb *= color_mult;
|
|
|
|
if (color.a < alpha_reject) {
|
|
discard;
|
|
}
|
|
if ((tex_info.y & 4u) != 0) {
|
|
color.xyz = mix(color.xyz, fog_color.rgb, clamp(fog_color.a * fog, 0, 1));
|
|
}
|
|
}
|