mirror of
https://github.com/Relintai/material-maker.git
synced 2024-12-23 21:16:54 +01:00
79 lines
1.8 KiB
GDScript
79 lines
1.8 KiB
GDScript
tool
|
|
extends Node
|
|
class_name MMGenBase
|
|
|
|
class OutputPort:
|
|
var generator : MMGenBase = null
|
|
var output_index : int = 0
|
|
|
|
func _init(g : MMGenBase, o : int):
|
|
generator = g
|
|
output_index = o
|
|
|
|
func get_shader():
|
|
return generator.get_shader(output_index)
|
|
|
|
func get_shader_code(uv):
|
|
return generator.get_shader_code(uv, output_index)
|
|
|
|
func get_globals():
|
|
return generator.get_globals()
|
|
|
|
func to_str():
|
|
return generator.name+"("+str(output_index)+")"
|
|
|
|
var position : Vector2 = Vector2(0, 0)
|
|
var parameters = {}
|
|
|
|
func get_seed():
|
|
return 0
|
|
|
|
func get_type():
|
|
return "generic"
|
|
|
|
func get_source(input_index : int):
|
|
return get_parent().get_port_source(name, input_index)
|
|
|
|
func get_input_shader(input_index : int):
|
|
var source = get_source(input_index)
|
|
if source != null:
|
|
return source.get_shader()
|
|
|
|
func get_shader(output_index : int, context = MMGenContext.new()):
|
|
return get_shader_code("UV", output_index, context);
|
|
|
|
# this will need an output index for switch
|
|
func get_globals():
|
|
var list = []
|
|
for i in range(10):
|
|
var source = get_source(i)
|
|
if source != null:
|
|
var source_list = source.get_globals()
|
|
for g in source_list:
|
|
if list.find(g) == -1:
|
|
list.append(g)
|
|
return list
|
|
|
|
func get_shader_code(uv, slot = 0, context = MMGenContext.new()):
|
|
var rv = _get_shader_code(uv, slot, context)
|
|
if rv != null:
|
|
if !rv.has("f"):
|
|
if rv.has("rgb"):
|
|
rv.f = "(dot("+rv.rgb+", vec3(1.0))/3.0)"
|
|
elif rv.has("rgba"):
|
|
rv.f = "(dot("+rv.rgba+".rgb, vec3(1.0))/3.0)"
|
|
else:
|
|
rv.f = "0.0"
|
|
if !rv.has("rgb"):
|
|
if rv.has("rgba"):
|
|
rv.rgb = rv.rgba+".rgb"
|
|
else:
|
|
rv.rgb = "vec3("+rv.f+")"
|
|
if !rv.has("rgba"):
|
|
rv.rgba = "vec4("+rv.rgb+", 1.0)"
|
|
rv.globals = get_globals()
|
|
return rv
|
|
|
|
func _get_shader_code(uv : String, output_index : int, context = MMGenContext.new()):
|
|
return null
|