diff options
Diffstat (limited to 'source/blender/draw')
-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 |
4 files changed, 64 insertions, 2 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 ************************** */ |