Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2017-09-25 21:07:02 +0300
committerClément Foucault <foucault.clem@gmail.com>2017-09-25 21:14:42 +0300
commit198c7d3687c16581a48701733c4fe4b511eaf149 (patch)
tree41ff532219804afff847ac234d3af0b07521a9e2 /source/blender/draw
parent98dd2a518be52b7f94c3a6f9345f19a0aebb2284 (diff)
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.
Diffstat (limited to 'source/blender/draw')
-rw-r--r--source/blender/draw/DRW_engine.h2
-rw-r--r--source/blender/draw/engines/basic/basic_engine.c3
-rw-r--r--source/blender/draw/engines/clay/clay_engine.c3
-rw-r--r--source/blender/draw/engines/external/external_engine.c3
-rw-r--r--source/blender/draw/intern/DRW_render.h2
-rw-r--r--source/blender/draw/intern/draw_manager.c49
-rw-r--r--source/blender/draw/modes/edit_armature_mode.c3
-rw-r--r--source/blender/draw/modes/edit_curve_mode.c3
-rw-r--r--source/blender/draw/modes/edit_lattice_mode.c3
-rw-r--r--source/blender/draw/modes/edit_mesh_mode.c3
-rw-r--r--source/blender/draw/modes/edit_metaball_mode.c3
-rw-r--r--source/blender/draw/modes/edit_surface_mode.c3
-rw-r--r--source/blender/draw/modes/edit_text_mode.c3
-rw-r--r--source/blender/draw/modes/object_mode.c3
-rw-r--r--source/blender/draw/modes/paint_texture_mode.c3
-rw-r--r--source/blender/draw/modes/paint_vertex_mode.c3
-rw-r--r--source/blender/draw/modes/paint_weight_mode.c3
-rw-r--r--source/blender/draw/modes/particle_mode.c3
-rw-r--r--source/blender/draw/modes/pose_mode.c3
-rw-r--r--source/blender/draw/modes/sculpt_mode.c3
20 files changed, 85 insertions, 19 deletions
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/draw/modes/pose_mode.c b/source/blender/draw/modes/pose_mode.c
index 77688f9156c..1c2acd56085 100644
--- a/source/blender/draw/modes/pose_mode.c
+++ b/source/blender/draw/modes/pose_mode.c
@@ -193,5 +193,6 @@ DrawEngineType draw_engine_pose_type = {
&POSE_cache_populate,
NULL,
NULL,
- &POSE_draw_scene
+ &POSE_draw_scene,
+ NULL,
};
diff --git a/source/blender/draw/modes/sculpt_mode.c b/source/blender/draw/modes/sculpt_mode.c
index 7d2c96dc8de..f38e6565065 100644
--- a/source/blender/draw/modes/sculpt_mode.c
+++ b/source/blender/draw/modes/sculpt_mode.c
@@ -300,5 +300,6 @@ DrawEngineType draw_engine_sculpt_type = {
&SCULPT_cache_populate,
&SCULPT_cache_finish,
NULL, /* draw_background but not needed by mode engines */
- &SCULPT_draw_scene
+ &SCULPT_draw_scene,
+ NULL,
};