[Bf-blender-cvs] [198c7d3687c] blender2.8: DRW : Add new view_update mechanism.

Clément Foucault noreply at git.blender.org
Mon Sep 25 20:46:49 CEST 2017


Commit: 198c7d3687c16581a48701733c4fe4b511eaf149
Author: Clément Foucault
Date:   Mon Sep 25 20:07:02 2017 +0200
Branches: blender2.8
https://developer.blender.org/rB198c7d3687c16581a48701733c4fe4b511eaf149

DRW : Add new view_update mechanism.

This makes updates for the viewport cleaner and also add the possibility to add a new callback called when the scene is updated.

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

M	source/blender/draw/DRW_engine.h
M	source/blender/draw/engines/basic/basic_engine.c
M	source/blender/draw/engines/clay/clay_engine.c
M	source/blender/draw/engines/external/external_engine.c
M	source/blender/draw/intern/DRW_render.h
M	source/blender/draw/intern/draw_manager.c
M	source/blender/draw/modes/edit_armature_mode.c
M	source/blender/draw/modes/edit_curve_mode.c
M	source/blender/draw/modes/edit_lattice_mode.c
M	source/blender/draw/modes/edit_mesh_mode.c
M	source/blender/draw/modes/edit_metaball_mode.c
M	source/blender/draw/modes/edit_surface_mode.c
M	source/blender/draw/modes/edit_text_mode.c
M	source/blender/draw/modes/object_mode.c
M	source/blender/draw/modes/paint_texture_mode.c
M	source/blender/draw/modes/paint_vertex_mode.c
M	source/blender/draw/modes/paint_weight_mode.c
M	source/blender/draw/modes/particle_mode.c
M	source/blender/draw/modes/pose_mode.c
M	source/blender/draw/modes/sculpt_mode.c
M	source/blender/editors/render/CMakeLists.txt
M	source/blender/editors/render/render_update.c
M	source/blender/gpu/GPU_viewport.h
M	source/blender/gpu/intern/gpu_viewport.c
M	source/blender/windowmanager/intern/wm_draw.c

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

diff --git a/source/blender/draw/DRW_engine.h b/source/blender/draw/DRW_engine.h
index 3b1dcba1503..646d8716094 100644
--- a/source/blender/draw/DRW_engine.h
+++ b/source/blender/draw/DRW_engine.h
@@ -66,6 +66,8 @@ void DRW_engine_viewport_data_size_get(
         const void *engine_type,
         int *r_fbl_len, int *r_txl_len, int *r_psl_len, int *r_stl_len);
 
+void DRW_notify_view_update(const struct bContext *C);
+
 void DRW_draw_view(const struct bContext *C);
 
 void DRW_draw_render_loop_ex(
diff --git a/source/blender/draw/engines/basic/basic_engine.c b/source/blender/draw/engines/basic/basic_engine.c
index cc78a43912e..fbd8f20caf7 100644
--- a/source/blender/draw/engines/basic/basic_engine.c
+++ b/source/blender/draw/engines/basic/basic_engine.c
@@ -261,7 +261,8 @@ DrawEngineType draw_engine_basic_type = {
 	&BASIC_cache_populate,
 	&BASIC_cache_finish,
 	NULL,
-	&BASIC_draw_scene
+	&BASIC_draw_scene,
+	NULL,
 };
 
 /* Note: currently unused, we may want to register so we can see this when debugging the view. */
diff --git a/source/blender/draw/engines/clay/clay_engine.c b/source/blender/draw/engines/clay/clay_engine.c
index 6e98b9e5ae4..97ea6ae77a4 100644
--- a/source/blender/draw/engines/clay/clay_engine.c
+++ b/source/blender/draw/engines/clay/clay_engine.c
@@ -923,7 +923,8 @@ DrawEngineType draw_engine_clay_type = {
 	&CLAY_cache_populate,
 	&CLAY_cache_finish,
 	NULL,
-	&CLAY_draw_scene
+	&CLAY_draw_scene,
+	NULL,
 };
 
 RenderEngineType DRW_engine_viewport_clay_type = {
diff --git a/source/blender/draw/engines/external/external_engine.c b/source/blender/draw/engines/external/external_engine.c
index e487b29ebfd..e765a0fe3a8 100644
--- a/source/blender/draw/engines/external/external_engine.c
+++ b/source/blender/draw/engines/external/external_engine.c
@@ -216,7 +216,8 @@ DrawEngineType draw_engine_external_type = {
 	&EXTERNAL_cache_populate,
 	&EXTERNAL_cache_finish,
 	NULL,
-	&EXTERNAL_draw_scene
+	&EXTERNAL_draw_scene,
+	NULL,
 };
 
 /* Note: currently unused, we should not register unless we want to see this when debugging the view. */
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index b546631b8c3..428bea17f7c 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -136,6 +136,8 @@ typedef struct DrawEngineType {
 
 	void (*draw_background)(void *vedata);
 	void (*draw_scene)(void *vedata);
+
+	void (*view_update)(void *vedata);
 } DrawEngineType;
 
 #ifndef __DRW_ENGINE_H__
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index 1f3be9b1f4d..eb19f99802a 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -2549,6 +2549,8 @@ static void DRW_viewport_var_init(void)
 	if (RST.bound_tex_slots == NULL) {
 		RST.bound_tex_slots = MEM_callocN(sizeof(bool) * GPU_max_textures(), "Bound Texture Slots");
 	}
+
+	memset(viewport_matrix_override.override, 0x0, sizeof(viewport_matrix_override.override));
 }
 
 void DRW_viewport_matrix_get(float mat[4][4], DRWViewportMatrixType type)
@@ -2615,8 +2617,7 @@ DefaultTextureList *DRW_viewport_texture_list_get(void)
 
 void DRW_viewport_request_redraw(void)
 {
-	/* XXXXXXXXXXX HAAAAAAAACKKKK */
-	WM_main_add_notifier(NC_MATERIAL | ND_SHADING_DRAW, NULL);
+	GPU_viewport_tag_update(DST.viewport);
 }
 
 /** \} */
@@ -3138,6 +3139,50 @@ static void DRW_debug_gpu_stats(void)
 	DRW_stats_draw(&rect);
 }
 
+/* -------------------------------------------------------------------- */
+
+/** \name View Update
+ * \{ */
+
+void DRW_notify_view_update(const bContext *C)
+{
+	struct Depsgraph *graph = CTX_data_depsgraph(C);
+	ARegion *ar = CTX_wm_region(C);
+	View3D *v3d = CTX_wm_view3d(C);
+	RegionView3D *rv3d = ar->regiondata;
+	Scene *scene = DEG_get_evaluated_scene(graph);
+	SceneLayer *sl = DEG_get_evaluated_scene_layer(graph);
+
+	if (rv3d->viewport == NULL) {
+		return;
+	}
+
+
+	/* Reset before using it. */
+	memset(&DST, 0x0, sizeof(DST));
+
+	DST.viewport = rv3d->viewport;
+	DST.draw_ctx = (DRWContextState){
+		ar, rv3d, v3d, scene, sl, OBACT_NEW(sl), C,
+	};
+
+	DRW_engines_enable(scene, sl);
+
+	for (LinkData *link = DST.enabled_engines.first; link; link = link->next) {
+		DrawEngineType *engine = link->data;
+		ViewportEngineData *data = DRW_viewport_engine_data_get(engine);
+
+		if (engine->view_update) {
+			engine->view_update(data);
+		}
+	}
+
+	DST.viewport = NULL;
+
+	DRW_engines_disable();
+}
+
+/** \} */
 
 /* -------------------------------------------------------------------- */
 
diff --git a/source/blender/draw/modes/edit_armature_mode.c b/source/blender/draw/modes/edit_armature_mode.c
index 06756e5a240..4deb4f86692 100644
--- a/source/blender/draw/modes/edit_armature_mode.c
+++ b/source/blender/draw/modes/edit_armature_mode.c
@@ -152,5 +152,6 @@ DrawEngineType draw_engine_edit_armature_type = {
 	&EDIT_ARMATURE_cache_populate,
 	NULL,
 	NULL,
-	&EDIT_ARMATURE_draw_scene
+	&EDIT_ARMATURE_draw_scene,
+	NULL,
 };
diff --git a/source/blender/draw/modes/edit_curve_mode.c b/source/blender/draw/modes/edit_curve_mode.c
index 02a35e07798..1d542fc8e7e 100644
--- a/source/blender/draw/modes/edit_curve_mode.c
+++ b/source/blender/draw/modes/edit_curve_mode.c
@@ -329,5 +329,6 @@ DrawEngineType draw_engine_edit_curve_type = {
 	&EDIT_CURVE_cache_populate,
 	&EDIT_CURVE_cache_finish,
 	NULL, /* draw_background but not needed by mode engines */
-	&EDIT_CURVE_draw_scene
+	&EDIT_CURVE_draw_scene,
+	NULL,
 };
diff --git a/source/blender/draw/modes/edit_lattice_mode.c b/source/blender/draw/modes/edit_lattice_mode.c
index 48ea723613a..675ea925a39 100644
--- a/source/blender/draw/modes/edit_lattice_mode.c
+++ b/source/blender/draw/modes/edit_lattice_mode.c
@@ -292,5 +292,6 @@ DrawEngineType draw_engine_edit_lattice_type = {
 	&EDIT_LATTICE_cache_populate,
 	&EDIT_LATTICE_cache_finish,
 	NULL, /* draw_background but not needed by mode engines */
-	&EDIT_LATTICE_draw_scene
+	&EDIT_LATTICE_draw_scene,
+	NULL,
 };
diff --git a/source/blender/draw/modes/edit_mesh_mode.c b/source/blender/draw/modes/edit_mesh_mode.c
index 7cff23a2d23..08310d75a57 100644
--- a/source/blender/draw/modes/edit_mesh_mode.c
+++ b/source/blender/draw/modes/edit_mesh_mode.c
@@ -593,5 +593,6 @@ DrawEngineType draw_engine_edit_mesh_type = {
 	&EDIT_MESH_cache_populate,
 	NULL,
 	NULL,
-	&EDIT_MESH_draw_scene
+	&EDIT_MESH_draw_scene,
+	NULL,
 };
diff --git a/source/blender/draw/modes/edit_metaball_mode.c b/source/blender/draw/modes/edit_metaball_mode.c
index 4e9e1cb5b56..202e520193b 100644
--- a/source/blender/draw/modes/edit_metaball_mode.c
+++ b/source/blender/draw/modes/edit_metaball_mode.c
@@ -264,5 +264,6 @@ DrawEngineType draw_engine_edit_metaball_type = {
 	&EDIT_METABALL_cache_populate,
 	&EDIT_METABALL_cache_finish,
 	NULL, /* draw_background but not needed by mode engines */
-	&EDIT_METABALL_draw_scene
+	&EDIT_METABALL_draw_scene,
+	NULL,
 };
diff --git a/source/blender/draw/modes/edit_surface_mode.c b/source/blender/draw/modes/edit_surface_mode.c
index c8dbbd90754..e99973144aa 100644
--- a/source/blender/draw/modes/edit_surface_mode.c
+++ b/source/blender/draw/modes/edit_surface_mode.c
@@ -264,5 +264,6 @@ DrawEngineType draw_engine_edit_surface_type = {
 	&EDIT_SURFACE_cache_populate,
 	&EDIT_SURFACE_cache_finish,
 	NULL, /* draw_background but not needed by mode engines */
-	&EDIT_SURFACE_draw_scene
+	&EDIT_SURFACE_draw_scene,
+	NULL,
 };
diff --git a/source/blender/draw/modes/edit_text_mode.c b/source/blender/draw/modes/edit_text_mode.c
index 938ab2f3fbc..476a2ab9ac2 100644
--- a/source/blender/draw/modes/edit_text_mode.c
+++ b/source/blender/draw/modes/edit_text_mode.c
@@ -307,5 +307,6 @@ DrawEngineType draw_engine_edit_text_type = {
 	&EDIT_TEXT_cache_populate,
 	&EDIT_TEXT_cache_finish,
 	NULL, /* draw_background but not needed by mode engines */
-	&EDIT_TEXT_draw_scene
+	&EDIT_TEXT_draw_scene,
+	NULL,
 };
diff --git a/source/blender/draw/modes/object_mode.c b/source/blender/draw/modes/object_mode.c
index bde0a43120f..1667dd9e846 100644
--- a/source/blender/draw/modes/object_mode.c
+++ b/source/blender/draw/modes/object_mode.c
@@ -1876,5 +1876,6 @@ DrawEngineType draw_engine_object_type = {
 	&OBJECT_cache_populate,
 	NULL,
 	NULL,
-	&OBJECT_draw_scene
+	&OBJECT_draw_scene,
+	NULL,
 };
diff --git a/source/blender/draw/modes/paint_texture_mode.c b/source/blender/draw/modes/paint_texture_mode.c
index 65ab9fd9286..f898770acef 100644
--- a/source/blender/draw/modes/paint_texture_mode.c
+++ b/source/blender/draw/modes/paint_texture_mode.c
@@ -412,5 +412,6 @@ DrawEngineType draw_engine_paint_texture_type = {
 	&PAINT_TEXTURE_cache_populate,
 	&PAINT_TEXTURE_cache_finish,
 	NULL, /* draw_background but not needed by mode engines */
-	&PAINT_TEXTURE_draw_scene
+	&PAINT_TEXTURE_draw_scene,
+	NULL,
 };
diff --git a/source/blender/draw/modes/paint_vertex_mode.c b/source/blender/draw/modes/paint_vertex_mode.c
index 68bdf6d1304..e430fca5742 100644
--- a/source/blender/draw/modes/paint_vertex_mode.c
+++ b/source/blender/draw/modes/paint_vertex_mode.c
@@ -211,5 +211,6 @@ DrawEngineType draw_engine_paint_vertex_type = {
 	&PAINT_VERTEX_cache_populate,
 	NULL,
 	NULL,
-	&PAINT_VERTEX_draw_scene
+	&PAINT_VERTEX_draw_scene,
+	NULL,
 };
diff --git a/source/blender/draw/modes/paint_weight_mode.c b/source/blender/draw/modes/paint_weight_mode.c
index d837b273404..e139b4af97f 100644
--- a/source/blender/draw/modes/paint_weight_mode.c
+++ b/source/blender/draw/modes/paint_weight_mode.c
@@ -249,5 +249,6 @@ DrawEngineType draw_engine_paint_weight_type = {
 	&PAINT_WEIGHT_cache_populate,
 	NULL,
 	NULL,
-	&PAINT_WEIGHT_draw_scene
+	&PAINT_WEIGHT_draw_scene,
+	NULL,
 };
diff --git a/source/blender/draw/modes/particle_mode.c b/source/blender/draw/modes/particle_mode.c
index dd22a5c6d8f..be076815f4c 100644
--- a/source/blender/draw/modes/particle_mode.c
+++ b/source/blender/draw/modes/particle_mode.c
@@ -259,5 +259,6 @@ DrawEngineType draw_engine_particle_type = {
 	&PARTICLE_cache_populate,
 	&PARTICLE_cache_finish,
 	NULL, /* draw_background but not needed by mode engines */
-	&PARTICLE_draw_scene
+	&PARTICLE_draw_scene,
+	NULL,
 };
diff --git a/source/blender/

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list