| 
									
										
										
										
											2025-02-12 16:48:15 +00:00
										 |  |  | shader_type canvas_item; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "res://addons/rokojori_action_library/Runtime/Shading/Library/Colors.gdshaderinc" | 
					
						
							|  |  |  | #include "res://addons/rokojori_action_library/Runtime/Shading/Library/Math.gdshaderinc" | 
					
						
							|  |  |  | #include "res://addons/rokojori_action_library/Runtime/Shading/Library/Transform.gdshaderinc" | 
					
						
							|  |  |  | #include "res://addons/rokojori_action_library/Runtime/Shading/Library/SDF.gdshaderinc" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | uniform vec2 size; | 
					
						
							|  |  |  | uniform float sharpness = 5; | 
					
						
							|  |  |  | uniform float borderRadius = 5; | 
					
						
							|  |  |  | uniform float strokeSize = 5; | 
					
						
							|  |  |  | uniform float offset; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | uniform vec4 fillColor:source_color; | 
					
						
							|  |  |  | uniform sampler2D fill; | 
					
						
							|  |  |  | uniform vec4 fillUVTransform; | 
					
						
							|  |  |  | uniform sampler2D screenFillMultiply; | 
					
						
							|  |  |  | uniform vec4 screenfillMultiplyUVTransform; | 
					
						
							|  |  |  | uniform vec2 screenfillMultiplyUVMovement; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | uniform vec4 strokeColor:source_color; | 
					
						
							|  |  |  | uniform sampler2D stroke; | 
					
						
							|  |  |  | uniform vec4 strokeUVTransform; | 
					
						
							|  |  |  | uniform sampler2D screenStrokeMultiply; | 
					
						
							|  |  |  | uniform vec4 screenStrokeMultiplyUVTransform; | 
					
						
							|  |  |  | uniform vec2 screenStrokeMultiplyUVMovment; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | uniform float opacity:hint_range(0,1) = 1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void vertex() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	// Called for every vertex the material is visible on. | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void fragment() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   float maxRadius = min( size.x, size.y ) / 2.0 - offset; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   vec2 fillMinP; | 
					
						
							|  |  |  |   vec2 fillMaxP; | 
					
						
							|  |  |  |   float fillRadius; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   computeRectangleBounds( offset, borderRadius, maxRadius, size, fillMinP, fillMaxP, fillRadius ); | 
					
						
							|  |  |  |   float fillMask = roundedRectangle( fillMinP, fillMaxP, UV * size, fillRadius, sharpness ); | 
					
						
							|  |  |  |   vec2 fillUV = tilingOffsetRepeat( UV, fillUVTransform ); | 
					
						
							|  |  |  |   vec2 fillMoved = screenfillMultiplyUVMovement * TIME; | 
					
						
							|  |  |  |   vec4 screenFillMovement = vec4( 0,0, fillMoved.x, fillMoved.y ); | 
					
						
							|  |  |  |   vec2 screenFillMultiplyUV = tilingOffsetRepeat( SCREEN_UV, screenfillMultiplyUVTransform + screenFillMovement ); | 
					
						
							|  |  |  |   vec4 combinedfillColor = fillColor * texture( fill, fillUV ) * texture( screenFillMultiply, screenFillMultiplyUV ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   vec2 strokeMinP; | 
					
						
							|  |  |  |   vec2 strokeMaxP; | 
					
						
							|  |  |  |   float strokeRadius; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   computeRectangleBounds( offset - strokeSize, borderRadius + strokeSize, maxRadius, size,strokeMinP, strokeMaxP, strokeRadius ); | 
					
						
							|  |  |  |   float outerStrokeMask = roundedRectangle( strokeMinP, strokeMaxP, UV * size, strokeRadius, sharpness ); | 
					
						
							|  |  |  |   float strokeMask = outerStrokeMask - fillMask; | 
					
						
							|  |  |  |   vec2 strokeUV = tilingOffsetRepeat( UV, strokeUVTransform ); | 
					
						
							|  |  |  |   vec2 strokeMoved = screenStrokeMultiplyUVMovment * TIME; | 
					
						
							|  |  |  |   vec4 screenstrokeMovement = vec4( 0,0, strokeMoved.x, strokeMoved.y ); | 
					
						
							|  |  |  |   vec2 screenStrokeMultiplyUV = tilingOffsetRepeat( SCREEN_UV, screenStrokeMultiplyUVTransform + screenstrokeMovement ); | 
					
						
							|  |  |  |   vec4 combinedStrokeColor = strokeColor * texture( stroke, strokeUV ) * texture( screenStrokeMultiply, screenStrokeMultiplyUV ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   vec2 fillMaskMinP; | 
					
						
							|  |  |  |   vec2 fillMaskMaxP; | 
					
						
							|  |  |  |   float fillMaskStrokeRadius; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   computeRectangleBounds( offset - strokeSize * 0.5, borderRadius + strokeSize, maxRadius, size, fillMaskMinP, fillMaskMaxP, fillMaskStrokeRadius ); | 
					
						
							|  |  |  |   float fillAlphaMask = roundedRectangle( fillMaskMinP, fillMaskMaxP, UV * size, fillMaskStrokeRadius, sharpness ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   vec4 strokeLayer = vec4( combinedStrokeColor.rgb, combinedStrokeColor.a ); | 
					
						
							|  |  |  |   vec4 fillLayer = vec4( combinedfillColor.rgb, combinedfillColor.a * fillAlphaMask ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   vec4 strokePM = straightToPremultipliedColor( strokeLayer ); | 
					
						
							|  |  |  |   vec4 fillPM   = straightToPremultipliedColor( fillLayer ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   vec4 outputColor = premultipliedToStraightColor( mix( fillPM, strokePM, strokeMask ) ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   float mask = max ( fillMask , strokeMask ); | 
					
						
							|  |  |  |   mask = fillMask + strokeMask; | 
					
						
							| 
									
										
										
										
											2025-06-19 17:22:25 +00:00
										 |  |  |    | 
					
						
							|  |  |  |   vec4 tex = texture( TEXTURE, UV ); | 
					
						
							| 
									
										
										
										
											2025-02-12 16:48:15 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-06-19 17:22:25 +00:00
										 |  |  |   COLOR = vec4( outputColor.rgb * tex.rgb, outputColor.a * mask * opacity * tex.a); | 
					
						
							| 
									
										
										
										
											2025-02-12 16:48:15 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// Called for every pixel the material is visible on. | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //void light() { | 
					
						
							|  |  |  | 	// Called for every pixel for every light affecting the CanvasItem. | 
					
						
							|  |  |  | 	// Uncomment to replace the default light processing function with this one. | 
					
						
							|  |  |  | //} |