summaryrefslogtreecommitdiff
path: root/servers/rendering
diff options
context:
space:
mode:
authorYuri Roubinsky <chaosus89@gmail.com>2021-10-06 22:07:50 +0300
committerYuri Roubinsky <chaosus89@gmail.com>2021-10-06 22:31:07 +0300
commitb5028da5c033e8eb122a5963e05be6b2416e564e (patch)
treeed1681da1b6231c1ffaae75354948542584c088c /servers/rendering
parent98b81ad35c30b1336ae100fbd21a0d6a5572c0bd (diff)
Fix regression which prevents using texture array uniforms
Diffstat (limited to 'servers/rendering')
-rw-r--r--servers/rendering/renderer_rd/renderer_storage_rd.cpp3
-rw-r--r--servers/rendering/renderer_rd/shader_compiler_rd.cpp22
2 files changed, 13 insertions, 12 deletions
diff --git a/servers/rendering/renderer_rd/renderer_storage_rd.cpp b/servers/rendering/renderer_rd/renderer_storage_rd.cpp
index 771be4bb3d..45d3b3f09f 100644
--- a/servers/rendering/renderer_rd/renderer_storage_rd.cpp
+++ b/servers/rendering/renderer_rd/renderer_storage_rd.cpp
@@ -2715,8 +2715,7 @@ void RendererStorageRD::MaterialData::update_textures(const Map<StringName, Vari
p_textures[k++] = rd_texture;
}
} else {
- p_textures[k] = rd_texture;
- ++k;
+ p_textures[k++] = rd_texture;
}
} else {
bool srgb = p_use_linear_color && (p_texture_uniforms[i].hint == ShaderLanguage::ShaderNode::Uniform::HINT_ALBEDO || p_texture_uniforms[i].hint == ShaderLanguage::ShaderNode::Uniform::HINT_BLACK_ALBEDO);
diff --git a/servers/rendering/renderer_rd/shader_compiler_rd.cpp b/servers/rendering/renderer_rd/shader_compiler_rd.cpp
index 2f4671785a..4c26941dae 100644
--- a/servers/rendering/renderer_rd/shader_compiler_rd.cpp
+++ b/servers/rendering/renderer_rd/shader_compiler_rd.cpp
@@ -1230,22 +1230,24 @@ String ShaderCompilerRD::_dump_node_code(const SL::Node *p_node, int p_level, Ge
code += ", ";
}
String node_code = _dump_node_code(onode->arguments[i], p_level, r_gen_code, p_actions, p_default_actions, p_assigning);
- if (is_texture_func && i == 1 && (onode->arguments[i]->type == SL::Node::TYPE_VARIABLE || onode->arguments[i]->type == SL::Node::TYPE_OPERATOR)) {
+ if (is_texture_func && i == 1) {
//need to map from texture to sampler in order to sample
StringName texture_uniform;
bool correct_texture_uniform = false;
- if (onode->arguments[i]->type == SL::Node::TYPE_VARIABLE) {
- const SL::VariableNode *varnode = static_cast<const SL::VariableNode *>(onode->arguments[i]);
- texture_uniform = varnode->name;
- correct_texture_uniform = true;
- } else { // array indexing operator handling
- const SL::OperatorNode *opnode = static_cast<const SL::OperatorNode *>(onode->arguments[i]);
- if (opnode->op == SL::Operator::OP_INDEX && opnode->arguments[0]->type == SL::Node::TYPE_ARRAY) {
- const SL::ArrayNode *anode = static_cast<const SL::ArrayNode *>(opnode->arguments[0]);
+ switch (onode->arguments[i]->type) {
+ case SL::Node::TYPE_VARIABLE: {
+ const SL::VariableNode *varnode = static_cast<const SL::VariableNode *>(onode->arguments[i]);
+ texture_uniform = varnode->name;
+ correct_texture_uniform = true;
+ } break;
+ case SL::Node::TYPE_ARRAY: {
+ const SL::ArrayNode *anode = static_cast<const SL::ArrayNode *>(onode->arguments[i]);
texture_uniform = anode->name;
correct_texture_uniform = true;
- }
+ } break;
+ default:
+ break;
}
if (correct_texture_uniform) {