From 76fc9086c862f0b600cebd9bf059c4b753c6155b Mon Sep 17 00:00:00 2001 From: Rodz Labs Date: Thu, 16 Sep 2021 22:15:24 +0200 Subject: [PATCH] Fixed variations generation when enum values contain function calls --- addons/material_maker/engine/gen_shader.gd | 24 +++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/addons/material_maker/engine/gen_shader.gd b/addons/material_maker/engine/gen_shader.gd index 214019d2..ea8d32d6 100644 --- a/addons/material_maker/engine/gen_shader.gd +++ b/addons/material_maker/engine/gen_shader.gd @@ -136,6 +136,22 @@ func preprocess_shader_model(data : Dictionary): preprocessed.instance = fix_instance_functions(instance_functions.code, instance_functions.functions) if data.has("code"): preprocessed.code = fix_instance_functions(data.code, instance_functions.functions) + if data.has("parameters"): + preprocessed.parameters = [] + for p in data.parameters: + print(p) + if p.type == "enum": + var replace = false + var values = [] + for i in p.values.size(): + var v = fix_instance_functions(p.values[i].value, instance_functions.functions) + if v != p.values[i].value: + replace = true + values.push_back({ name=p.values[i].name, value=v }) + if replace: + p = p.duplicate(true) + p.values = values + preprocessed.parameters.push_back(p) if data.has("outputs"): preprocessed.outputs = [] for o in data.outputs: @@ -152,6 +168,8 @@ func preprocess_shader_model(data : Dictionary): else: if data.has("code"): preprocessed.code = data.code + if data.has("parameters"): + preprocessed.parameters = data.parameters if data.has("outputs"): preprocessed.outputs = data.outputs return preprocessed @@ -342,9 +360,9 @@ func subst(string : String, context : MMGenContext, uv : String = "") -> Diction else: variables["seed"] = "(seed_"+genname+"+_seed_variation_)" variables["node_id"] = str(get_instance_id()) - if shader_model.has("parameters") and typeof(shader_model.parameters) == TYPE_ARRAY: + if shader_model_preprocessed.has("parameters") and typeof(shader_model_preprocessed.parameters) == TYPE_ARRAY: var rnd_offset : int = 0 - for p in shader_model.parameters: + for p in shader_model_preprocessed.parameters: if !p.has("name") or !p.has("type"): continue var value = parameters[p.name] @@ -442,7 +460,7 @@ func generate_parameter_declarations(rv : Dictionary): var genname = "o"+str(get_instance_id()) if has_randomness(): rv.defs += "uniform float seed_%s = %.9f;\n" % [ genname, get_seed() ] - for p in shader_model.parameters: + for p in shader_model_preprocessed.parameters: if p.type == "float" and parameters[p.name] is float: rv.defs += "uniform float p_%s_%s = %.9f;\n" % [ genname, p.name, parameters[p.name] ] elif p.type == "color":