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:
authorDalai Felinto <dfelinto@gmail.com>2017-05-04 16:46:09 +0300
committerDalai Felinto <dfelinto@gmail.com>2017-05-04 17:59:58 +0300
commita3d8ef059cf831ec032977079a837214e7c92122 (patch)
treea5c878afa23dae03e0952142e6d91d9751237f7c
parent6ea45da05c1d42253c84a8603f4b08342adee4e4 (diff)
Draw Manager: Implement render info for external engines
This can be used by any engine actually. For example to give feedback regarding probe caching in Eevee, .... Unline master, we try to conciliate both the original viewport info (FPS, view name) and the render info. Note: I had to split the function in two because the camera alpha passepartout is handled inside the view3d_draw_region_info function. Review: Campbell Barton and Clement Foucault. Thanks to Sergey Sharybin and Pablo Vazquez for some of the design discussions.
-rw-r--r--source/blender/draw/engines/external/external_engine.c12
-rw-r--r--source/blender/draw/intern/DRW_render.h3
-rw-r--r--source/blender/draw/intern/draw_manager.c41
-rw-r--r--source/blender/draw/intern/draw_view.c10
-rw-r--r--source/blender/editors/space_view3d/view3d_draw.c7
-rw-r--r--source/blender/editors/space_view3d/view3d_intern.h2
-rw-r--r--source/blender/gpu/GPU_viewport.h3
7 files changed, 73 insertions, 5 deletions
diff --git a/source/blender/draw/engines/external/external_engine.c b/source/blender/draw/engines/external/external_engine.c
index 7b6b4e51147..6a530cccb6e 100644
--- a/source/blender/draw/engines/external/external_engine.c
+++ b/source/blender/draw/engines/external/external_engine.c
@@ -80,6 +80,7 @@ typedef struct EXTERNAL_Data {
EXTERNAL_TextureList *txl;
EXTERNAL_PassList *psl;
EXTERNAL_StorageList *stl;
+ char info[GPU_INFO_SIZE];
} EXTERNAL_Data;
/* *********** STATIC *********** */
@@ -138,7 +139,7 @@ static void EXTERNAL_cache_finish(void *UNUSED(vedata))
{
}
-static void external_draw_scene(void *UNUSED(vedata))
+static void external_draw_scene(void *vedata)
{
const DRWContextState *draw_ctx = DRW_context_state_get();
Scene *scene = draw_ctx->scene;
@@ -173,6 +174,15 @@ static void external_draw_scene(void *UNUSED(vedata))
type->render_to_view(rv3d->render_engine, draw_ctx->evil_C);
gpuPopProjectionMatrix();
+
+ /* Set render info. */
+ EXTERNAL_Data *data = vedata;
+ if (rv3d->render_engine->text) {
+ BLI_strncpy(data->info, rv3d->render_engine->text, sizeof(data->info));
+ }
+ else {
+ data->info[0] = '\0';
+ }
}
static void EXTERNAL_draw_scene(void *vedata)
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index 394f5d8d670..0b694da6c94 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -327,6 +327,9 @@ void DRW_draw_text_cache_queue(struct DRWTextStore *dt);
void DRW_draw_callbacks_pre_scene(void);
void DRW_draw_callbacks_post_scene(void);
+int DRW_draw_region_engine_info_offset(void);
+void DRW_draw_region_engine_info(void);
+
void DRW_state_reset_ex(DRWState state);
void DRW_state_reset(void);
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index c64e5b6403b..5b4111ada2c 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -41,6 +41,7 @@
#include "DRW_engine.h"
#include "DRW_render.h"
+#include "DNA_camera_types.h"
#include "DNA_view3d_types.h"
#include "DNA_screen_types.h"
@@ -64,6 +65,7 @@
#include "RE_engine.h"
+#include "UI_interface.h"
#include "UI_resources.h"
#include "draw_manager_text.h"
@@ -2019,6 +2021,45 @@ static void DRW_engines_draw_text(void)
}
}
+/**
+ * Returns the offset required for the drawing of engines info.
+ */
+int DRW_draw_region_engine_info_offset()
+{
+ int offset = 0;
+ for (LinkData *link = DST.enabled_engines.first; link; link = link->next) {
+ DrawEngineType *engine = link->data;
+ ViewportEngineData *data = DRW_viewport_engine_data_get(engine);
+
+ if (data->info[0] != '\0') {
+ offset += UI_UNIT_Y;
+ }
+ }
+ return offset;
+}
+
+/**
+ * Actual drawing;
+ */
+void DRW_draw_region_engine_info()
+{
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ ARegion *ar = draw_ctx->ar;
+ float fill_color[4] = {0.0f, 0.0f, 0.0f, 0.25f};
+
+ UI_GetThemeColor3fv(TH_HIGH_GRAD, fill_color);
+ mul_v3_fl(fill_color, fill_color[3]);
+
+ for (LinkData *link = DST.enabled_engines.first; link; link = link->next) {
+ DrawEngineType *engine = link->data;
+ ViewportEngineData *data = DRW_viewport_engine_data_get(engine);
+
+ if (data->info[0] != '\0') {
+ ED_region_info_draw(ar, data->info, fill_color, true);
+ }
+ }
+}
+
static void use_drw_engine(DrawEngineType *engine)
{
LinkData *ld = MEM_callocN(sizeof(LinkData), "enabled engine link data");
diff --git a/source/blender/draw/intern/draw_view.c b/source/blender/draw/intern/draw_view.c
index c6a0d6ed5b1..b4d0a9309dd 100644
--- a/source/blender/draw/intern/draw_view.c
+++ b/source/blender/draw/intern/draw_view.c
@@ -61,9 +61,17 @@ void DRW_draw_region_info(void)
{
const DRWContextState *draw_ctx = DRW_context_state_get();
ARegion *ar = draw_ctx->ar;
+ int offset;
DRW_draw_cursor();
- view3d_draw_region_info(draw_ctx->evil_C, ar);
+
+ offset = DRW_draw_region_engine_info_offset();
+
+ view3d_draw_region_info(draw_ctx->evil_C, ar, offset);
+
+ if (offset > 0) {
+ DRW_draw_region_engine_info();
+ }
}
/* ************************* Grid ************************** */
diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c
index ceb8f69acaf..b54681dfde4 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -2311,7 +2311,7 @@ static void view3d_draw_manipulators(const bContext *C, const ARegion *ar)
/**
* Information drawn on top of the solid plates and composed data
*/
-void view3d_draw_region_info(const bContext *C, ARegion *ar)
+void view3d_draw_region_info(const bContext *C, ARegion *ar, const int offset)
{
RegionView3D *rv3d = ar->regiondata;
View3D *v3d = CTX_wm_view3d(C);
@@ -2325,6 +2325,9 @@ void view3d_draw_region_info(const bContext *C, ARegion *ar)
rcti rect;
ED_region_visible_rect(ar, &rect);
+ /* Leave room for previously drawn info. */
+ rect.ymax -= offset;
+
view3d_draw_border(C, ar);
view3d_draw_grease_pencil(C);
@@ -2400,7 +2403,7 @@ static void view3d_draw_view(const bContext *C, ARegion *ar, DrawData *draw_data
glDisable(GL_DEPTH_TEST);
- view3d_draw_region_info(C, ar);
+ view3d_draw_region_info(C, ar, 0);
#if VIEW3D_DRAW_DEBUG
view3d_draw_debug(C, ar, draw_data);
diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h
index 8c306176eff..27d03f81109 100644
--- a/source/blender/editors/space_view3d/view3d_intern.h
+++ b/source/blender/editors/space_view3d/view3d_intern.h
@@ -209,7 +209,7 @@ void draw_sim_debug_data(Scene *scene, View3D *v3d, ARegion *ar);
/* view3d_draw.c */
void view3d_main_region_draw(const struct bContext *C, struct ARegion *ar);
-void view3d_draw_region_info(const struct bContext *C, struct ARegion *ar);
+void view3d_draw_region_info(const struct bContext *C, struct ARegion *ar, const int offset);
void ED_view3d_draw_depth(
struct Depsgraph *graph,
diff --git a/source/blender/gpu/GPU_viewport.h b/source/blender/gpu/GPU_viewport.h
index 2585fcae24c..e5acc024ff4 100644
--- a/source/blender/gpu/GPU_viewport.h
+++ b/source/blender/gpu/GPU_viewport.h
@@ -39,6 +39,8 @@
#include "GPU_framebuffer.h"
#include "GPU_texture.h"
+#define GPU_INFO_SIZE 512 /* IMA_MAX_RENDER_TEXT */
+
typedef struct GPUViewport GPUViewport;
/* All FramebufferLists are just the same pointers with different names */
@@ -65,6 +67,7 @@ typedef struct ViewportEngineData {
TextureList *txl;
PassList *psl;
StorageList *stl;
+ char info[GPU_INFO_SIZE];
/* we may want to put this elsewhere */
struct DRWTextStore *text_draw_cache;