Merge pull request #17533 from JFonS/shader_allow_hint_defaults

Hinted shader uniforms can have a default value
This commit is contained in:
Rémi Verschelde 2018-03-15 20:24:44 +01:00 committed by GitHub
commit d3648b51b1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -3702,26 +3702,6 @@ Error ShaderLanguage::_parse_shader(const Map<StringName, FunctionInfo> &p_funct
//todo parse default value //todo parse default value
tk = _get_token(); tk = _get_token();
if (tk.type == TK_OP_ASSIGN) {
Node *expr = _parse_and_reduce_expression(NULL, Map<StringName, BuiltInInfo>());
if (!expr)
return ERR_PARSE_ERROR;
if (expr->type != Node::TYPE_CONSTANT) {
_set_error("Expected constant expression after '='");
return ERR_PARSE_ERROR;
}
ConstantNode *cn = static_cast<ConstantNode *>(expr);
uniform.default_value.resize(cn->values.size());
if (!convert_constant(cn, uniform.type, uniform.default_value.ptrw())) {
_set_error("Can't convert constant to " + get_datatype_name(uniform.type));
return ERR_PARSE_ERROR;
}
tk = _get_token();
}
if (tk.type == TK_COLON) { if (tk.type == TK_COLON) {
//hint //hint
@ -3837,6 +3817,27 @@ Error ShaderLanguage::_parse_shader(const Map<StringName, FunctionInfo> &p_funct
tk = _get_token(); tk = _get_token();
} }
if (tk.type == TK_OP_ASSIGN) {
Node *expr = _parse_and_reduce_expression(NULL, Map<StringName, BuiltInInfo>());
if (!expr)
return ERR_PARSE_ERROR;
if (expr->type != Node::TYPE_CONSTANT) {
_set_error("Expected constant expression after '='");
return ERR_PARSE_ERROR;
}
ConstantNode *cn = static_cast<ConstantNode *>(expr);
uniform.default_value.resize(cn->values.size());
if (!convert_constant(cn, uniform.type, uniform.default_value.ptrw())) {
_set_error("Can't convert constant to " + get_datatype_name(uniform.type));
return ERR_PARSE_ERROR;
}
tk = _get_token();
}
shader->uniforms[name] = uniform; shader->uniforms[name] = uniform;
if (tk.type != TK_SEMICOLON) { if (tk.type != TK_SEMICOLON) {