135 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			135 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| 
								 | 
							
								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 float opacity:hint_range(0,1) = 1;
							 | 
						||
| 
								 | 
							
								uniform bool blendLinear = false;
							 | 
						||
| 
								 | 
							
								uniform vec2 size; 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								group_uniforms Background; 
							 | 
						||
| 
								 | 
							
								uniform float sharpness = 5;
							 | 
						||
| 
								 | 
							
								uniform float borderRadius = 5;
							 | 
						||
| 
								 | 
							
								uniform float offset;
							 | 
						||
| 
								 | 
							
								group_uniforms; 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								group_uniforms BackgroundFill; 
							 | 
						||
| 
								 | 
							
								uniform vec4 fillColor:source_color;
							 | 
						||
| 
								 | 
							
								uniform sampler2D fill;
							 | 
						||
| 
								 | 
							
								uniform vec4 fillUVTransform;
							 | 
						||
| 
								 | 
							
								uniform sampler2D screenFillMultiply; 
							 | 
						||
| 
								 | 
							
								uniform vec4 screenfillMultiplyUVTransform;
							 | 
						||
| 
								 | 
							
								uniform vec2 screenfillMultiplyUVMovement;
							 | 
						||
| 
								 | 
							
								group_uniforms; 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								group_uniforms BackgroundStroke; 
							 | 
						||
| 
								 | 
							
								uniform float strokeSize = 5;
							 | 
						||
| 
								 | 
							
								uniform vec4 strokeColor:source_color;
							 | 
						||
| 
								 | 
							
								uniform sampler2D stroke;
							 | 
						||
| 
								 | 
							
								uniform vec4 strokeUVTransform;
							 | 
						||
| 
								 | 
							
								uniform sampler2D screenStrokeMultiply;
							 | 
						||
| 
								 | 
							
								uniform vec4 screenStrokeMultiplyUVTransform;
							 | 
						||
| 
								 | 
							
								uniform vec2 screenStrokeMultiplyUVMovment;
							 | 
						||
| 
								 | 
							
								group_uniforms; 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								group_uniforms Slider; 
							 | 
						||
| 
								 | 
							
								uniform vec2 sliderSize;
							 | 
						||
| 
								 | 
							
								uniform vec2 sliderSizeMargins;
							 | 
						||
| 
								 | 
							
								uniform float sliderBorders;
							 | 
						||
| 
								 | 
							
								uniform vec2 sliderValue;
							 | 
						||
| 
								 | 
							
								group_uniforms; 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								group_uniforms SliderFill;
							 | 
						||
| 
								 | 
							
								uniform vec4 sliderFillColor:source_color;
							 | 
						||
| 
								 | 
							
								group_uniforms; 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								group_uniforms SliderStroke;
							 | 
						||
| 
								 | 
							
								uniform vec4 sliderStrokeColor:source_color;
							 | 
						||
| 
								 | 
							
								uniform float sliderStrokeSize = 2;
							 | 
						||
| 
								 | 
							
								group_uniforms; 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								vec4 createBorders( float borderSize, vec2 rectSize )
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  float minS = min( rectSize.x, rectSize.y ); 
							 | 
						||
| 
								 | 
							
								  vec4 borders = vec4( min( minS, borderSize ) ); 
							 | 
						||
| 
								 | 
							
								  // borders.xz = min( borders.xz, vec2( rectSize.x / 4.0 ) ); 
							 | 
						||
| 
								 | 
							
								  // borders.yw = min( borders.yw, vec2( rectSize.y / 4.0 ) ); 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return borders;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								vec4 getSliderLayer( vec2 pixelPosition )
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  vec2 sliderValueRange = size - ( sliderSize + sliderSizeMargins );
							 | 
						||
| 
								 | 
							
								  vec2 sliderValueOffset = ( sliderSize + sliderSizeMargins ) / 2.0;
							 | 
						||
| 
								 | 
							
								  vec2 sliderPosition = sliderValueOffset + sliderValueRange * sliderValue;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  vec4 borders = createBorders( sliderBorders, sliderSize ); 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  float sd = sdRoundedBox( pixelPosition - sliderPosition, sliderSize / 2.0, borders );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // vec4 sliderLayer = sdf_coloredShape( sd, sliderStrokeSize, sliderFillColor, sliderStrokeColor );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  vec2 sliderShape = sdf_shape( sd, sliderStrokeSize );
							 | 
						||
| 
								 | 
							
								  vec4 sliderFill = fade( sliderFillColor, sliderShape.x );
							 | 
						||
| 
								 | 
							
								  vec4 sliderStroke = fade( sliderStrokeColor, sliderShape.y );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  vec4 sliderLayer = blendMode_alpha( sliderFill, sliderStroke ); 
							 | 
						||
| 
								 | 
							
								  sliderLayer = sdf_coloredShape( sd, sliderStrokeSize, sliderFillColor, sliderStrokeColor );
							 | 
						||
| 
								 | 
							
								  // float sliderMask = sdf_stroke( sdRoundedBox( pixelPosition - sliderPosition, sliderSize2, borders ) );
							 | 
						||
| 
								 | 
							
								  // vec4 sliderLayer = vec4( _sliderColor.rgb, _sliderColor.a * sliderMask );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return sliderLayer;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void fragment()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  // Fill
							 | 
						||
| 
								 | 
							
								  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 );
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  // Stroke
							 | 
						||
| 
								 | 
							
								  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 pixelPosition = size * UV;
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  vec4 bgBorders = createBorders( borderRadius, size / 2.0 - vec2( offset  ) );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  float bgSD = sdRoundedBox( pixelPosition - size / 2.0, size / 2.0 - vec2( offset ), bgBorders );
							 | 
						||
| 
								 | 
							
								  vec4 bgLayer = sdf_coloredShape( bgSD, strokeSize, combinedfillColor, combinedStrokeColor );
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  float sliderDistance =  length( pixelPosition - sliderValue );
							 | 
						||
| 
								 | 
							
								  vec4 sliderLayer = getSliderLayer( pixelPosition );
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  if ( blendLinear )
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								    bgLayer.rgb  = SRGBtoLINEAR( bgLayer.rgb );
							 | 
						||
| 
								 | 
							
								    sliderLayer.rgb  = SRGBtoLINEAR( sliderLayer.rgb );
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  vec4 outputColor = blendMode_alpha( bgLayer, sliderLayer );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if ( blendLinear )
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								    outputColor.rgb = LINEARtoSRGB( outputColor.rgb );
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  vec4 tex = texture( TEXTURE, UV );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  COLOR = vec4( outputColor.rgb * tex.rgb, outputColor.a * opacity * tex.a);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 |