diff options
-rw-r--r-- | source/blender/draw/engines/external/external_engine.c | 12 | ||||
-rw-r--r-- | source/blender/draw/intern/DRW_render.h | 3 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_manager.c | 41 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_view.c | 10 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_draw.c | 7 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_intern.h | 2 | ||||
-rw-r--r-- | source/blender/gpu/GPU_viewport.h | 3 |
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; |