Fix setting a global shader variable in the project settings
This commit is contained in:
parent
e82d66f23b
commit
09f30010be
1 changed files with 24 additions and 19 deletions
|
@ -69,28 +69,12 @@ static const char *global_var_type_names[RS::GLOBAL_VAR_TYPE_MAX] = {
|
||||||
class ShaderGlobalsEditorInterface : public Object {
|
class ShaderGlobalsEditorInterface : public Object {
|
||||||
GDCLASS(ShaderGlobalsEditorInterface, Object)
|
GDCLASS(ShaderGlobalsEditorInterface, Object)
|
||||||
|
|
||||||
void _var_changed() {
|
void _set_var(const StringName &p_name, const Variant &p_value, const Variant &p_prev_value) {
|
||||||
emit_signal(SNAME("var_changed"));
|
|
||||||
}
|
|
||||||
|
|
||||||
protected:
|
|
||||||
static void _bind_methods() {
|
|
||||||
ClassDB::bind_method("_var_changed", &ShaderGlobalsEditorInterface::_var_changed);
|
|
||||||
ADD_SIGNAL(MethodInfo("var_changed"));
|
|
||||||
}
|
|
||||||
|
|
||||||
bool _set(const StringName &p_name, const Variant &p_value) {
|
|
||||||
Variant existing = RS::get_singleton()->global_shader_parameter_get(p_name);
|
|
||||||
|
|
||||||
if (existing.get_type() == Variant::NIL) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||||
|
|
||||||
undo_redo->create_action(TTR("Set Shader Global Variable"));
|
undo_redo->create_action(TTR("Set Shader Global Variable"));
|
||||||
undo_redo->add_do_method(RS::get_singleton(), "global_shader_parameter_set", p_name, p_value);
|
undo_redo->add_do_method(RS::get_singleton(), "global_shader_parameter_set", p_name, p_value);
|
||||||
undo_redo->add_undo_method(RS::get_singleton(), "global_shader_parameter_set", p_name, existing);
|
undo_redo->add_undo_method(RS::get_singleton(), "global_shader_parameter_set", p_name, p_prev_value);
|
||||||
RS::GlobalShaderParameterType type = RS::get_singleton()->global_shader_parameter_get_type(p_name);
|
RS::GlobalShaderParameterType type = RS::get_singleton()->global_shader_parameter_get_type(p_name);
|
||||||
Dictionary gv;
|
Dictionary gv;
|
||||||
gv["type"] = global_var_type_names[type];
|
gv["type"] = global_var_type_names[type];
|
||||||
|
@ -111,8 +95,29 @@ protected:
|
||||||
undo_redo->add_do_method(this, "_var_changed");
|
undo_redo->add_do_method(this, "_var_changed");
|
||||||
undo_redo->add_undo_method(this, "_var_changed");
|
undo_redo->add_undo_method(this, "_var_changed");
|
||||||
block_update = true;
|
block_update = true;
|
||||||
undo_redo->commit_action(false);
|
undo_redo->commit_action();
|
||||||
block_update = false;
|
block_update = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void _var_changed() {
|
||||||
|
emit_signal(SNAME("var_changed"));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static void _bind_methods() {
|
||||||
|
ClassDB::bind_method("_set_var", &ShaderGlobalsEditorInterface::_set_var);
|
||||||
|
ClassDB::bind_method("_var_changed", &ShaderGlobalsEditorInterface::_var_changed);
|
||||||
|
ADD_SIGNAL(MethodInfo("var_changed"));
|
||||||
|
}
|
||||||
|
|
||||||
|
bool _set(const StringName &p_name, const Variant &p_value) {
|
||||||
|
Variant existing = RS::get_singleton()->global_shader_parameter_get(p_name);
|
||||||
|
|
||||||
|
if (existing.get_type() == Variant::NIL) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
call_deferred("_set_var", p_name, p_value, existing);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue