quakeforge/libs/video/renderer/vulkan/shader/alias_gbuf.frag
Bill Currie 053c2c47db [vulkan] Double alias top/bottom color values
The bright end of the color map is actually twice the palette value, but
I didn't understand this when I came up with the shirt/pants color
scheme for vulkan. However, the skin texture can store only 0..1, so the
mapping to 0..2 needs to be done in the shader. It looks like it works
at least better: the gold key at the end of demo1 doesn't look as bleh,
though I do get some weird colors still on ogres etc.
2022-11-14 11:35:26 +09:00

38 lines
946 B
GLSL

#version 450
layout (set = 1, binding = 0) uniform sampler2DArray Skin;
layout (push_constant) uniform PushConstants {
layout (offset = 68)
uint colorA;
uint colorB;
vec4 base_color;
vec4 fog;
};
layout (location = 0) in vec2 st;
layout (location = 1) in vec4 position;
layout (location = 2) in vec3 normal;
layout (location = 0) out vec4 frag_color;
layout (location = 1) out vec4 frag_emission;
layout (location = 2) out vec4 frag_normal;
layout (location = 3) out vec4 frag_position;
void
main (void)
{
vec4 c;
vec4 e;
int i;
vec3 light = vec3 (0);
c = texture (Skin, vec3 (st, 0)) * base_color;
c += texture (Skin, vec3 (st, 1)) * unpackUnorm4x8(colorA) * 2;
c += texture (Skin, vec3 (st, 2)) * unpackUnorm4x8(colorB) * 2;
e = texture (Skin, vec3 (st, 3));
frag_color = c;
frag_emission = e;
frag_normal = vec4(normalize(normal), 1);
frag_position = position;
}