|
@@ -1861,7 +1861,7 @@ void VisualShader::_get_property_list(List<PropertyInfo> *p_list) const {
|
|
}
|
|
}
|
|
|
|
|
|
for (const KeyValue<String, Varying> &E : varyings) {
|
|
for (const KeyValue<String, Varying> &E : varyings) {
|
|
- p_list->push_back(PropertyInfo(Variant::STRING, vformat("%s/%s", PNAME("varyings"), E.key)));
|
|
|
|
|
|
+ p_list->push_back(PropertyInfo(Variant::STRING, vformat("%s/%s", PNAME("varyings"), E.key), PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR));
|
|
}
|
|
}
|
|
|
|
|
|
for (int i = 0; i < TYPE_MAX; i++) {
|
|
for (int i = 0; i < TYPE_MAX; i++) {
|
|
@@ -2620,7 +2620,7 @@ void VisualShader::_update_shader() const {
|
|
default:
|
|
default:
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
- global_code += E.key + ";\n";
|
|
|
|
|
|
+ global_code += vformat("var_%s;\n", E.key);
|
|
}
|
|
}
|
|
|
|
|
|
global_code += "\n";
|
|
global_code += "\n";
|
|
@@ -2689,7 +2689,7 @@ void VisualShader::_update_shader() const {
|
|
default:
|
|
default:
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
- varying_code += vformat(" %s = %s;\n", E.key, code2);
|
|
|
|
|
|
+ varying_code += vformat(" var_%s = %s;\n", E.key, code2);
|
|
}
|
|
}
|
|
is_empty_func = false;
|
|
is_empty_func = false;
|
|
}
|
|
}
|
|
@@ -5048,18 +5048,18 @@ VisualShaderNodeGlobalExpression::VisualShaderNodeGlobalExpression() {
|
|
|
|
|
|
////////////// Varying
|
|
////////////// Varying
|
|
|
|
|
|
-List<VisualShaderNodeVarying::Varying> varyings;
|
|
|
|
|
|
+RBMap<RID, List<VisualShaderNodeVarying::Varying>> varyings;
|
|
|
|
|
|
-void VisualShaderNodeVarying::add_varying(const String &p_name, VisualShader::VaryingMode p_mode, VisualShader::VaryingType p_type) { // static
|
|
|
|
- varyings.push_back({ p_name, p_mode, p_type });
|
|
|
|
|
|
+void VisualShaderNodeVarying::add_varying(RID p_shader_rid, const String &p_name, VisualShader::VaryingMode p_mode, VisualShader::VaryingType p_type) { // static
|
|
|
|
+ varyings[p_shader_rid].push_back({ p_name, p_mode, p_type });
|
|
}
|
|
}
|
|
|
|
|
|
-void VisualShaderNodeVarying::clear_varyings() { // static
|
|
|
|
- varyings.clear();
|
|
|
|
|
|
+void VisualShaderNodeVarying::clear_varyings(RID p_shader_rid) { // static
|
|
|
|
+ varyings[p_shader_rid].clear();
|
|
}
|
|
}
|
|
|
|
|
|
-bool VisualShaderNodeVarying::has_varying(const String &p_name) { // static
|
|
|
|
- for (const VisualShaderNodeVarying::Varying &E : varyings) {
|
|
|
|
|
|
+bool VisualShaderNodeVarying::has_varying(RID p_shader_rid, const String &p_name) { // static
|
|
|
|
+ for (const VisualShaderNodeVarying::Varying &E : varyings[p_shader_rid]) {
|
|
if (E.name == p_name) {
|
|
if (E.name == p_name) {
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
@@ -5067,19 +5067,23 @@ bool VisualShaderNodeVarying::has_varying(const String &p_name) { // static
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+void VisualShaderNodeVarying::set_shader_rid(const RID &p_shader_rid) {
|
|
|
|
+ shader_rid = p_shader_rid;
|
|
|
|
+}
|
|
|
|
+
|
|
int VisualShaderNodeVarying::get_varyings_count() const {
|
|
int VisualShaderNodeVarying::get_varyings_count() const {
|
|
- return varyings.size();
|
|
|
|
|
|
+ return varyings[shader_rid].size();
|
|
}
|
|
}
|
|
|
|
|
|
String VisualShaderNodeVarying::get_varying_name_by_index(int p_idx) const {
|
|
String VisualShaderNodeVarying::get_varying_name_by_index(int p_idx) const {
|
|
- if (p_idx >= 0 && p_idx < varyings.size()) {
|
|
|
|
- return varyings.get(p_idx).name;
|
|
|
|
|
|
+ if (p_idx >= 0 && p_idx < varyings[shader_rid].size()) {
|
|
|
|
+ return varyings[shader_rid].get(p_idx).name;
|
|
}
|
|
}
|
|
return "";
|
|
return "";
|
|
}
|
|
}
|
|
|
|
|
|
VisualShader::VaryingType VisualShaderNodeVarying::get_varying_type_by_name(const String &p_name) const {
|
|
VisualShader::VaryingType VisualShaderNodeVarying::get_varying_type_by_name(const String &p_name) const {
|
|
- for (const VisualShaderNodeVarying::Varying &varying : varyings) {
|
|
|
|
|
|
+ for (const VisualShaderNodeVarying::Varying &varying : varyings[shader_rid]) {
|
|
if (varying.name == p_name) {
|
|
if (varying.name == p_name) {
|
|
return varying.type;
|
|
return varying.type;
|
|
}
|
|
}
|
|
@@ -5088,14 +5092,14 @@ VisualShader::VaryingType VisualShaderNodeVarying::get_varying_type_by_name(cons
|
|
}
|
|
}
|
|
|
|
|
|
VisualShader::VaryingType VisualShaderNodeVarying::get_varying_type_by_index(int p_idx) const {
|
|
VisualShader::VaryingType VisualShaderNodeVarying::get_varying_type_by_index(int p_idx) const {
|
|
- if (p_idx >= 0 && p_idx < varyings.size()) {
|
|
|
|
- return varyings.get(p_idx).type;
|
|
|
|
|
|
+ if (p_idx >= 0 && p_idx < varyings[shader_rid].size()) {
|
|
|
|
+ return varyings[shader_rid].get(p_idx).type;
|
|
}
|
|
}
|
|
return VisualShader::VARYING_TYPE_FLOAT;
|
|
return VisualShader::VARYING_TYPE_FLOAT;
|
|
}
|
|
}
|
|
|
|
|
|
VisualShader::VaryingMode VisualShaderNodeVarying::get_varying_mode_by_name(const String &p_name) const {
|
|
VisualShader::VaryingMode VisualShaderNodeVarying::get_varying_mode_by_name(const String &p_name) const {
|
|
- for (const VisualShaderNodeVarying::Varying &varying : varyings) {
|
|
|
|
|
|
+ for (const VisualShaderNodeVarying::Varying &varying : varyings[shader_rid]) {
|
|
if (varying.name == p_name) {
|
|
if (varying.name == p_name) {
|
|
return varying.mode;
|
|
return varying.mode;
|
|
}
|
|
}
|
|
@@ -5104,15 +5108,15 @@ VisualShader::VaryingMode VisualShaderNodeVarying::get_varying_mode_by_name(cons
|
|
}
|
|
}
|
|
|
|
|
|
VisualShader::VaryingMode VisualShaderNodeVarying::get_varying_mode_by_index(int p_idx) const {
|
|
VisualShader::VaryingMode VisualShaderNodeVarying::get_varying_mode_by_index(int p_idx) const {
|
|
- if (p_idx >= 0 && p_idx < varyings.size()) {
|
|
|
|
- return varyings.get(p_idx).mode;
|
|
|
|
|
|
+ if (p_idx >= 0 && p_idx < varyings[shader_rid].size()) {
|
|
|
|
+ return varyings[shader_rid].get(p_idx).mode;
|
|
}
|
|
}
|
|
return VisualShader::VARYING_MODE_VERTEX_TO_FRAG_LIGHT;
|
|
return VisualShader::VARYING_MODE_VERTEX_TO_FRAG_LIGHT;
|
|
}
|
|
}
|
|
|
|
|
|
VisualShaderNodeVarying::PortType VisualShaderNodeVarying::get_port_type_by_index(int p_idx) const {
|
|
VisualShaderNodeVarying::PortType VisualShaderNodeVarying::get_port_type_by_index(int p_idx) const {
|
|
- if (p_idx >= 0 && p_idx < varyings.size()) {
|
|
|
|
- return get_port_type(varyings.get(p_idx).type, 0);
|
|
|
|
|
|
+ if (p_idx >= 0 && p_idx < varyings[shader_rid].size()) {
|
|
|
|
+ return get_port_type(varyings[shader_rid].get(p_idx).type, 0);
|
|
}
|
|
}
|
|
return PORT_TYPE_SCALAR;
|
|
return PORT_TYPE_SCALAR;
|
|
}
|
|
}
|
|
@@ -5239,7 +5243,7 @@ String VisualShaderNodeVaryingSetter::generate_code(Shader::Mode p_mode, VisualS
|
|
if (varying_name == "[None]") {
|
|
if (varying_name == "[None]") {
|
|
return code;
|
|
return code;
|
|
}
|
|
}
|
|
- code += vformat(" %s = %s;\n", varying_name, p_input_vars[0]);
|
|
|
|
|
|
+ code += vformat(" var_%s = %s;\n", varying_name, p_input_vars[0]);
|
|
return code;
|
|
return code;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -5284,7 +5288,7 @@ String VisualShaderNodeVaryingGetter::generate_code(Shader::Mode p_mode, VisualS
|
|
String from = varying_name;
|
|
String from = varying_name;
|
|
String from2;
|
|
String from2;
|
|
|
|
|
|
- if (varying_name == "[None]") {
|
|
|
|
|
|
+ if (varying_name == "[None]" || p_for_preview) {
|
|
switch (varying_type) {
|
|
switch (varying_type) {
|
|
case VisualShader::VARYING_TYPE_FLOAT:
|
|
case VisualShader::VARYING_TYPE_FLOAT:
|
|
from = "0.0";
|
|
from = "0.0";
|
|
@@ -5313,8 +5317,9 @@ String VisualShaderNodeVaryingGetter::generate_code(Shader::Mode p_mode, VisualS
|
|
default:
|
|
default:
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
|
|
+ return vformat(" %s = %s;\n", p_output_vars[0], from);
|
|
}
|
|
}
|
|
- return vformat(" %s = %s;\n", p_output_vars[0], from);
|
|
|
|
|
|
+ return vformat(" %s = var_%s;\n", p_output_vars[0], from);
|
|
}
|
|
}
|
|
|
|
|
|
VisualShaderNodeVaryingGetter::VisualShaderNodeVaryingGetter() {
|
|
VisualShaderNodeVaryingGetter::VisualShaderNodeVaryingGetter() {
|