material-maker/material_maker/tools/painter/shaders/paint_pattern.shader

23 lines
800 B
GLSL

#include paint_header
#include paint_brush_functions
void fragment() {
#include paint_fragment_common
mat2 texture_rotation = mat2(vec2(cos(pattern_angle), sin(pattern_angle)), vec2(-sin(pattern_angle), cos(pattern_angle)));
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));
float a = fill ? 1.0 : brush(0.5*local_uv+vec2(0.5))*color.a*tex2view.z;
vec4 screen_color = texture(SCREEN_TEXTURE, UV);
if (erase) {
COLOR = vec4(screen_color.xyz, max(screen_color.a-a, 0.0));
} else if (reset) {
COLOR = vec4(color.xyz, a);
} else {
float alpha_sum = min(1.0, a + screen_color.a);
COLOR = vec4((color.xyz*a+screen_color.xyz*(vec3(alpha_sum)-a))/alpha_sum, alpha_sum);
}
}