Updated debug node to generate canvas_item and spatial shaders for Godot.

This commit is contained in:
RodZill4 2021-02-21 14:00:40 +01:00
parent 738dc5d5e7
commit fb9e7c8bef
4 changed files with 129 additions and 37 deletions

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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"]