gpu: fix lighting textures

The passed hsl for textured triangles is a 7-bit lightness, and should
be directly multiplied into the texture color
This commit is contained in:
Adam
2021-01-02 16:34:50 -05:00
parent 1dba59c89d
commit 4ca8ef4d40

View File

@@ -43,26 +43,29 @@ out vec4 FragColor;
#include colorblind.glsl #include colorblind.glsl
void main() { void main() {
int hsl = int(fHsl); vec4 c;
vec3 rgb = hslToRgb(hsl) * smoothBanding + Color.rgb * (1.f - smoothBanding);
vec4 smoothColor = vec4(rgb, Color.a);
if (textureId > 0) { if (textureId > 0) {
int textureIdx = textureId - 1; int textureIdx = textureId - 1;
vec2 uv = fUv; vec2 animatedUv = fUv + textureOffsets[textureIdx];
vec2 animatedUv = uv + textureOffsets[textureIdx];
vec4 textureColor = texture(textures, vec3(animatedUv, float(textureIdx))); vec4 textureColor = texture(textures, vec3(animatedUv, float(textureIdx)));
vec4 textureColorBrightness = pow(textureColor, vec4(brightness, brightness, brightness, 1.0f)); vec4 textureColorBrightness = pow(textureColor, vec4(brightness, brightness, brightness, 1.0f));
smoothColor = textureColorBrightness * smoothColor; // textured triangles hsl is a 7 bit lightness 2-126
float light = fHsl / 127.f;
c = textureColorBrightness * vec4(light, light, light, 1.f);
} else {
// pick interpolated hsl or rgb depending on smooth banding setting
vec3 rgb = hslToRgb(int(fHsl)) * smoothBanding + Color.rgb * (1.f - smoothBanding);
c = vec4(rgb, Color.a);
} }
if (colorBlindMode > 0) { if (colorBlindMode > 0) {
smoothColor.rgb = colorblind(colorBlindMode, smoothColor.rgb); c.rgb = colorblind(colorBlindMode, c.rgb);
} }
vec3 mixedColor = mix(smoothColor.rgb, fogColor.rgb, fogAmount); vec3 mixedColor = mix(c.rgb, fogColor.rgb, fogAmount);
FragColor = vec4(mixedColor, smoothColor.a); FragColor = vec4(mixedColor, c.a);
} }