paint: fix layer_merge
This commit is contained in:
@@ -41,7 +41,7 @@ fun layer_merge_vert(input: vert_in): vert_out {
|
||||
fun hsv_to_rgb(c: float3): float3 {
|
||||
var K: float4 = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);
|
||||
var p: float3 = abs3(frac3(c.xxx + K.xyz) * 6.0 - K.www);
|
||||
return c.z * lerp3(K.xxx, clamp3(p - K.xxx, 0.0, 1.0), c.y);
|
||||
return c.z * lerp3(K.xxx, clamp3(p - K.xxx, float3(0.0, 0.0, 0.0), float3(1.0, 1.0, 1.0)), c.y);
|
||||
}
|
||||
|
||||
fun rgb_to_hsv(c: float3): float3 {
|
||||
@@ -133,63 +133,40 @@ fun layer_merge_frag(input: vert_out): float4 {
|
||||
lerp3(cola.rgb, cola.rgb + col0.rgb, str),
|
||||
max(col0.a * maskr, cola.a));
|
||||
}
|
||||
|
||||
////
|
||||
|
||||
/* TODO: SPIRV
|
||||
|
||||
if (constants.blending == 8) { // Overlay
|
||||
var rr: float;
|
||||
if (cola.r < 0.5) {
|
||||
rr = 2.0 * cola.r * col0.r;
|
||||
}
|
||||
else {
|
||||
rr = 1.0 - 2.0 * (1.0 - cola.r) * (1.0 - col0.r);
|
||||
}
|
||||
var gg: float;
|
||||
if (cola.r < 0.5) {
|
||||
gg = 2.0 * cola.g * col0.g;
|
||||
}
|
||||
else {
|
||||
gg = 1.0 - 2.0 * (1.0 - cola.g) * (1.0 - col0.g);
|
||||
}
|
||||
var bb: float;
|
||||
if (cola.r < 0.5) {
|
||||
bb = 2.0 * cola.b * col0.b;
|
||||
}
|
||||
else {
|
||||
bb = 1.0 - 2.0 * (1.0 - cola.b) * (1.0 - col0.b);
|
||||
}
|
||||
var rr: float = lerp(2.0 * cola.r * col0.r, 1.0 - 2.0 * (1.0 - cola.r) * (1.0 - col0.r), step(0.5, cola.r));
|
||||
var gg: float = lerp(2.0 * cola.g * col0.g, 1.0 - 2.0 * (1.0 - cola.g) * (1.0 - col0.g), step(0.5, cola.g));
|
||||
var bb: float = lerp(2.0 * cola.b * col0.b, 1.0 - 2.0 * (1.0 - cola.b) * (1.0 - col0.b), step(0.5, cola.b));
|
||||
return float4(
|
||||
lerp3(cola.rgb, float3(rr, gg, bb), str),
|
||||
max(col0.a, cola.a));
|
||||
max(col0.a * maskr, cola.a));
|
||||
}
|
||||
if (constants.blending == 9) { // Soft Light
|
||||
return float4(
|
||||
((1.0 - str) * cola.rgb +
|
||||
str * ((float3(1.0, 1.0, 1.0) - cola.rgb) * col0.rgb * cola.rgb +
|
||||
cola.rgb * (float3(1.0, 1.0, 1.0) - (float3(1.0, 1.0, 1.0) - col0.rgb) * (float3(1.0, 1.0, 1.0) - cola.rgb)))),
|
||||
max(col0.a, cola.a));
|
||||
max(col0.a * maskr, cola.a));
|
||||
}
|
||||
if (constants.blending == 10) { // Linear Light
|
||||
return float4(
|
||||
(cola.rgb + str * (float3(2.0, 2.0, 2.0) * (col0.rgb - float3(0.5, 0.5, 0.5)))),
|
||||
max(col0.a, cola.a));
|
||||
max(col0.a * maskr, cola.a));
|
||||
}
|
||||
if (constants.blending == 11) {
|
||||
if (constants.blending == 11) { // Difference
|
||||
return float4(
|
||||
lerp3(cola.rgb, abs3(cola.rgb - col0.rgb), str),
|
||||
max(col0.a, cola.a));
|
||||
max(col0.a * maskr, cola.a));
|
||||
}
|
||||
if (constants.blending == 12) { // Subtract
|
||||
return float4(
|
||||
lerp3(cola.rgb, cola.rgb - col0.rgb, str),
|
||||
max(col0.a, cola.a));
|
||||
max(col0.a * maskr, cola.a));
|
||||
}
|
||||
if (constants.blending == 13) { // Divide
|
||||
return float4(
|
||||
float3(1.0 - str, 1.0 - str, 1.0 - str) * cola.rgb + float3(str, str, str) * cola.rgb / col0.rgb,
|
||||
max(col0.a, cola.a));
|
||||
max(col0.a * maskr, cola.a));
|
||||
}
|
||||
if (constants.blending == 14) { // Hue
|
||||
return float4(
|
||||
@@ -200,7 +177,7 @@ fun layer_merge_frag(input: vert_out): float4 {
|
||||
rgb_to_hsv(cola.rgb).g,
|
||||
rgb_to_hsv(cola.rgb).b)),
|
||||
str),
|
||||
max(col0.a, cola.a));
|
||||
max(col0.a * maskr, cola.a));
|
||||
}
|
||||
if (constants.blending == 15) { // Saturation
|
||||
return float4(
|
||||
@@ -211,7 +188,7 @@ fun layer_merge_frag(input: vert_out): float4 {
|
||||
rgb_to_hsv(col0.rgb).g,
|
||||
rgb_to_hsv(cola.rgb).b)),
|
||||
str),
|
||||
max(col0.a, cola.a));
|
||||
max(col0.a * maskr, cola.a));
|
||||
}
|
||||
if (constants.blending == 16) { // Color
|
||||
return float4(
|
||||
@@ -222,7 +199,7 @@ fun layer_merge_frag(input: vert_out): float4 {
|
||||
rgb_to_hsv(col0.rgb).g,
|
||||
rgb_to_hsv(cola.rgb).b)),
|
||||
str),
|
||||
max(col0.a, cola.a));
|
||||
max(col0.a * maskr, cola.a));
|
||||
}
|
||||
if (constants.blending == 17) { // Value
|
||||
return float4(
|
||||
@@ -233,13 +210,9 @@ fun layer_merge_frag(input: vert_out): float4 {
|
||||
rgb_to_hsv(cola.rgb).g,
|
||||
rgb_to_hsv(col0.rgb).b)),
|
||||
str),
|
||||
max(col0.a, cola.a));
|
||||
max(col0.a * maskr, cola.a));
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
////
|
||||
|
||||
return float4(1.0, 1.0, 1.0, 1.0);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user