[gd_scene load_steps=13 format=2] [ext_resource path="res://material_maker/widgets/histogram/histogram.gd" type="Script" id=1] [sub_resource type="Shader" id=1] resource_local_to_scene = true code = "shader_type canvas_item; render_mode blend_disabled; void fragment() { COLOR = vec4(0.0); } " [sub_resource type="ShaderMaterial" id=3] resource_local_to_scene = true shader = SubResource( 1 ) [sub_resource type="Shader" id=4] code = "shader_type canvas_item; render_mode blend_disabled; uniform sampler2D tex; uniform float size = 256; void fragment() { float e = 1.0/size; vec4 sum = vec4(0.0); for (float y = 0.5*e; y < 1.0; y += e) { sum += max(vec4(0.0), vec4(1.0)-16.0*abs(texture(tex, vec2(UV.x, y))-UV.y)); } COLOR = sum/size; } " [sub_resource type="ViewportTexture" id=5] viewport_path = NodePath("ViewportImage") [sub_resource type="ShaderMaterial" id=6] resource_local_to_scene = true shader = SubResource( 4 ) shader_param/size = 256 shader_param/tex = SubResource( 5 ) [sub_resource type="Shader" id=7] code = "shader_type canvas_item; render_mode blend_disabled; uniform sampler2D tex; uniform float size = 256; void fragment() { float e = 1.0/size; vec4 sum = vec4(0.0); for (float y = 0.5*e; y < 1.0; y += e) { sum += texture(tex, vec2(y, UV.x)); } COLOR = sum/size; }" [sub_resource type="ViewportTexture" id=8] viewport_path = NodePath("ViewportHistogram1") [sub_resource type="ShaderMaterial" id=9] resource_local_to_scene = true shader = SubResource( 7 ) shader_param/size = 256 shader_param/tex = SubResource( 8 ) [sub_resource type="Shader" id=10] code = "shader_type canvas_item; render_mode blend_disabled; uniform sampler2D tex; uniform float gradient_width = 0.1; void fragment() { if (abs(fract(UV.y+gradient_width)) < 2.0*gradient_width) { COLOR = vec4(vec3(UV.x), 1.0); } else { float e = 1.0/256.0; vec4 highest = vec4(0.0); for (float x = 0.5*e; x < 1.0; x += e) { highest = max(highest, texture(tex, vec2(x, 0.0))); } vec4 raw_value = texture(tex, vec2(UV.x, 0.0)); vec4 value = step(vec4(1.0-gradient_width-UV.y)*highest/(1.0-2.0*gradient_width), raw_value); float alpha = step(2.0*gradient_width, dot(value, vec4(1.0))); COLOR = vec4(mix(value.rgb, vec3(0.5), 0.3*value.a), alpha); } }" [sub_resource type="ViewportTexture" id=11] flags = 4 viewport_path = NodePath("ViewportHistogram2") [sub_resource type="ShaderMaterial" id=12] resource_local_to_scene = true shader = SubResource( 10 ) shader_param/gradient_width = 0.1 shader_param/tex = SubResource( 11 ) [node name="Histogram" type="Control" groups=["preview"]] margin_right = 64.0 margin_bottom = 64.0 script = ExtResource( 1 ) [node name="ViewportImage" type="Viewport" parent="."] size = Vector2( 256, 256 ) transparent_bg = true hdr = false usage = 0 render_target_v_flip = true render_target_update_mode = 1 [node name="ColorRect" type="ColorRect" parent="ViewportImage"] material = SubResource( 3 ) margin_right = 256.0 margin_bottom = 256.0 [node name="ViewportHistogram1" type="Viewport" parent="."] size = Vector2( 256, 256 ) own_world = true transparent_bg = true disable_3d = true keep_3d_linear = true render_target_v_flip = true render_target_update_mode = 1 [node name="ColorRect" type="ColorRect" parent="ViewportHistogram1"] material = SubResource( 6 ) margin_right = 256.0 margin_bottom = 256.0 [node name="ViewportHistogram2" type="Viewport" parent="."] size = Vector2( 256, 2 ) transparent_bg = true disable_3d = true keep_3d_linear = true render_target_v_flip = true render_target_update_mode = 1 [node name="ColorRect" type="ColorRect" parent="ViewportHistogram2"] material = SubResource( 9 ) margin_right = 256.0 margin_bottom = 2.0 [node name="Control" type="ColorRect" parent="."] material = SubResource( 12 ) anchor_right = 1.0 anchor_bottom = 1.0