[Bf-blender-cvs] [f6c3f08] asset-engine: WIP start defining asset engine API.

Bastien Montagne noreply at git.blender.org
Thu Mar 5 10:10:40 CET 2015


Commit: f6c3f0869018daf623337aeee9e2593af9c72d94
Author: Bastien Montagne
Date:   Fri Jan 30 15:29:38 2015 +0100
Branches: asset-engine
https://developer.blender.org/rBf6c3f0869018daf623337aeee9e2593af9c72d94

WIP start defining asset engine API.

===================================================================

M	source/blender/blenkernel/BKE_asset.h
M	source/blender/blenkernel/intern/asset.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_asset.h b/source/blender/blenkernel/BKE_asset.h
index bc3d656..1c69efc 100644
--- a/source/blender/blenkernel/BKE_asset.h
+++ b/source/blender/blenkernel/BKE_asset.h
@@ -38,8 +38,10 @@ extern "C" {
 
 struct AssetEngine;
 struct AssetEngineType;
+struct direntry;
 struct ExtensionRNA;
 struct ListBase;
+struct uiLayout;
 
 #if 0
 #include "DNA_scene_types.h"
@@ -86,26 +88,65 @@ struct BakePixel;
 
 #endif
 
+enum {
+	AE_STATUS_VALID   = 1 << 0,
+	AE_STATUS_RUNNING = 1 << 1,  /* Asset engine is performing some background tasks... */
+};
+
 extern ListBase asset_engines;
 
+/* AE instance is valid, is running, is idle, etc. */
+typedef int (*ae_status)(struct AssetEngine *engine, const int job_id);
+typedef float (*ae_progress)(struct AssetEngine *engine, const int job_id);
+
+/* ***** All callbacks below shall be non-blocking (i.e. return immediately). ***** */
+/* Those callbacks will be called from a 'fake-job' start *and* update functions (i.e. main thread, working one will
+ * just sleep).
+ * If given id is not null, engine should update from a running job if available, otherwise it should start a new one.
+ * It is the responsability of the engine to start/stop background processes to actually perform tasks as/if needed.
+ */
+
+/* Return (list) everything available at given root path. */
+typedef int (*ae_list_dir)(struct AssetEngine *engine, const int id, const char *root_path, struct direntry **entries_r);
+/* Ensure given direntries are really available for append/link (some kind of 'anticipated loading'...). */
+typedef int (*ae_ensure_entries)(struct AssetEngine *engine, const int id, struct direntry *entries);
+
+/* ***** All callbacks below are blocking. They shall be completed upon return. ***** */
+
+/* 'pre-loading' hook, called before opening/appending/linking given entries.
+ * E.g. allows the engine to ensure entries' paths are actually valid by downloading requested data, etc.
+ * Note it is also allowed to change that list, add/remove items, etc. This allows to present 'fake' entries to user,
+ * and then import actual data.
+ */
+typedef bool (*ae_load_pre)(struct AssetEngine *engine, struct direntry *entries, int *num_entries);
+
+/* 'post-loading' hook, called after opening/appending/linking given entries.
+ * E.g. allows an advanced engine to make fancy scripted operations over loaded items. */
+typedef bool (*ae_load_post)(struct AssetEngine *engine, struct ID *items, const int *num_items);
+
+/* Draw callback for the engine's panel. */
+typedef bool (*ae_draw_panel)(struct AssetEngine *engine, struct uiLayout *layout);
+
+
 typedef struct AssetEngineType {
 	struct AssetEngineType *next, *prev;
 
 	/* type info */
-	char idname[64]; // best keep the same size as BKE_ST_MAXNAME
+	char idname[64]; /* best keep the same size as BKE_ST_MAXNAME */
 	char name[64];
 	int flag;
 
-#if 0
-	void (*update)(struct RenderEngine *engine, struct Main *bmain, struct Scene *scene);
-	void (*render)(struct RenderEngine *engine, struct Scene *scene);
-	void (*bake)(struct RenderEngine *engine, struct Scene *scene, struct Object *object, const int pass_type, const struct BakePixel *pixel_array, const int num_pixels, const int depth, void *result);
+	/* API */
+	ae_status status;
+	ae_progress progress;
 
-	void (*view_update)(struct RenderEngine *engine, const struct bContext *context);
-	void (*view_draw)(struct RenderEngine *engine, const struct bContext *context);
+	ae_list_dir list_dir;
+	ae_ensure_entries ensure_entries;
 
-	void (*update_script_node)(struct RenderEngine *engine, struct bNodeTree *ntree, struct bNode *node);
-#endif
+	ae_load_pre load_pre;
+	ae_load_post load_post;
+
+	ae_draw_panel draw_panel;
 
 	/* RNA integration */
 	struct ExtensionRNA ext;
diff --git a/source/blender/blenkernel/intern/asset.c b/source/blender/blenkernel/intern/asset.c
index 22c9f38..e37a2e5 100644
--- a/source/blender/blenkernel/intern/asset.c
+++ b/source/blender/blenkernel/intern/asset.c
@@ -40,6 +40,7 @@
 
 #include "BLF_translation.h"
 
+#include "BLI_fileops_types.h"
 #include "BLI_listbase.h"
 #include "BLI_string.h"
 #include "BLI_utildefines.h"
@@ -82,8 +83,6 @@ AssetEngineType *BKE_asset_engines_find(const char *idname)
 	AssetEngineType *type;
 
 	type = BLI_findstring(&asset_engines, idname, offsetof(AssetEngineType, idname));
-//	if (!type)
-//		type = &internal_render_type;
 
 	return type;
 }
@@ -94,7 +93,11 @@ AssetEngineType *BKE_asset_engines_find(const char *idname)
 
 AssetEngine *BKE_asset_engine_create(AssetEngineType *type)
 {
-	AssetEngine *engine = MEM_callocN(sizeof(AssetEngine), __func__);
+	AssetEngine *engine;
+
+	BLI_assert(type);
+
+	engine = MEM_callocN(sizeof(AssetEngine), __func__);
 	engine->type = type;
 
 	return engine;




More information about the Bf-blender-cvs mailing list