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:
-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;