godot/tools/editor/editor_resource_preview.h
Juan Linietsky 8be2fabbe5 Changed import workflow
-Rearrange favorites in fs dock with drag and drop
-Removed import -> sub-scene, moved to scenetree contextual menu
-Removed import -> re-import , moved and integrated to FS dock
-Added ability in FS dock to re-import more than one resource
simultaneously
-Added ability to drag from native filesystem explorer to Godot, only
works on Windows though
-Removed scene reimport merge options, never worked well. Eventually
merging materials should be re-added
-Added ability to set custom root node type when importing scenes
-Re-Import is now automatic, can be configured back to manual in editor
settings
-Added resource previews in property list for many resource types
2016-05-27 14:19:11 -03:00

99 lines
2.1 KiB
C++

#ifndef EDITORRESOURCEPREVIEW_H
#define EDITORRESOURCEPREVIEW_H
#include "scene/main/node.h"
#include "os/semaphore.h"
#include "os/thread.h"
#include "scene/resources/texture.h"
/* make previews for:
*packdscene
*wav
*image
*mesh
-font
*script
*material
-shader
-shader graph?
-navigation mesh
-collision?
-occluder polygon
-navigation polygon
-tileset
-curve and curve2D
*/
class EditorResourcePreviewGenerator : public Reference {
OBJ_TYPE(EditorResourcePreviewGenerator,Reference );
public:
virtual bool handles(const String& p_type) const=0;
virtual Ref<Texture> generate(const RES& p_from)=0;
virtual Ref<Texture> generate_from_path(const String& p_path);
EditorResourcePreviewGenerator();
};
class EditorResourcePreview : public Node {
OBJ_TYPE(EditorResourcePreview,Node);
static EditorResourcePreview* singleton;
struct QueueItem {
Ref<Resource> resource;
String path;
ObjectID id;
StringName function;
Variant userdata;
};
List<QueueItem> queue;
Mutex *preview_mutex;
Semaphore *preview_sem;
Thread *thread;
bool exit;
struct Item {
Ref<Texture> preview;
int order;
uint32_t last_hash;
};
int order;
Map<String,Item> cache;
void _preview_ready(const String& p_str,const Ref<Texture>& p_texture, ObjectID id, const StringName &p_func, const Variant &p_ud);
Ref<Texture> _generate_preview(const QueueItem& p_item, const String &cache_base);
static void _thread_func(void *ud);
void _thread();
Vector<Ref<EditorResourcePreviewGenerator> > preview_generators;
protected:
static void _bind_methods();
public:
static EditorResourcePreview* get_singleton();
//callback funtion is callback(String p_path,Ref<Texture> preview,Variant udata) preview null if could not load
void queue_resource_preview(const String& p_res, Object* p_receiver, const StringName& p_receiver_func, const Variant& p_userdata);
void queue_edited_resource_preview(const Ref<Resource>& p_path, Object* p_receiver, const StringName& p_receiver_func, const Variant& p_userdata);
void add_preview_generator(const Ref<EditorResourcePreviewGenerator>& p_generator);
EditorResourcePreview();
~EditorResourcePreview();
};
#endif // EDITORRESOURCEPREVIEW_H