浏览代码

Merge pull request #45659 from Chaosus/vs_fix_preview

Fix port previews for uniforms in visual shaders
Rémi Verschelde 4 年之前
父节点
当前提交
9620c1ce61
共有 1 个文件被更改,包括 8 次插入1 次删除
  1. 8 1
      editor/plugins/visual_shader_editor_plugin.cpp

+ 8 - 1
editor/plugins/visual_shader_editor_plugin.cpp

@@ -4473,10 +4473,17 @@ void VisualShaderNodePortPreview::_shader_changed() {
 
 	for (int i = EditorNode::get_singleton()->get_editor_history()->get_path_size() - 1; i >= 0; i--) {
 		Object *object = ObjectDB::get_instance(EditorNode::get_singleton()->get_editor_history()->get_path_object(i));
+		ShaderMaterial *src_mat;
 		if (!object) {
 			continue;
 		}
-		ShaderMaterial *src_mat = Object::cast_to<ShaderMaterial>(object);
+		if (object->has_method("get_material_override")) { // trying getting material from MeshInstance
+			src_mat = Object::cast_to<ShaderMaterial>(object->call("get_material_override"));
+		} else if (object->has_method("get_material")) { // from CanvasItem/Node2D
+			src_mat = Object::cast_to<ShaderMaterial>(object->call("get_material"));
+		} else {
+			src_mat = Object::cast_to<ShaderMaterial>(object);
+		}
 		if (src_mat && src_mat->get_shader().is_valid()) {
 			List<PropertyInfo> params;
 			src_mat->get_shader()->get_param_list(&params);