-
-
Notifications
You must be signed in to change notification settings - Fork 338
Expand file tree
/
Copy pathdebug_popup.gd
More file actions
110 lines (100 loc) · 3.86 KB
/
debug_popup.gd
File metadata and controls
110 lines (100 loc) · 3.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
extends Window
var src_code
const GENFUNCTIONS : Array = [ "generate_shadertoy", "generate_godot_canvasitem", "generate_godot_spatial" ]
func _on_ready() -> void:
content_scale_factor = mm_globals.main_window.get_window().content_scale_factor
min_size = Vector2(500 ,500) * content_scale_factor
func show_code(s) -> void:
src_code = s
_on_ShaderType_item_selected(0)
if ! is_connected("popup_hide", Callable(self, "queue_free")):
connect("popup_hide", Callable(self, "queue_free"))
hide()
popup_centered()
func _on_ShaderType_item_selected(index):
if index < 3:
$VBoxContainer/Code.visible = true
$VBoxContainer/Code.text = call(GENFUNCTIONS[index])
$VBoxContainer/ColorRect.visible = false
else:
$VBoxContainer/Code.visible = false
$VBoxContainer/ColorRect.visible = true
var shader : Shader = Shader.new()
shader.code = generate_godot_canvasitem()
$VBoxContainer/ColorRect.material.shader = shader
func _on_CopyToClipboard_pressed():
DisplayServer.clipboard_set($VBoxContainer/Code.text)
func generate_shadertoy() -> String:
var code = "/* Generated by Material Maker */\n\n"
code += "#define SEED_VARIATION 0.0\n\n"
code += mm_renderer.common_shader
code += "\n"
code = code.replace("varying float elapsed_time;", "")
code = code.replace("void vertex() {\n\telapsed_time = TIME;\n}", "")
code += src_code.uniforms_as_strings("const", true)
code += "\n"
code += src_code.get_globals_string(src_code.defs+src_code.code)
var code_defs = src_code.defs
code += code_defs
code += "\n"
code += "void mainImage(out vec4 fragColor, in vec2 fragCoord) {\n"
code += "float minSize = min(iResolution.x, iResolution.y);\n"
code += "float _seed_variation_ = SEED_VARIATION;\n"
code += "vec2 UV = vec2(0.0, 1.0) + vec2(1.0, -1.0) * (fragCoord-0.5*(iResolution.xy-vec2(minSize)))/minSize;\n"
code += src_code.code
if src_code.output_values.has("rgba"):
code += "fragColor = vec4(mix(vec3(0.5), "+src_code.output_values.rgba+".rgb, "+src_code.output_values.rgba+".a), 1.0);\n"
else:
code += "fragColor = vec4(1.0, 0.0, 0.0, 1.0);\n"
code += "}\n"
#print("GENERATED SHADER:\n"+shader_code)
code = code.replace("uniform", "const")
code = code.replace("const sampler2D", "uniform sampler2D")
code = code.replace("elapsed_time", "iTime")
return code
func generate_godot_canvasitem() -> String:
var code = "shader_type canvas_item;\n"
code += "const float seed_variation = 0.0;\n"
code += mm_renderer.common_shader
code += src_code.uniforms_as_strings("uniform", true)
code += "\n"
code += src_code.get_globals_string(src_code.defs+src_code.code)
code += src_code.defs
code += "\n"
code += "void fragment() {\n"
code += "float _seed_variation_ = seed_variation;\n"
code += src_code.code
if src_code.output_values.has("rgba"):
code += "COLOR = "+src_code.output_values.rgba+";\n"
else:
code += "COLOR = vec4(1.0, 0.0, 0.0, 1.0);\n"
code += "}\n"
#print("GENERATED SHADER:\n"+shader_code)
code = code.replace("uniform", "const")
code = code.replace("const sampler2D", "uniform sampler2D")
return code
func generate_godot_spatial() -> String:
var code = "shader_type spatial;\n"
code += "\nconst float seed_variation = 0.0;\n"
code += mm_renderer.common_shader
code += "\n"
code += src_code.uniforms_as_strings("uniform", true)
code += "\n"
code += src_code.get_globals_string(src_code.defs+src_code.code)
code += src_code.defs
code += "\n"
code += "void fragment() {\n"
code += "float _seed_variation_ = seed_variation;\n"
code += src_code.code
if src_code.output_values.has("rgb"):
code += "ALBEDO = "+src_code.output_values.rgb+";\n"
else:
code += "ALBEDO = vec3(1.0, 0.0, 0.0);\n"
code += "}\n"
#print("GENERATED SHADER:\n"+shader_code)
code = code.replace("uniform", "const")
code = code.replace("const sampler2D", "uniform sampler2D")
return code
func _unhandled_input(event: InputEvent) -> void:
if event.is_action_pressed("ui_cancel"):
queue_free()