@@ -258,7 +258,7 @@ void VisualShaderGraphPlugin::show_port_preview(VisualShader::Type p_type, int p
258258 vbox->add_child (offset);
259259
260260 VisualShaderNodePortPreview *port_preview = memnew (VisualShaderNodePortPreview);
261- port_preview->setup (visual_shader, editor->preview_material , visual_shader->get_shader_type (), p_node_id, p_port_id, p_is_valid);
261+ port_preview->setup (visual_shader, editor->preview_material , visual_shader->get_shader_type (), links[p_node_id]. output_ports [p_port_id]. type == VisualShaderNode::PORT_TYPE_VECTOR_4D, p_node_id, p_port_id, p_is_valid);
262262 port_preview->set_h_size_flags (Control::SIZE_SHRINK_CENTER);
263263 vbox->add_child (port_preview);
264264 link.preview_visible = true ;
@@ -554,8 +554,8 @@ void VisualShaderGraphPlugin::register_link(VisualShader::Type p_type, int p_id,
554554 links.insert (p_id, { p_type, p_visual_node, p_graph_element, p_visual_node->get_output_port_for_preview () != -1 , -1 , HashMap<int , InputPort>(), HashMap<int , Port>(), nullptr , nullptr , nullptr , { nullptr , nullptr , nullptr } });
555555}
556556
557- void VisualShaderGraphPlugin::register_output_port (int p_node_id, int p_port, TextureButton *p_button) {
558- links[p_node_id].output_ports .insert (p_port, { p_button });
557+ void VisualShaderGraphPlugin::register_output_port (int p_node_id, int p_port, VisualShaderNode::PortType p_port_type, TextureButton *p_button) {
558+ links[p_node_id].output_ports .insert (p_port, { p_port_type, p_button });
559559}
560560
561561void VisualShaderGraphPlugin::register_parameter_name (int p_node_id, LineEdit *p_parameter_name) {
@@ -1220,7 +1220,7 @@ void VisualShaderGraphPlugin::add_node(VisualShader::Type p_type, int p_id, bool
12201220 preview->set_texture_pressed (editor->get_editor_theme_icon (SNAME (" GuiVisibilityVisible" )));
12211221 preview->set_v_size_flags (Control::SIZE_SHRINK_CENTER);
12221222
1223- register_output_port (p_id, j, preview);
1223+ register_output_port (p_id, j, port_right, preview);
12241224
12251225 preview->connect (SceneStringName (pressed), callable_mp (editor, &VisualShaderEditor::_preview_select_port).bind (p_id, j), CONNECT_DEFERRED);
12261226 hb->add_child (preview);
@@ -8032,7 +8032,15 @@ void VisualShaderNodePortPreview::_shader_changed() {
80328032 set_material (mat);
80338033}
80348034
8035- void VisualShaderNodePortPreview::setup (const Ref<VisualShader> &p_shader, Ref<ShaderMaterial> &p_preview_material, VisualShader::Type p_type, int p_node, int p_port, bool p_is_valid) {
8035+ void VisualShaderNodePortPreview::setup (const Ref<VisualShader> &p_shader, Ref<ShaderMaterial> &p_preview_material, VisualShader::Type p_type, bool p_has_transparency, int p_node, int p_port, bool p_is_valid) {
8036+ if (p_has_transparency) {
8037+ checkerboard = memnew (TextureRect);
8038+ checkerboard->set_stretch_mode (TextureRect::STRETCH_TILE);
8039+ checkerboard->set_anchors_and_offsets_preset (Control::PRESET_FULL_RECT);
8040+ checkerboard->set_draw_behind_parent (true );
8041+ add_child (checkerboard);
8042+ }
8043+
80368044 shader = p_shader;
80378045 shader->connect_changed (callable_mp (this , &VisualShaderNodePortPreview::_shader_changed), CONNECT_DEFERRED);
80388046 preview_mat = p_preview_material;
@@ -8051,6 +8059,11 @@ Size2 VisualShaderNodePortPreview::get_minimum_size() const {
80518059
80528060void VisualShaderNodePortPreview::_notification (int p_what) {
80538061 switch (p_what) {
8062+ case NOTIFICATION_THEME_CHANGED: {
8063+ if (checkerboard != nullptr ) {
8064+ checkerboard->set_texture (get_theme_icon (SNAME (" GuiMiniCheckerboard" ), EditorStringName (EditorIcons)));
8065+ }
8066+ } break ;
80548067 case NOTIFICATION_DRAW: {
80558068 Vector<Vector2> points = {
80568069 Vector2 (),
0 commit comments