mirror of
https://github.com/cemu-project/cemu_graphic_packs.git
synced 2024-11-30 13:24:15 +01:00
76 lines
2.5 KiB
Plaintext
76 lines
2.5 KiB
Plaintext
|
#version 430
|
||
|
#extension GL_ARB_texture_gather : enable
|
||
|
#extension GL_ARB_separate_shader_objects : enable
|
||
|
|
||
|
|
||
|
// shader 5f422bf63e25be7f: desaturates colors (shadow world only)
|
||
|
// desaturates the image by shifting colors towards the red channel
|
||
|
// used in shadow world only, as far as tested
|
||
|
// grading values always seem to be: 1.0, 1.0, 1.0, ~0.33
|
||
|
|
||
|
|
||
|
#ifdef VULKAN
|
||
|
#define ATTR_LAYOUT(__vkSet, __location) layout(set = __vkSet, location = __location)
|
||
|
#define UNIFORM_BUFFER_LAYOUT(__glLocation, __vkSet, __vkLocation) layout(set = __vkSet, binding = __vkLocation, std140)
|
||
|
#define TEXTURE_LAYOUT(__glLocation, __vkSet, __vkLocation) layout(set = __vkSet, binding = __vkLocation)
|
||
|
#define GET_FRAGCOORD() vec4(gl_FragCoord.xy*uf_fragCoordScale.xy,gl_FragCoord.z, 1.0/gl_FragCoord.w)
|
||
|
|
||
|
layout(set = 1, binding = 1) uniform ufBlock
|
||
|
{
|
||
|
uniform ivec4 uf_remappedPS[1]; // grading
|
||
|
};
|
||
|
|
||
|
#else
|
||
|
#define ATTR_LAYOUT(__vkSet, __location) layout(location = __location)
|
||
|
#define UNIFORM_BUFFER_LAYOUT(__glLocation, __vkSet, __vkLocation) layout(binding = __glLocation, std140)
|
||
|
#define TEXTURE_LAYOUT(__glLocation, __vkSet, __vkLocation) layout(binding = __glLocation)
|
||
|
#define GET_FRAGCOORD() vec4(gl_FragCoord.xy*uf_fragCoordScale,gl_FragCoord.zw)
|
||
|
|
||
|
uniform ivec4 uf_remappedPS[1]; // grading
|
||
|
|
||
|
#endif
|
||
|
|
||
|
|
||
|
TEXTURE_LAYOUT(0, 1, 0) uniform sampler2D textureUnitPS0; // frame
|
||
|
layout(location = 0) in vec4 passParameterSem1; // pixel coordinate
|
||
|
layout(location = 0) out vec4 passPixelColor0; // output. w is alpha, overlayed
|
||
|
|
||
|
|
||
|
// more compatible interpolation
|
||
|
float mixf(float x, float y, float a)
|
||
|
{
|
||
|
return x * (1.0 - a) + y * a;
|
||
|
}
|
||
|
|
||
|
|
||
|
void main()
|
||
|
{
|
||
|
// get texel color
|
||
|
vec2 coord = passParameterSem1.xy;
|
||
|
vec3 texel = texture(textureUnitPS0, coord).xyz;
|
||
|
|
||
|
// get grading
|
||
|
vec4 grading = vec4(0.0);
|
||
|
grading.x = intBitsToFloat(uf_remappedPS[0].x); // 1.0
|
||
|
grading.y = intBitsToFloat(uf_remappedPS[0].y); // 1.0
|
||
|
grading.z = intBitsToFloat(uf_remappedPS[0].z); // 1.0
|
||
|
grading.w = intBitsToFloat(uf_remappedPS[0].w); // alpha, ~0.33
|
||
|
|
||
|
// shift towards red channel
|
||
|
vec4 color = vec4(0.0);
|
||
|
color.x = texel.x * grading.x; // red * 1.0
|
||
|
color.y = texel.x * grading.y; // red * 1.0
|
||
|
color.z = texel.x * grading.z; // red * 1.0
|
||
|
color.w = mixf(0.0, grading.w, $shadow_world_desaturation); // apply custom strength
|
||
|
|
||
|
// export
|
||
|
passPixelColor0 = vec4(color.x, color.y, color.z, color.w);
|
||
|
|
||
|
|
||
|
// test current grading colors
|
||
|
//passPixelColor0 = vec4(grading.x, grading.y, grading.z, 1.0);
|
||
|
|
||
|
// test current grading alpha
|
||
|
//passPixelColor0 = vec4(grading.w, grading.w, grading.w, 1.0);
|
||
|
}
|