浏览代码

Merge pull request #35202 from xix-xeaon/master

Make fake int mod op (%) actually return int
Rémi Verschelde 5 年之前
父节点
当前提交
de067cf56f
共有 1 个文件被更改,包括 8 次插入13 次删除
  1. 8 13
      drivers/gles2/shader_compiler_gles2.cpp

+ 8 - 13
drivers/gles2/shader_compiler_gles2.cpp

@@ -625,13 +625,10 @@ String ShaderCompilerGLES2::_dump_node_code(SL::Node *p_node, int p_level, Gener
 				} break;
 
 				case SL::OP_ASSIGN_MOD: {
-					code += _dump_node_code(op_node->arguments[0], p_level, r_gen_code, p_actions, p_default_actions, true);
-					code += " = ";
-					code += "mod(";
-					code += _dump_node_code(op_node->arguments[0], p_level, r_gen_code, p_actions, p_default_actions, true);
-					code += ", ";
-					code += _dump_node_code(op_node->arguments[1], p_level, r_gen_code, p_actions, p_default_actions, p_assigning);
-					code += ")";
+					String a = _dump_node_code(op_node->arguments[0], p_level, r_gen_code, p_actions, p_default_actions, p_assigning);
+					String n = _dump_node_code(op_node->arguments[1], p_level, r_gen_code, p_actions, p_default_actions, p_assigning);
+					code += a + " = " + n + " == 0 ? 0 : ";
+					code += a + " - " + n + " * (" + a + " / " + n + ")";
 				} break;
 
 				case SL::OP_BIT_INVERT:
@@ -764,12 +761,10 @@ String ShaderCompilerGLES2::_dump_node_code(SL::Node *p_node, int p_level, Gener
 				} break;
 
 				case SL::OP_MOD: {
-
-					code += "mod(float(";
-					code += _dump_node_code(op_node->arguments[0], p_level, r_gen_code, p_actions, p_default_actions, p_assigning);
-					code += "), float(";
-					code += _dump_node_code(op_node->arguments[1], p_level, r_gen_code, p_actions, p_default_actions, p_assigning);
-					code += "))";
+					String a = _dump_node_code(op_node->arguments[0], p_level, r_gen_code, p_actions, p_default_actions, p_assigning);
+					String n = _dump_node_code(op_node->arguments[1], p_level, r_gen_code, p_actions, p_default_actions, p_assigning);
+					code += "(" + n + " == 0 ? 0 : ";
+					code += a + " - " + n + " * (" + a + " / " + n + "))";
 				} break;
 
 				default: {