|
@@ -2677,7 +2677,6 @@ ShaderLanguage::Node *ShaderLanguage::_parse_expression(BlockNode *p_block, cons
|
|
|
return NULL;
|
|
|
}
|
|
|
|
|
|
- bool index_valid = false;
|
|
|
DataType member_type = TYPE_VOID;
|
|
|
|
|
|
switch (expr->get_datatype()) {
|
|
@@ -2696,7 +2695,7 @@ ShaderLanguage::Node *ShaderLanguage::_parse_expression(BlockNode *p_block, cons
|
|
|
_set_error("Only integer constants are allowed as index at the moment");
|
|
|
return NULL;
|
|
|
}
|
|
|
- index_valid = true;
|
|
|
+
|
|
|
switch (expr->get_datatype()) {
|
|
|
case TYPE_BVEC2: member_type = TYPE_BOOL; break;
|
|
|
case TYPE_VEC2: member_type = TYPE_FLOAT; break;
|
|
@@ -2721,7 +2720,7 @@ ShaderLanguage::Node *ShaderLanguage::_parse_expression(BlockNode *p_block, cons
|
|
|
_set_error("Only integer constants are allowed as index at the moment");
|
|
|
return NULL;
|
|
|
}
|
|
|
- index_valid = true;
|
|
|
+
|
|
|
switch (expr->get_datatype()) {
|
|
|
case TYPE_BVEC3: member_type = TYPE_BOOL; break;
|
|
|
case TYPE_VEC3: member_type = TYPE_FLOAT; break;
|
|
@@ -2745,7 +2744,7 @@ ShaderLanguage::Node *ShaderLanguage::_parse_expression(BlockNode *p_block, cons
|
|
|
_set_error("Only integer constants are allowed as index at the moment");
|
|
|
return NULL;
|
|
|
}
|
|
|
- index_valid = true;
|
|
|
+
|
|
|
switch (expr->get_datatype()) {
|
|
|
case TYPE_BVEC4: member_type = TYPE_BOOL; break;
|
|
|
case TYPE_VEC4: member_type = TYPE_FLOAT; break;
|
|
@@ -2760,11 +2759,6 @@ ShaderLanguage::Node *ShaderLanguage::_parse_expression(BlockNode *p_block, cons
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if (!index_valid) {
|
|
|
- _set_error("Invalid index");
|
|
|
- return NULL;
|
|
|
- }
|
|
|
-
|
|
|
OperatorNode *op = alloc_node<OperatorNode>();
|
|
|
op->op = OP_INDEX;
|
|
|
op->return_cache = member_type;
|
|
@@ -3662,7 +3656,8 @@ Error ShaderLanguage::_parse_shader(const Map<StringName, FunctionInfo> &p_funct
|
|
|
_set_error("void datatype not allowed here");
|
|
|
return ERR_PARSE_ERROR;
|
|
|
}
|
|
|
- if (!uniform && type < TYPE_FLOAT && type > TYPE_VEC4) { // FIXME: always false! should it be || instead?
|
|
|
+
|
|
|
+ if (!uniform && (type < TYPE_FLOAT || type > TYPE_VEC4)) {
|
|
|
_set_error("Invalid type for varying, only float,vec2,vec3,vec4 allowed.");
|
|
|
return ERR_PARSE_ERROR;
|
|
|
}
|