mirror of
https://github.com/godotengine/godot.git
synced 2025-12-08 06:09:55 +00:00
Implement global and per instance shader uniforms.
Adds two keywords to shader language for uniforms: -'global' -'instance' This allows them to reference values outside the material.
This commit is contained in:
parent
30ab5c9baa
commit
0e1c66d9fc
49 changed files with 3124 additions and 69 deletions
|
|
@ -193,6 +193,12 @@ void ShaderTextEditor::_check_shader_mode() {
|
|||
}
|
||||
}
|
||||
|
||||
static ShaderLanguage::DataType _get_global_variable_type(const StringName &p_variable) {
|
||||
|
||||
RS::GlobalVariableType gvt = RS::get_singleton()->global_variable_get_type(p_variable);
|
||||
return RS::global_variable_type_get_shader_datatype(gvt);
|
||||
}
|
||||
|
||||
void ShaderTextEditor::_code_complete_script(const String &p_code, List<ScriptCodeCompletionOption> *r_options) {
|
||||
|
||||
_check_shader_mode();
|
||||
|
|
@ -200,7 +206,7 @@ void ShaderTextEditor::_code_complete_script(const String &p_code, List<ScriptCo
|
|||
ShaderLanguage sl;
|
||||
String calltip;
|
||||
|
||||
sl.complete(p_code, ShaderTypes::get_singleton()->get_functions(RenderingServer::ShaderMode(shader->get_mode())), ShaderTypes::get_singleton()->get_modes(RenderingServer::ShaderMode(shader->get_mode())), ShaderTypes::get_singleton()->get_types(), r_options, calltip);
|
||||
sl.complete(p_code, ShaderTypes::get_singleton()->get_functions(RenderingServer::ShaderMode(shader->get_mode())), ShaderTypes::get_singleton()->get_modes(RenderingServer::ShaderMode(shader->get_mode())), ShaderTypes::get_singleton()->get_types(), _get_global_variable_type, r_options, calltip);
|
||||
|
||||
get_text_edit()->set_code_hint(calltip);
|
||||
}
|
||||
|
|
@ -215,7 +221,7 @@ void ShaderTextEditor::_validate_script() {
|
|||
|
||||
ShaderLanguage sl;
|
||||
|
||||
Error err = sl.compile(code, ShaderTypes::get_singleton()->get_functions(RenderingServer::ShaderMode(shader->get_mode())), ShaderTypes::get_singleton()->get_modes(RenderingServer::ShaderMode(shader->get_mode())), ShaderTypes::get_singleton()->get_types());
|
||||
Error err = sl.compile(code, ShaderTypes::get_singleton()->get_functions(RenderingServer::ShaderMode(shader->get_mode())), ShaderTypes::get_singleton()->get_modes(RenderingServer::ShaderMode(shader->get_mode())), ShaderTypes::get_singleton()->get_types(), _get_global_variable_type);
|
||||
|
||||
if (err != OK) {
|
||||
String error_text = "error(" + itos(sl.get_error_line()) + "): " + sl.get_error_text();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue