33
33
#include " core/config/project_settings.h"
34
34
#include " editor/editor_node.h"
35
35
#include " editor/editor_settings.h"
36
+ #include " editor/editor_string_names.h"
36
37
#include " editor/editor_undo_redo_manager.h"
37
38
#include " editor/themes/editor_scale.h"
38
39
#include " scene/3d/camera_3d.h"
41
42
#include " scene/gui/box_container.h"
42
43
#include " scene/gui/button.h"
43
44
#include " scene/gui/color_rect.h"
45
+ #include " scene/gui/label.h"
44
46
#include " scene/gui/subviewport_container.h"
45
47
#include " scene/main/viewport.h"
46
48
#include " scene/resources/3d/fog_material.h"
@@ -80,11 +82,15 @@ void MaterialEditor::_notification(int p_what) {
80
82
81
83
sphere_switch->set_icon (theme_cache.sphere_icon );
82
84
box_switch->set_icon (theme_cache.box_icon );
85
+
86
+ error_label->add_theme_color_override (SceneStringName (font_color), get_theme_color (SNAME (" error_color" ), EditorStringName (Editor)));
83
87
} break ;
84
88
85
89
case NOTIFICATION_DRAW: {
86
- Size2 size = get_size ();
87
- draw_texture_rect (theme_cache.checkerboard , Rect2 (Point2 (), size), true );
90
+ if (!is_unsupported_shader_mode) {
91
+ Size2 size = get_size ();
92
+ draw_texture_rect (theme_cache.checkerboard , Rect2 (Point2 (), size), true );
93
+ }
88
94
} break ;
89
95
}
90
96
}
@@ -99,23 +105,32 @@ void MaterialEditor::_update_rotation() {
99
105
void MaterialEditor::edit (Ref<Material> p_material, const Ref<Environment> &p_env) {
100
106
material = p_material;
101
107
camera->set_environment (p_env);
108
+
109
+ is_unsupported_shader_mode = false ;
102
110
if (!material.is_null ()) {
103
111
Shader::Mode mode = p_material->get_shader_mode ();
104
112
switch (mode) {
105
113
case Shader::MODE_CANVAS_ITEM:
114
+ layout_error->hide ();
106
115
layout_3d->hide ();
107
116
layout_2d->show ();
108
117
vc->hide ();
109
118
rect_instance->set_material (material);
110
119
break ;
111
120
case Shader::MODE_SPATIAL:
121
+ layout_error->hide ();
112
122
layout_2d->hide ();
113
123
layout_3d->show ();
114
124
vc->show ();
115
125
sphere_instance->set_material_override (material);
116
126
box_instance->set_material_override (material);
117
127
break ;
118
128
default :
129
+ layout_error->show ();
130
+ layout_2d->hide ();
131
+ layout_3d->hide ();
132
+ vc->hide ();
133
+ is_unsupported_shader_mode = true ;
119
134
break ;
120
135
}
121
136
} else {
@@ -175,6 +190,20 @@ MaterialEditor::MaterialEditor() {
175
190
176
191
layout_2d->set_visible (false );
177
192
193
+ layout_error = memnew (VBoxContainer);
194
+ layout_error->set_alignment (BoxContainer::ALIGNMENT_CENTER);
195
+ layout_error->set_anchors_and_offsets_preset (PRESET_FULL_RECT);
196
+
197
+ error_label = memnew (Label);
198
+ error_label->set_text (TTR (" Preview is not available for this shader mode." ));
199
+ error_label->set_horizontal_alignment (HORIZONTAL_ALIGNMENT_CENTER);
200
+ error_label->set_vertical_alignment (VERTICAL_ALIGNMENT_CENTER);
201
+ error_label->set_autowrap_mode (TextServer::AUTOWRAP_WORD_SMART);
202
+
203
+ layout_error->add_child (error_label);
204
+ layout_error->hide ();
205
+ add_child (layout_error);
206
+
178
207
// Spatial
179
208
180
209
vc = memnew (SubViewportContainer);
0 commit comments