You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-08 12:40:44 +00:00
Fix shader function overloads with incorrect order
This commit is contained in:
@@ -3867,7 +3867,7 @@ bool ShaderLanguage::_validate_function_call(BlockNode *p_block, const FunctionI
|
|||||||
String arg_list = "";
|
String arg_list = "";
|
||||||
|
|
||||||
for (int i = 0; i < shader->vfunctions.size(); i++) {
|
for (int i = 0; i < shader->vfunctions.size(); i++) {
|
||||||
if (name != shader->vfunctions[i].name) {
|
if (rname != shader->vfunctions[i].rname) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
exists = true;
|
exists = true;
|
||||||
@@ -6155,10 +6155,13 @@ ShaderLanguage::Node *ShaderLanguage::_parse_expression(BlockNode *p_block, cons
|
|||||||
bnode = bnode->parent_block;
|
bnode = bnode->parent_block;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int64_t arg_count = func->arguments.size();
|
||||||
|
int64_t arg_count2 = func->arguments.size() - 1;
|
||||||
|
|
||||||
// Test if function was parsed first.
|
// Test if function was parsed first.
|
||||||
int function_index = -1;
|
int function_index = -1;
|
||||||
for (int i = 0, max_valid_args = 0; i < shader->vfunctions.size(); i++) {
|
for (int i = 0, max_valid_args = 0; i < shader->vfunctions.size(); i++) {
|
||||||
if (!shader->vfunctions[i].callable || shader->vfunctions[i].rname != rname) {
|
if (!shader->vfunctions[i].callable || shader->vfunctions[i].rname != rname || arg_count2 != shader->vfunctions[i].function->arguments.size()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -6166,12 +6169,7 @@ ShaderLanguage::Node *ShaderLanguage::_parse_expression(BlockNode *p_block, cons
|
|||||||
int valid_args = 0;
|
int valid_args = 0;
|
||||||
|
|
||||||
// Search for correct overload.
|
// Search for correct overload.
|
||||||
for (int j = 1; j < func->arguments.size(); j++) {
|
for (int j = 1; j < arg_count; j++) {
|
||||||
if (j - 1 == shader->vfunctions[i].function->arguments.size()) {
|
|
||||||
found = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
const FunctionNode::Argument &a = shader->vfunctions[i].function->arguments[j - 1];
|
const FunctionNode::Argument &a = shader->vfunctions[i].function->arguments[j - 1];
|
||||||
Node *b = func->arguments[j];
|
Node *b = func->arguments[j];
|
||||||
|
|
||||||
@@ -6313,7 +6311,7 @@ ShaderLanguage::Node *ShaderLanguage::_parse_expression(BlockNode *p_block, cons
|
|||||||
|
|
||||||
for (int i = 0; i < call_function->arguments.size(); i++) {
|
for (int i = 0; i < call_function->arguments.size(); i++) {
|
||||||
int argidx = i + 1;
|
int argidx = i + 1;
|
||||||
if (argidx < func->arguments.size()) {
|
if (argidx < arg_count) {
|
||||||
bool error = false;
|
bool error = false;
|
||||||
Node *n = func->arguments[argidx];
|
Node *n = func->arguments[argidx];
|
||||||
ArgumentQualifier arg_qual = call_function->arguments[i].qualifier;
|
ArgumentQualifier arg_qual = call_function->arguments[i].qualifier;
|
||||||
|
|||||||
Reference in New Issue
Block a user