mirror of
https://github.com/godotengine/godot.git
synced 2025-10-24 10:23:28 +00:00
Prevent using boolean varyings in vertex function of visual shaders
This commit is contained in:
parent
38775731e8
commit
059ed731f5
2 changed files with 44 additions and 14 deletions
|
|
@ -5905,25 +5905,50 @@ void VisualShaderEditor::_varying_create() {
|
||||||
add_varying_dialog->hide();
|
add_varying_dialog->hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
void VisualShaderEditor::_varying_name_changed(const String &p_name) {
|
void VisualShaderEditor::_varying_validate() {
|
||||||
if (!p_name.is_valid_ascii_identifier()) {
|
bool has_error = false;
|
||||||
varying_error_label->show();
|
String error;
|
||||||
varying_error_label->set_text(TTR("Invalid name for varying."));
|
String varname = varying_name->get_text();
|
||||||
add_varying_dialog->get_ok_button()->set_disabled(true);
|
|
||||||
return;
|
if (!varname.is_valid_ascii_identifier()) {
|
||||||
|
error += TTR("Invalid name for varying.");
|
||||||
|
has_error = true;
|
||||||
|
} else if (visual_shader->has_varying(varname)) {
|
||||||
|
error += TTR("Varying with that name is already exist.");
|
||||||
|
has_error = true;
|
||||||
}
|
}
|
||||||
if (visual_shader->has_varying(p_name)) {
|
|
||||||
varying_error_label->show();
|
if (varying_type->get_selected() == 6 && varying_mode->get_selected() == VisualShader::VaryingMode::VARYING_MODE_VERTEX_TO_FRAG_LIGHT) {
|
||||||
varying_error_label->set_text(TTR("Varying with that name is already exist."));
|
if (has_error) {
|
||||||
add_varying_dialog->get_ok_button()->set_disabled(true);
|
error += "\n";
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
if (varying_error_label->is_visible()) {
|
error += vformat(TTR("Boolean type cannot be used with `%s` varying mode."), "Vertex -> [Fragment, Light]");
|
||||||
|
has_error = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (has_error) {
|
||||||
|
varying_error_label->show();
|
||||||
|
varying_error_label->set_text(error);
|
||||||
|
add_varying_dialog->get_ok_button()->set_disabled(true);
|
||||||
|
} else {
|
||||||
varying_error_label->hide();
|
varying_error_label->hide();
|
||||||
add_varying_dialog->set_size(Size2(add_varying_dialog->get_size().x, 0));
|
varying_error_label->set_text("");
|
||||||
}
|
|
||||||
add_varying_dialog->get_ok_button()->set_disabled(false);
|
add_varying_dialog->get_ok_button()->set_disabled(false);
|
||||||
}
|
}
|
||||||
|
add_varying_dialog->reset_size();
|
||||||
|
}
|
||||||
|
|
||||||
|
void VisualShaderEditor::_varying_type_changed(int p_index) {
|
||||||
|
_varying_validate();
|
||||||
|
}
|
||||||
|
|
||||||
|
void VisualShaderEditor::_varying_mode_changed(int p_index) {
|
||||||
|
_varying_validate();
|
||||||
|
}
|
||||||
|
|
||||||
|
void VisualShaderEditor::_varying_name_changed(const String &p_name) {
|
||||||
|
_varying_validate();
|
||||||
|
}
|
||||||
|
|
||||||
void VisualShaderEditor::_varying_deleted() {
|
void VisualShaderEditor::_varying_deleted() {
|
||||||
TreeItem *item = varyings->get_selected();
|
TreeItem *item = varyings->get_selected();
|
||||||
|
|
@ -6795,6 +6820,7 @@ VisualShaderEditor::VisualShaderEditor() {
|
||||||
varying_type->add_item("Vector4");
|
varying_type->add_item("Vector4");
|
||||||
varying_type->add_item("Boolean");
|
varying_type->add_item("Boolean");
|
||||||
varying_type->add_item("Transform");
|
varying_type->add_item("Transform");
|
||||||
|
varying_type->connect(SceneStringName(item_selected), callable_mp(this, &VisualShaderEditor::_varying_type_changed));
|
||||||
|
|
||||||
varying_name = memnew(LineEdit);
|
varying_name = memnew(LineEdit);
|
||||||
hb->add_child(varying_name);
|
hb->add_child(varying_name);
|
||||||
|
|
@ -6807,6 +6833,7 @@ VisualShaderEditor::VisualShaderEditor() {
|
||||||
hb->add_child(varying_mode);
|
hb->add_child(varying_mode);
|
||||||
varying_mode->add_item("Vertex -> [Fragment, Light]");
|
varying_mode->add_item("Vertex -> [Fragment, Light]");
|
||||||
varying_mode->add_item("Fragment -> Light");
|
varying_mode->add_item("Fragment -> Light");
|
||||||
|
varying_mode->connect(SceneStringName(item_selected), callable_mp(this, &VisualShaderEditor::_varying_mode_changed));
|
||||||
|
|
||||||
varying_error_label = memnew(Label);
|
varying_error_label = memnew(Label);
|
||||||
vb->add_child(varying_error_label);
|
vb->add_child(varying_error_label);
|
||||||
|
|
|
||||||
|
|
@ -595,6 +595,9 @@ class VisualShaderEditor : public ShaderEditor {
|
||||||
void _member_cancel();
|
void _member_cancel();
|
||||||
|
|
||||||
void _varying_create();
|
void _varying_create();
|
||||||
|
void _varying_validate();
|
||||||
|
void _varying_type_changed(int p_index);
|
||||||
|
void _varying_mode_changed(int p_index);
|
||||||
void _varying_name_changed(const String &p_name);
|
void _varying_name_changed(const String &p_name);
|
||||||
void _varying_deleted();
|
void _varying_deleted();
|
||||||
void _varying_selected();
|
void _varying_selected();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue