[Bf-blender-cvs] [49d6c04] viewport_generic_engine: Initial support for generic viewport render engines

Julian Eisel noreply at git.blender.org
Sat Oct 8 20:06:35 CEST 2016


Commit: 49d6c04724ea8cf0b8d9a3d7656809fec18ca943
Author: Julian Eisel
Date:   Sat Oct 8 04:10:25 2016 +0200
Branches: viewport_generic_engine
https://developer.blender.org/rB49d6c04724ea8cf0b8d9a3d7656809fec18ca943

Initial support for generic viewport render engines

Adds a basic API for managing viewport render engines. This should make it possible to hook up external viewport engines in future (e.g. Hydra). Commit also includes some basic integration with View3D (including version patching) and RNA defines for exposing viewport render engine list in UI.

Code works really similar to normal render engine API, but I don't think we should merge them.

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

M	build_files/cmake/macros.cmake
M	release/scripts/startup/bl_ui/space_view3d.py
M	source/blender/CMakeLists.txt
M	source/blender/blenloader/CMakeLists.txt
M	source/blender/blenloader/intern/versioning_270.c
M	source/blender/editors/space_view3d/CMakeLists.txt
M	source/blender/editors/space_view3d/space_view3d.c
M	source/blender/editors/space_view3d/view3d_draw.c
M	source/blender/makesdna/DNA_view3d_types.h
M	source/blender/makesrna/RNA_enum_types.h
M	source/blender/makesrna/intern/CMakeLists.txt
M	source/blender/makesrna/intern/rna_space.c
A	source/blender/viewport/CMakeLists.txt
A	source/blender/viewport/VP_engine_API.h
A	source/blender/viewport/intern/engine_api.c
M	source/blender/windowmanager/CMakeLists.txt
M	source/blender/windowmanager/intern/wm_init_exit.c
M	source/blenderplayer/bad_level_call_stubs/stubs.c
M	source/creator/CMakeLists.txt
M	source/creator/creator.c

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

diff --git a/build_files/cmake/macros.cmake b/build_files/cmake/macros.cmake
index 5a67ac9..fb56eb7 100644
--- a/build_files/cmake/macros.cmake
+++ b/build_files/cmake/macros.cmake
@@ -594,6 +594,7 @@ function(SETUP_BLENDER_SORTED_LIBS)
 		bf_editor_io
 
 		bf_render
+		bf_viewport
 		bf_python
 		bf_python_ext
 		bf_python_mathutils
diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py
index 36ada1e..83819e2 100644
--- a/release/scripts/startup/bl_ui/space_view3d.py
+++ b/release/scripts/startup/bl_ui/space_view3d.py
@@ -2999,6 +2999,7 @@ class VIEW3D_PT_viewport_debug(Panel):
         layout.active = view.use_modern_viewport
 
         col = layout.column()
+        col.prop(view, "viewport_engine")
         col.label(text="Placeholder for debugging options")
 
 
diff --git a/source/blender/CMakeLists.txt b/source/blender/CMakeLists.txt
index d49ceb1..5f49d32 100644
--- a/source/blender/CMakeLists.txt
+++ b/source/blender/CMakeLists.txt
@@ -111,6 +111,7 @@ add_subdirectory(nodes)
 add_subdirectory(modifiers)
 add_subdirectory(makesdna)
 add_subdirectory(makesrna)
+add_subdirectory(viewport)
 
 if(WITH_COMPOSITOR)
 	add_subdirectory(compositor)
diff --git a/source/blender/blenloader/CMakeLists.txt b/source/blender/blenloader/CMakeLists.txt
index 8cb9ef8..679c38e 100644
--- a/source/blender/blenloader/CMakeLists.txt
+++ b/source/blender/blenloader/CMakeLists.txt
@@ -34,6 +34,7 @@ set(INC
 	../makesrna
 	../nodes
 	../render/extern/include
+	../viewport
 	../../../intern/guardedalloc
 
 	# for writefile.c: dna_type_offsets.h
diff --git a/source/blender/blenloader/intern/versioning_270.c b/source/blender/blenloader/intern/versioning_270.c
index eb39892..6956be7 100644
--- a/source/blender/blenloader/intern/versioning_270.c
+++ b/source/blender/blenloader/intern/versioning_270.c
@@ -76,6 +76,8 @@
 
 #include "MEM_guardedalloc.h"
 
+#include "VP_engine_API.h"
+
 /**
  * Setup rotation stabilization from ancient single track spec.
  * Former Version of 2D stabilization used a single tracking marker to determine the rotation
@@ -1337,4 +1339,19 @@ void blo_do_versions_270(FileData *fd, Library *UNUSED(lib), Main *main)
 			}
 		}
 	}
+
+	{
+		if (!DNA_struct_elem_find(fd->filesdna, "View3D", "ViewportEngine", "*viewport_engine")) {
+			for (bScreen *screen = main->screen.first; screen; screen = screen->id.next) {
+				for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) {
+					for (SpaceLink *sl = sa->spacedata.first; sl; sl = sl->next) {
+						if (sl->spacetype == SPACE_VIEW3D) {
+							View3D *v3d = (View3D *)sl;
+							v3d->viewport_engine = VP_engine_create(ViewportEngineTypes.first);
+						}
+					}
+				}
+			}
+		}
+	}
 }
diff --git a/source/blender/editors/space_view3d/CMakeLists.txt b/source/blender/editors/space_view3d/CMakeLists.txt
index 8fca2ed..026a2ec 100644
--- a/source/blender/editors/space_view3d/CMakeLists.txt
+++ b/source/blender/editors/space_view3d/CMakeLists.txt
@@ -30,6 +30,7 @@ set(INC
 	../../makesdna
 	../../makesrna
 	../../render/extern/include
+	../../viewport
 	../../windowmanager
 	../../depsgraph
 	../../../../intern/guardedalloc
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index da7f707..ab7ec00 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -60,6 +60,8 @@
 
 #include "BIF_gl.h"
 
+#include "VP_engine_API.h"
+
 #include "WM_api.h"
 #include "WM_types.h"
 
@@ -331,6 +333,8 @@ static SpaceLink *view3d_new(const bContext *C)
 	v3d->gridsubdiv = 10;
 	v3d->drawtype = OB_SOLID;
 
+	v3d->viewport_engine = VP_engine_create(ViewportEngineTypes.first);
+
 	v3d->gridflag = V3D_SHOW_X | V3D_SHOW_Y | V3D_SHOW_FLOOR;
 	
 	v3d->flag = V3D_SELECT_OUTLINE;
@@ -406,6 +410,8 @@ static void view3d_free(SpaceLink *sl)
 	View3D *vd = (View3D *) sl;
 	BGpic *bgpic;
 
+	VP_engine_free(vd->viewport_engine);
+
 	for (bgpic = vd->bgpicbase.first; bgpic; bgpic = bgpic->next) {
 		if (bgpic->source == V3D_BGPIC_IMAGE) {
 			id_us_min((ID *)bgpic->ima);
diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c
index 5f3a075..cf04c25 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -1121,4 +1121,4 @@ void VP_legacy_view3d_stereo3d_setup(Scene *scene, View3D *v3d, ARegion *ar)
 bool VP_legacy_use_depth(Scene *scene, View3D *v3d)
 {
 	return use_depth_doit(scene, v3d);
-}
\ No newline at end of file
+}
diff --git a/source/blender/makesdna/DNA_view3d_types.h b/source/blender/makesdna/DNA_view3d_types.h
index e2d156e..5f53b24 100644
--- a/source/blender/makesdna/DNA_view3d_types.h
+++ b/source/blender/makesdna/DNA_view3d_types.h
@@ -149,6 +149,11 @@ typedef struct RegionView3D {
 	struct GPUFX *compositor;
 } RegionView3D;
 
+typedef struct ViewportEngine {
+	struct ViewportEngineType *type;
+	void *pad;
+} ViewportEngine;
+
 /* 3D ViewPort Struct */
 typedef struct View3D {
 	struct SpaceLink *next, *prev;
@@ -157,6 +162,8 @@ typedef struct View3D {
 	float blockscale;
 	short blockhandler[8];
 
+	ViewportEngine *viewport_engine;
+
 	float viewquat[4]  DNA_DEPRECATED;
 	float dist         DNA_DEPRECATED;
 
diff --git a/source/blender/makesrna/RNA_enum_types.h b/source/blender/makesrna/RNA_enum_types.h
index 27da739..691ea9a 100644
--- a/source/blender/makesrna/RNA_enum_types.h
+++ b/source/blender/makesrna/RNA_enum_types.h
@@ -160,6 +160,7 @@ extern EnumPropertyItem rna_enum_property_unit_items[];
 
 extern EnumPropertyItem rna_enum_gameproperty_type_items[];
 
+extern EnumPropertyItem rna_enum_viewport_engine_items[];
 extern EnumPropertyItem rna_enum_viewport_shade_items[];
 
 extern EnumPropertyItem rna_enum_navigation_mode_items[];
diff --git a/source/blender/makesrna/intern/CMakeLists.txt b/source/blender/makesrna/intern/CMakeLists.txt
index cc3fd2c..e7019c2 100644
--- a/source/blender/makesrna/intern/CMakeLists.txt
+++ b/source/blender/makesrna/intern/CMakeLists.txt
@@ -348,6 +348,7 @@ blender_include_dirs(
 	../../windowmanager
 	../../editors/include
 	../../render/extern/include
+	../../viewport
 	../../../../intern/cycles/blender
 	../../../../intern/guardedalloc
 	../../../../intern/glew-mx
diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c
index d169720..d28f5b2 100644
--- a/source/blender/makesrna/intern/rna_space.c
+++ b/source/blender/makesrna/intern/rna_space.c
@@ -175,6 +175,11 @@ static EnumPropertyItem autosnap_items[] = {
 };
 #endif
 
+EnumPropertyItem rna_enum_viewport_engine_items[] = {
+	{0, "BLENDER_VIEWPORT", 0, "Modern Viewport", ""},
+	{0, NULL, 0, NULL, NULL}
+};
+
 EnumPropertyItem rna_enum_viewport_shade_items[] = {
 	{OB_BOUNDBOX, "BOUNDBOX", ICON_BBOX, "Bounding Box", "Display the object's local bounding boxes only"},
 	{OB_WIRE, "WIREFRAME", ICON_WIRE, "Wireframe", "Display the object as wire edges"},
@@ -274,6 +279,9 @@ EnumPropertyItem rna_enum_file_sort_items[] = {
 #include "UI_interface.h"
 #include "UI_view2d.h"
 
+#include "VP_engine_API.h"
+
+
 static StructRNA *rna_Space_refine(struct PointerRNA *ptr)
 {
 	SpaceLink *space = (SpaceLink *)ptr->data;
@@ -674,6 +682,60 @@ static void rna_RegionView3D_view_matrix_set(PointerRNA *ptr, const float *value
 	ED_view3d_from_m4(mat, rv3d->ofs, rv3d->viewquat, &rv3d->dist);
 }
 
+static int rna_SpaceView3D_viewport_engine_get(PointerRNA *ptr)
+{
+	View3D *v3d = (View3D *)ptr->data;
+	int engine_type_idx = 0;
+
+	if (!v3d->viewport_engine) {
+		BLI_assert(0);
+		return -1;
+	}
+
+	for (ViewportEngineType *engine_type = ViewportEngineTypes.first; engine_type; engine_type = engine_type->next) {
+		if (v3d->viewport_engine->type == engine_type) {
+			break;
+		}
+		engine_type_idx++;
+	}
+
+	return engine_type_idx;
+}
+
+static void rna_SpaceView3D_viewport_engine_set(PointerRNA *ptr, int value)
+{
+	View3D *v3d = (View3D *)ptr->data;
+	ViewportEngineType *new_engine_type = BLI_findlink(&ViewportEngineTypes, value);
+
+	if (new_engine_type) {
+		if (v3d->viewport_engine) {
+			VP_engine_free(v3d->viewport_engine);
+		}
+		v3d->viewport_engine = VP_engine_create(new_engine_type);
+	}
+}
+
+static EnumPropertyItem *rna_SpaceView3D_viewport_engine_itemf(
+        bContext *UNUSED(C), PointerRNA *UNUSED(ptr), PropertyRNA *UNUSED(prop),
+        bool *r_free)
+{
+	EnumPropertyItem *item = NULL;
+	EnumPropertyItem tmp = {0, "", 0, "", ""};
+	int totitem = 0;
+
+	for (ViewportEngineType *engine_type = ViewportEngineTypes.first; engine_type; engine_type = engine_type->next) {
+		tmp.value = totitem;
+		tmp.identifier = engine_type->idname;
+		tmp.name = engine_type->name;
+		RNA_enum_item_add(&item, &totitem, &tmp);
+	}
+
+	RNA_enum_item_end(&item, &totitem);
+	*r_free = true;
+
+	return item;
+}
+
 static int rna_SpaceView3D_viewport_shade_get(PointerRNA *ptr)
 {
 	Scene *scene = ((bScreen *)ptr->id.data)->scene;
@@ -2360,6 +2422,15 @@ static void rna_def_space_view3d(BlenderRNA *brna)
 	                         "Active camera used in this view (when unlocked from the scene's active camera)");
 	RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
 
+	/* viewport engine */
+	prop = RNA_def_property(srna, "viewport_engine", PROP_ENUM, PROP_NONE);
+	RNA_def_property_enum_items(prop, rna_enum_viewport_engine_items);
+	RNA_def_property_enum_funcs(prop, "rna_SpaceView3D_viewport_engine_get", "rna_SpaceView3D_viewport_engine_set",
+	                            "rna_SpaceView3D_viewport_engine_itemf");
+	RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
+	RNA_def_property_ui_text(prop, "Viewport Engine", "Engine to use for viewport drawing");
+	RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+
 	/* render border */
 	prop = RNA_def_property(srna, "use_render_border", PROP_BOOLEAN, PROP_NONE);
 	RNA_def_property_boolean_sdna(prop, NULL, "flag2", V3D_RENDER_BORDER);
diff --git a/source/blender/viewport/CMakeLists.txt b/source/blender/viewport/CMakeLists.txt
new file mode 100644
index 0000000..35e0645
--- /dev/null
+++ b/source/blender/viewport/CMakeLists.txt
@@ -0,0 +1

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list