diff options
Diffstat (limited to 'servers/visual/shader_language.cpp')
| -rw-r--r-- | servers/visual/shader_language.cpp | 15 | 
1 files changed, 5 insertions, 10 deletions
| diff --git a/servers/visual/shader_language.cpp b/servers/visual/shader_language.cpp index ba8d134b5c..bfb9c871ce 100644 --- a/servers/visual/shader_language.cpp +++ b/servers/visual/shader_language.cpp @@ -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;  				} |