mirror of
https://github.com/Relintai/material-maker.git
synced 2024-12-23 21:16:54 +01:00
Added main code section to shader generators
This commit is contained in:
parent
3adeffe23c
commit
825d98e0fe
@ -11,12 +11,12 @@ func _init(r : MMGenRenderer):
|
||||
func has_variant(generator):
|
||||
return variants.has(generator)
|
||||
|
||||
func get_variant(generator, uv):
|
||||
func get_variant(generator, variant):
|
||||
var rv = -1
|
||||
if variants.has(generator):
|
||||
rv = variants[generator].find(uv)
|
||||
rv = variants[generator].find(variant)
|
||||
if rv == -1:
|
||||
variants[generator].push_back(uv)
|
||||
variants[generator].push_back(variant)
|
||||
else:
|
||||
variants[generator] = [uv]
|
||||
variants[generator] = [variant]
|
||||
return rv
|
||||
|
@ -134,6 +134,9 @@ func subst(string, context, uv = ""):
|
||||
var required_code = ""
|
||||
var required_textures = {}
|
||||
string = replace_variable(string, "name", genname)
|
||||
if uv != "":
|
||||
var genname_uv = genname+"_"+str(context.get_variant(self, uv))
|
||||
string = replace_variable(string, "name_uv", genname_uv)
|
||||
var tmp_string = replace_variable(string, "seed", str(get_seed()))
|
||||
if tmp_string != string:
|
||||
string = tmp_string
|
||||
@ -196,12 +199,10 @@ func _get_shader_code(uv : String, output_index : int, context : MMGenContext):
|
||||
var genname = "o"+str(get_instance_id())
|
||||
var output_info = [ { field="rgba", type="vec4" }, { field="rgb", type="vec3" }, { field="f", type="float" } ]
|
||||
var rv = { globals=[], defs="", code="", textures={} }
|
||||
var variant_string = uv+","+str(output_index)
|
||||
if shader_model != null and shader_model.has("outputs") and shader_model.outputs.size() > output_index:
|
||||
var output = shader_model.outputs[output_index]
|
||||
rv.defs = ""
|
||||
if shader_model.has("instance") && !context.has_variant(self):
|
||||
var subst_output = subst(shader_model.instance, context, uv)
|
||||
var subst_output = subst(shader_model.instance, context, "")
|
||||
while subst_output is GDScriptFunctionState:
|
||||
subst_output = yield(subst_output, "completed")
|
||||
rv.defs += subst_output.string
|
||||
@ -214,6 +215,25 @@ func _get_shader_code(uv : String, output_index : int, context : MMGenContext):
|
||||
g = MMGradient.new()
|
||||
g.deserialize(parameters[p.name])
|
||||
rv.defs += g.get_shader(genname+"__"+p.name+"_gradient_fct")
|
||||
# Add inline code
|
||||
if shader_model.has("code"):
|
||||
var variant_index = context.get_variant(self, uv)
|
||||
if variant_index == -1:
|
||||
variant_index = context.get_variant(self, uv)
|
||||
var subst_code = subst(shader_model.code, context, uv)
|
||||
while subst_code is GDScriptFunctionState:
|
||||
subst_code = yield(subst_code, "completed")
|
||||
# Add global definitions
|
||||
for d in subst_code.globals:
|
||||
if rv.globals.find(d) == -1:
|
||||
rv.globals.push_back(d)
|
||||
# Add generated definitions
|
||||
rv.defs += subst_code.defs
|
||||
# Add generated code
|
||||
rv.code += subst_code.code
|
||||
rv.code += subst_code.string
|
||||
# Add output_code
|
||||
var variant_string = uv+","+str(output_index)
|
||||
var variant_index = context.get_variant(self, variant_string)
|
||||
if variant_index == -1:
|
||||
variant_index = context.get_variant(self, variant_string)
|
||||
|
File diff suppressed because one or more lines are too long
@ -3,7 +3,9 @@ extends WindowDialog
|
||||
|
||||
var model_data = null
|
||||
|
||||
onready var global_editor : TextEdit = $Sizer/Tabs/Global
|
||||
onready var main_code_editor : TextEdit = $"Sizer/Tabs/Main Code"
|
||||
onready var instance_functions_editor : TextEdit = $"Sizer/Tabs/Instance Functions"
|
||||
onready var global_functions_editor : TextEdit = $"Sizer/Tabs/Global Functions"
|
||||
|
||||
const ParameterEditor = preload("res://addons/material_maker/widgets/node_editor/parameter.tscn")
|
||||
const InputEditor = preload("res://addons/material_maker/widgets/node_editor/input.tscn")
|
||||
@ -12,8 +14,9 @@ const OutputEditor = preload("res://addons/material_maker/widgets/node_editor/ou
|
||||
signal node_changed
|
||||
|
||||
func _ready():
|
||||
global_editor.add_color_region("//", "", Color(0, 0.5, 0), true)
|
||||
|
||||
main_code_editor.add_color_region("//", "", Color(0, 0.5, 0), true)
|
||||
instance_functions_editor.add_color_region("//", "", Color(0, 0.5, 0), true)
|
||||
global_functions_editor.add_color_region("//", "", Color(0, 0.5, 0), true)
|
||||
|
||||
func add_item(parent, scene):
|
||||
var object = scene.instance()
|
||||
@ -34,15 +37,18 @@ func set_model_data(data):
|
||||
for o in data.outputs:
|
||||
add_item($Sizer/Tabs/Outputs/Outputs/Sizer, OutputEditor).set_model_data(o)
|
||||
if data.has("global"):
|
||||
$Sizer/Tabs/Global.text = data.global
|
||||
global_functions_editor.text = data.global
|
||||
if data.has("instance"):
|
||||
$Sizer/Tabs/Instance.text = data.instance
|
||||
instance_functions_editor.text = data.instance
|
||||
if data.has("code"):
|
||||
main_code_editor.text = data.code
|
||||
|
||||
func get_model_data():
|
||||
var data = {
|
||||
name=$Sizer/Tabs/General/Name/Name.text,
|
||||
global=$Sizer/Tabs/Global.text,
|
||||
instance=$Sizer/Tabs/Instance.text,
|
||||
global=global_functions_editor.text,
|
||||
instance=instance_functions_editor.text,
|
||||
code=main_code_editor.text
|
||||
}
|
||||
data.parameters = []
|
||||
for p in $Sizer/Tabs/General/Parameters/Sizer.get_children():
|
||||
|
@ -146,7 +146,31 @@ size_flags_horizontal = 0
|
||||
icon = SubResource( 1 )
|
||||
flat = true
|
||||
|
||||
[node name="Global" type="TextEdit" parent="Sizer/Tabs"]
|
||||
[node name="Main Code" type="TextEdit" parent="Sizer/Tabs"]
|
||||
visible = false
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
margin_left = 4.0
|
||||
margin_top = 32.0
|
||||
margin_right = -4.0
|
||||
margin_bottom = -4.0
|
||||
mouse_default_cursor_shape = 0
|
||||
syntax_highlighting = true
|
||||
show_line_numbers = true
|
||||
|
||||
[node name="Instance Functions" type="TextEdit" parent="Sizer/Tabs"]
|
||||
visible = false
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
margin_left = 4.0
|
||||
margin_top = 32.0
|
||||
margin_right = -4.0
|
||||
margin_bottom = -4.0
|
||||
mouse_default_cursor_shape = 0
|
||||
syntax_highlighting = true
|
||||
show_line_numbers = true
|
||||
|
||||
[node name="Global Functions" type="TextEdit" parent="Sizer/Tabs"]
|
||||
visible = false
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
@ -160,18 +184,6 @@ custom_colors/brace_mismatch_color = Color( 1, 0, 0, 1 )
|
||||
syntax_highlighting = true
|
||||
show_line_numbers = true
|
||||
|
||||
[node name="Instance" type="TextEdit" parent="Sizer/Tabs"]
|
||||
visible = false
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
margin_left = 4.0
|
||||
margin_top = 32.0
|
||||
margin_right = -4.0
|
||||
margin_bottom = -4.0
|
||||
mouse_default_cursor_shape = 0
|
||||
syntax_highlighting = true
|
||||
show_line_numbers = true
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="Sizer"]
|
||||
margin_left = 307.0
|
||||
margin_top = 378.0
|
||||
|
Loading…
Reference in New Issue
Block a user