mirror of
https://github.com/Relintai/material-maker.git
synced 2024-12-23 21:16:54 +01:00
Fixed switch node (so it supports all port types) + minor bug fixes
This commit is contained in:
parent
509853e743
commit
1799ade2f2
@ -44,7 +44,8 @@ const PORT_TYPES : Dictionary = {
|
|||||||
rgb = { type="vec3", paramdefs="vec2 uv", params="uv", slot_type=0, color=Color(0.5, 0.5, 1.0) },
|
rgb = { type="vec3", paramdefs="vec2 uv", params="uv", slot_type=0, color=Color(0.5, 0.5, 1.0) },
|
||||||
rgba = { type="vec4", paramdefs="vec2 uv", params="uv", slot_type=0, color=Color(0.0, 0.5, 0.0, 0.5) },
|
rgba = { type="vec4", paramdefs="vec2 uv", params="uv", slot_type=0, color=Color(0.0, 0.5, 0.0, 0.5) },
|
||||||
sdf2d = { type="float", paramdefs="vec2 uv", params="uv", slot_type=1, color=Color(1.0, 0.5, 0.0) },
|
sdf2d = { type="float", paramdefs="vec2 uv", params="uv", slot_type=1, color=Color(1.0, 0.5, 0.0) },
|
||||||
sdf3d = { type="float", paramdefs="vec3 p", params="p", slot_type=2, color=Color(1.0, 0.0, 0.0) }
|
sdf3d = { type="float", paramdefs="vec3 p", params="p", slot_type=2, color=Color(1.0, 0.0, 0.0) },
|
||||||
|
any = { slot_type=42, color=Color(1.0, 1.0, 1.0) }
|
||||||
}
|
}
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
|
@ -34,14 +34,14 @@ func get_input_defs() -> Array:
|
|||||||
for c in range(parameters.choices):
|
for c in range(parameters.choices):
|
||||||
for o in range(parameters.outputs):
|
for o in range(parameters.outputs):
|
||||||
var n = PoolByteArray([65+o]).get_string_from_ascii()+str(c)
|
var n = PoolByteArray([65+o]).get_string_from_ascii()+str(c)
|
||||||
rv.push_back({ name=n, label=n, type="rgba" })
|
rv.push_back({ name=n, label=n, type="any" })
|
||||||
return rv
|
return rv
|
||||||
|
|
||||||
func get_output_defs() -> Array:
|
func get_output_defs() -> Array:
|
||||||
var rv : Array = []
|
var rv : Array = []
|
||||||
for o in range(parameters.outputs):
|
for o in range(parameters.outputs):
|
||||||
var n = PoolByteArray([65+o]).get_string_from_ascii()
|
var n = PoolByteArray([65+o]).get_string_from_ascii()
|
||||||
rv.push_back({ name=n, type="rgba" })
|
rv.push_back({ name=n, type="any" })
|
||||||
return rv
|
return rv
|
||||||
|
|
||||||
func set_parameter(p, v) -> void:
|
func set_parameter(p, v) -> void:
|
||||||
|
@ -117,6 +117,7 @@ static func generate_combined_shader(red_code, green_code, blue_code) -> String:
|
|||||||
code += "\n"
|
code += "\n"
|
||||||
var globals = []
|
var globals = []
|
||||||
var textures = {}
|
var textures = {}
|
||||||
|
var output = []
|
||||||
for c in [ red_code, green_code, blue_code ]:
|
for c in [ red_code, green_code, blue_code ]:
|
||||||
if c.has("textures"):
|
if c.has("textures"):
|
||||||
for t in c.textures.keys():
|
for t in c.textures.keys():
|
||||||
@ -125,6 +126,10 @@ static func generate_combined_shader(red_code, green_code, blue_code) -> String:
|
|||||||
for g in c.globals:
|
for g in c.globals:
|
||||||
if globals.find(g) == -1:
|
if globals.find(g) == -1:
|
||||||
globals.push_back(g)
|
globals.push_back(g)
|
||||||
|
if c.has("f"):
|
||||||
|
output.push_back(c.f)
|
||||||
|
else:
|
||||||
|
output.push_back("1.0")
|
||||||
for t in textures.keys():
|
for t in textures.keys():
|
||||||
code += "uniform sampler2D "+t+";\n"
|
code += "uniform sampler2D "+t+";\n"
|
||||||
for g in globals:
|
for g in globals:
|
||||||
@ -137,7 +142,7 @@ static func generate_combined_shader(red_code, green_code, blue_code) -> String:
|
|||||||
shader_code += red_code.code
|
shader_code += red_code.code
|
||||||
shader_code += green_code.code
|
shader_code += green_code.code
|
||||||
shader_code += blue_code.code
|
shader_code += blue_code.code
|
||||||
shader_code += "COLOR = vec4("+red_code.f+", "+green_code.f+", "+blue_code.f+", 1.0);\n"
|
shader_code += "COLOR = vec4("+output[0]+", "+output[1]+", "+output[2]+", 1.0);\n"
|
||||||
shader_code += "}\n"
|
shader_code += "}\n"
|
||||||
#print("GENERATED COMBINED SHADER:\n"+shader_code)
|
#print("GENERATED COMBINED SHADER:\n"+shader_code)
|
||||||
code += shader_code
|
code += shader_code
|
||||||
|
@ -22,6 +22,9 @@ signal graph_changed
|
|||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
OS.low_processor_usage_mode = true
|
OS.low_processor_usage_mode = true
|
||||||
center_view()
|
center_view()
|
||||||
|
for t in range(5):
|
||||||
|
add_valid_connection_type(t, 42)
|
||||||
|
add_valid_connection_type(42, t)
|
||||||
|
|
||||||
func _gui_input(event) -> void:
|
func _gui_input(event) -> void:
|
||||||
if event is InputEventKey and event.pressed:
|
if event is InputEventKey and event.pressed:
|
||||||
|
@ -64,8 +64,10 @@ func get_preview_texture(data : Dictionary) -> ImageTexture:
|
|||||||
image_path = ProjectSettings.globalize_path(image_path)
|
image_path = ProjectSettings.globalize_path(image_path)
|
||||||
t = ImageTexture.new()
|
t = ImageTexture.new()
|
||||||
var image : Image = Image.new()
|
var image : Image = Image.new()
|
||||||
image.load(image_path)
|
if image.load(image_path) == OK:
|
||||||
t.create_from_image(image)
|
t.create_from_image(image)
|
||||||
|
else:
|
||||||
|
print("Cannot load image "+image_path)
|
||||||
return t
|
return t
|
||||||
return null
|
return null
|
||||||
|
|
||||||
|
@ -134,7 +134,7 @@ func create_parameter_control(p : Dictionary) -> Control:
|
|||||||
return control
|
return control
|
||||||
|
|
||||||
func save_preview_widget() -> void:
|
func save_preview_widget() -> void:
|
||||||
if preview != null:
|
if preview != null and preview.get_parent() == self:
|
||||||
remove_child(preview)
|
remove_child(preview)
|
||||||
if preview_timer != null:
|
if preview_timer != null:
|
||||||
preview_timer.stop()
|
preview_timer.stop()
|
||||||
|
@ -69,7 +69,9 @@ func update_node() -> void:
|
|||||||
var space = Control.new()
|
var space = Control.new()
|
||||||
space.size_flags_horizontal = SIZE_EXPAND | SIZE_FILL
|
space.size_flags_horizontal = SIZE_EXPAND | SIZE_FILL
|
||||||
sizer.add_child(space)
|
sizer.add_child(space)
|
||||||
sizer.add_child(preload("res://addons/material_maker/widgets/preview_button.tscn").instance())
|
var button = preload("res://addons/material_maker/widgets/preview_button.tscn").instance()
|
||||||
|
sizer.add_child(button)
|
||||||
|
button.connect("toggled", self, "on_preview_button", [ get_child_count()-1 ])
|
||||||
add_child(sizer)
|
add_child(sizer)
|
||||||
rect_size = Vector2(0, 0)
|
rect_size = Vector2(0, 0)
|
||||||
for i in range(get_child_count()):
|
for i in range(get_child_count()):
|
||||||
@ -79,13 +81,12 @@ func update_node() -> void:
|
|||||||
if i < 5:
|
if i < 5:
|
||||||
has_output = i < output_count
|
has_output = i < output_count
|
||||||
sizer.get_child(sizer.get_child_count()-1).visible = has_output
|
sizer.get_child(sizer.get_child_count()-1).visible = has_output
|
||||||
sizer.get_child(sizer.get_child_count()-1).connect("toggled", self, "on_preview_button", [ i ])
|
|
||||||
if i >= input_count:
|
if i >= input_count:
|
||||||
sizer.get_child(0).text = ""
|
sizer.get_child(0).text = ""
|
||||||
has_input = false
|
has_input = false
|
||||||
else:
|
else:
|
||||||
sizer.get_child(0).text = PoolByteArray([65+i%int(output_count)]).get_string_from_ascii()+str(1+i/int(output_count))
|
sizer.get_child(0).text = PoolByteArray([65+i%int(output_count)]).get_string_from_ascii()+str(1+i/int(output_count))
|
||||||
sizer.get_child(0).add_color_override("font_color", Color(1.0, 1.0, 1.0) if i/int(output_count) == generator.parameters.source else Color(0.5, 0.5, 0.5))
|
sizer.get_child(0).add_color_override("font_color", Color(1.0, 1.0, 1.0) if i/int(output_count) == generator.parameters.source else Color(0.5, 0.5, 0.5))
|
||||||
set_slot(i, has_input, 0, Color(0.0, 0.5, 0.0, 0.5), has_output, 0, Color(0.0, 0.5, 0.0, 0.5))
|
set_slot(i, has_input, 42, Color(1.0, 1.0, 1.0, 1.0), has_output, 42, Color(1.0, 1.0, 1.0, 1.0))
|
||||||
# Preview
|
# Preview
|
||||||
restore_preview_widget()
|
restore_preview_widget()
|
||||||
|
Loading…
Reference in New Issue
Block a user