Updated debug node to generate canvas_item and spatial shaders for Godot.
This commit is contained in:
parent
738dc5d5e7
commit
fb9e7c8bef
|
@ -1,30 +1,5 @@
|
|||
extends MMGraphNodeBase
|
||||
|
||||
static func generate_debug_shader(src_code) -> String:
|
||||
var code
|
||||
code = ""
|
||||
code += mm_renderer.common_shader.right(mm_renderer.common_shader.find("//---"))
|
||||
code += "\n"
|
||||
if src_code.has("textures"):
|
||||
for t in src_code.textures.keys():
|
||||
code += "uniform sampler2D "+t+";\n"
|
||||
if src_code.has("globals"):
|
||||
for g in src_code.globals:
|
||||
code += g
|
||||
var shader_code = src_code.defs
|
||||
shader_code += "\nvoid mainImage(out vec4 fragColor, in vec2 fragCoord) {\nfloat minSize = min(iResolution.x, iResolution.y);\nvec2 UV = vec2(0.0, 1.0) + vec2(1.0, -1.0) * (fragCoord-0.5*(iResolution.xy-vec2(minSize)))/minSize;\n"
|
||||
shader_code += src_code.code
|
||||
if src_code.has("rgba"):
|
||||
shader_code += "fragColor = "+src_code.rgba+";\n"
|
||||
else:
|
||||
shader_code += "fragColor = vec4(1.0, 0.0, 0.0, 1.0);\n"
|
||||
shader_code += "}\n"
|
||||
#print("GENERATED SHADER:\n"+shader_code)
|
||||
code += shader_code
|
||||
code = code.replace("uniform", "const")
|
||||
code = code.replace("elapsed_time", "iTime")
|
||||
return code
|
||||
|
||||
func _on_Button_pressed() -> void:
|
||||
var src = generator.get_source(0)
|
||||
if src != null:
|
||||
|
@ -32,4 +7,4 @@ func _on_Button_pressed() -> void:
|
|||
var source = src.generator.get_shader_code("UV", src.output_index, context)
|
||||
var popup = preload("res://material_maker/nodes/debug/debug_popup.tscn").instance()
|
||||
get_parent().add_child(popup)
|
||||
popup.show_code(generate_debug_shader(source))
|
||||
popup.show_code(source)
|
||||
|
|
|
@ -2,8 +2,6 @@
|
|||
|
||||
[ext_resource path="res://material_maker/nodes/debug/debug.gd" type="Script" id=1]
|
||||
|
||||
|
||||
|
||||
[node name="Debug" type="GraphNode"]
|
||||
margin_right = 124.0
|
||||
margin_bottom = 49.0
|
||||
|
@ -16,6 +14,9 @@ slot/0/right_enabled = false
|
|||
slot/0/right_type = 0
|
||||
slot/0/right_color = Color( 1, 1, 1, 1 )
|
||||
script = ExtResource( 1 )
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[node name="Button" type="Button" parent="."]
|
||||
margin_left = 16.0
|
||||
|
|
|
@ -1,6 +1,90 @@
|
|||
extends Popup
|
||||
extends WindowDialog
|
||||
|
||||
func show_code(text : String) -> void:
|
||||
$TextEdit.text = text
|
||||
var src_code
|
||||
|
||||
const GENFUNCTIONS : Array = [ "generate_shadertoy", "generate_godot_canvasitem", "generate_godot_spatial" ]
|
||||
|
||||
func show_code(s) -> void:
|
||||
src_code = s
|
||||
_on_ShaderType_item_selected(0)
|
||||
connect("popup_hide", self, "queue_free")
|
||||
popup_centered()
|
||||
|
||||
func _on_ShaderType_item_selected(index):
|
||||
$VBoxContainer/TextEdit.text = call(GENFUNCTIONS[index])
|
||||
|
||||
func _on_CopyToClipboard_pressed():
|
||||
OS.set_clipboard($VBoxContainer/TextEdit.text)
|
||||
|
||||
func generate_shadertoy() -> String:
|
||||
var code = ""
|
||||
code += mm_renderer.common_shader.right(mm_renderer.common_shader.find("//---"))
|
||||
code += "\n"
|
||||
if src_code.has("textures"):
|
||||
for t in src_code.textures.keys():
|
||||
code += "uniform sampler2D "+t+";\n"
|
||||
if src_code.has("globals"):
|
||||
for g in src_code.globals:
|
||||
code += g
|
||||
code += src_code.defs
|
||||
code += "\n"
|
||||
code += "void mainImage(out vec4 fragColor, in vec2 fragCoord) {\n"
|
||||
code += "float minSize = min(iResolution.x, iResolution.y);\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.has("rgba"):
|
||||
code += "fragColor = "+src_code.rgba+";\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("elapsed_time", "iTime")
|
||||
return code
|
||||
|
||||
func generate_godot_canvasitem() -> String:
|
||||
var code = "shader_type canvas_item;\n"
|
||||
code += mm_renderer.common_shader
|
||||
code += "\n"
|
||||
if src_code.has("textures"):
|
||||
for t in src_code.textures.keys():
|
||||
code += "uniform sampler2D "+t+";\n"
|
||||
if src_code.has("globals"):
|
||||
for g in src_code.globals:
|
||||
code += g
|
||||
code += src_code.defs
|
||||
code += "\n"
|
||||
code += "void fragment() {\n"
|
||||
code += src_code.code
|
||||
if src_code.has("rgba"):
|
||||
code += "COLOR = "+src_code.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")
|
||||
return code
|
||||
|
||||
func generate_godot_spatial() -> String:
|
||||
var code = "shader_type spatial;\n"
|
||||
code += mm_renderer.common_shader
|
||||
code += "\n"
|
||||
if src_code.has("textures"):
|
||||
for t in src_code.textures.keys():
|
||||
code += "uniform sampler2D "+t+";\n"
|
||||
if src_code.has("globals"):
|
||||
for g in src_code.globals:
|
||||
code += g
|
||||
code += src_code.defs
|
||||
code += "\n"
|
||||
code += "void fragment() {\n"
|
||||
code += src_code.code
|
||||
if src_code.has("rgb"):
|
||||
code += "ALBEDO = "+src_code.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")
|
||||
return code
|
||||
|
||||
|
|
|
@ -2,16 +2,48 @@
|
|||
|
||||
[ext_resource path="res://material_maker/nodes/debug/debug_popup.gd" type="Script" id=1]
|
||||
|
||||
|
||||
[node name="Popup" type="Popup"]
|
||||
margin_right = 500.0
|
||||
margin_bottom = 300.0
|
||||
[node name="GeneratedShaderWindow" type="WindowDialog"]
|
||||
margin_right = 600.0
|
||||
margin_bottom = 400.0
|
||||
rect_min_size = Vector2( 600, 400 )
|
||||
popup_exclusive = true
|
||||
window_title = "Generated shader"
|
||||
script = ExtResource( 1 )
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[node name="TextEdit" type="TextEdit" parent="."]
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="."]
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
custom_colors/background_color = Color( 0, 0.00392157, 0.203922, 1 )
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"]
|
||||
margin_right = 600.0
|
||||
margin_bottom = 20.0
|
||||
|
||||
[node name="ShaderType" type="OptionButton" parent="VBoxContainer/HBoxContainer"]
|
||||
margin_right = 92.0
|
||||
margin_bottom = 20.0
|
||||
text = "Shadertoy"
|
||||
items = [ "Shadertoy", null, false, 0, null, "Godot Canvas item", null, false, 1, null, "Godot Spatial", null, false, 2, null ]
|
||||
selected = 0
|
||||
|
||||
[node name="CopyToClipboard" type="Button" parent="VBoxContainer/HBoxContainer"]
|
||||
margin_left = 96.0
|
||||
margin_right = 219.0
|
||||
margin_bottom = 20.0
|
||||
text = "Copy to clipboard"
|
||||
|
||||
[node name="TextEdit" type="TextEdit" parent="VBoxContainer"]
|
||||
margin_top = 24.0
|
||||
margin_right = 600.0
|
||||
margin_bottom = 400.0
|
||||
size_flags_vertical = 3
|
||||
syntax_highlighting = true
|
||||
show_line_numbers = true
|
||||
[connection signal="popup_hide" from="." to="." method="queue_free"]
|
||||
[connection signal="item_selected" from="VBoxContainer/HBoxContainer/ShaderType" to="." method="_on_ShaderType_item_selected"]
|
||||
[connection signal="pressed" from="VBoxContainer/HBoxContainer/CopyToClipboard" to="." method="_on_CopyToClipboard_pressed"]
|
||||
|
|
Loading…
Reference in New Issue