Browse Source

Fix shader crashing when declaring matrix or array varyings

Yuri Roubinsky 3 years ago
parent
commit
0845b25497
1 changed files with 20 additions and 1 deletions
  1. 20 1
      servers/rendering/shader_compiler.cpp

+ 20 - 1
servers/rendering/shader_compiler.cpp

@@ -692,17 +692,36 @@ String ShaderCompiler::_dump_node_code(const SL::Node *p_node, int p_level, Gene
 				vcode += _prestr(varying.precision, ShaderLanguage::is_float_type(varying.type));
 				vcode += _typestr(varying.type);
 				vcode += " " + _mkid(varying_name);
+				uint32_t inc = 1U;
+
 				if (varying.array_size > 0) {
+					inc = (uint32_t)varying.array_size;
+
 					vcode += "[";
 					vcode += itos(varying.array_size);
 					vcode += "]";
 				}
+
+				switch (varying.type) {
+					case SL::TYPE_MAT2:
+						inc *= 2U;
+						break;
+					case SL::TYPE_MAT3:
+						inc *= 3U;
+						break;
+					case SL::TYPE_MAT4:
+						inc *= 4U;
+						break;
+					default:
+						break;
+				}
+
 				vcode += ";\n";
 
 				r_gen_code.stage_globals[STAGE_VERTEX] += "layout(location=" + itos(index) + ") " + interp_mode + "out " + vcode;
 				r_gen_code.stage_globals[STAGE_FRAGMENT] += "layout(location=" + itos(index) + ") " + interp_mode + "in " + vcode;
 
-				index++;
+				index += inc;
 			}
 
 			if (var_frag_to_light.size() > 0) {