2021-05-15 16:45:59 +02:00
|
|
|
#include paint_header
|
2021-05-26 08:29:45 +02:00
|
|
|
#include paint_brush_functions
|
2020-10-15 08:47:55 +02:00
|
|
|
|
|
|
|
void fragment() {
|
2021-05-26 08:29:45 +02:00
|
|
|
#include paint_fragment_common
|
|
|
|
|
2020-10-22 07:41:38 +02:00
|
|
|
mat2 texture_rotation = mat2(vec2(cos(pattern_angle), sin(pattern_angle)), vec2(-sin(pattern_angle), cos(pattern_angle)));
|
2020-10-19 23:13:45 +02:00
|
|
|
vec2 pattern_uv = pattern_scale*texture_rotation*(vec2(brush_size.y/brush_size.x, 1.0)*(xy - vec2(0.5, 0.5)));
|
|
|
|
vec4 color = pattern_function(fract(pattern_uv));
|
2020-11-01 22:52:21 +01:00
|
|
|
|
2020-11-08 15:10:46 +01:00
|
|
|
float a = fill ? 1.0 : brush(0.5*local_uv+vec2(0.5))*color.a*tex2view.z;
|
2020-11-01 22:52:21 +01:00
|
|
|
|
2020-10-15 08:47:55 +02:00
|
|
|
vec4 screen_color = texture(SCREEN_TEXTURE, UV);
|
|
|
|
if (erase) {
|
|
|
|
COLOR = vec4(screen_color.xyz, max(screen_color.a-a, 0.0));
|
2021-03-09 08:12:34 +01:00
|
|
|
} else if (reset) {
|
|
|
|
COLOR = vec4(color.xyz, a);
|
2020-10-15 08:47:55 +02:00
|
|
|
} else {
|
|
|
|
float alpha_sum = min(1.0, a + screen_color.a);
|
2020-10-19 23:13:45 +02:00
|
|
|
COLOR = vec4((color.xyz*a+screen_color.xyz*(vec3(alpha_sum)-a))/alpha_sum, alpha_sum);
|
2020-10-15 08:47:55 +02:00
|
|
|
}
|
|
|
|
}
|