Make shaderLanguage's parser recognize sampler passed in from array

This commit is contained in:
jsjtxietian 2024-07-17 12:50:02 +08:00
parent 383a6e4ef2
commit 3859817614

View file

@ -5548,10 +5548,16 @@ ShaderLanguage::Node *ShaderLanguage::_parse_expression(BlockNode *p_block, cons
} }
} }
if (is_sampler_type(call_function->arguments[i].type)) { if (is_sampler_type(call_function->arguments[i].type)) {
//let's see where our argument comes from // Let's see where our argument comes from.
ERR_CONTINUE(n->type != Node::NODE_TYPE_VARIABLE); //bug? this should always be a variable StringName varname;
VariableNode *vn = static_cast<VariableNode *>(n); if (n->type == Node::NODE_TYPE_VARIABLE) {
StringName varname = vn->name; VariableNode *vn = static_cast<VariableNode *>(n);
varname = vn->name;
} else if (n->type == Node::NODE_TYPE_ARRAY) {
ArrayNode *an = static_cast<ArrayNode *>(n);
varname = an->name;
}
if (shader->uniforms.has(varname)) { if (shader->uniforms.has(varname)) {
//being sampler, this either comes from a uniform //being sampler, this either comes from a uniform
ShaderNode::Uniform *u = &shader->uniforms[varname]; ShaderNode::Uniform *u = &shader->uniforms[varname];