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--intern/cycles/blender/addon/engine.py36
-rw-r--r--intern/cycles/blender/blender_session.cpp35
-rw-r--r--intern/cycles/blender/blender_session.h1
-rw-r--r--intern/cycles/blender/blender_util.h2
-rw-r--r--source/blender/editors/space_view3d/view3d_draw.c61
-rw-r--r--source/blender/render/extern/include/RE_engine.h1
-rw-r--r--source/blender/render/intern/pipeline/engine.c41
7 files changed, 112 insertions, 65 deletions
diff --git a/intern/cycles/blender/addon/engine.py b/intern/cycles/blender/addon/engine.py
index 6879efcb24e..d25eb21eeb9 100644
--- a/intern/cycles/blender/addon/engine.py
+++ b/intern/cycles/blender/addon/engine.py
@@ -58,41 +58,7 @@ def draw(engine, region, v3d, rv3d):
rv3d = rv3d.as_pointer()
# draw render image
- status, substatus = lib.draw(engine.session, v3d, rv3d)
-
- # draw text over image
- if status != "":
- import blf
- import bgl
-
- fontid = 0 # todo, find out how to set this
- dim = blf.dimensions(fontid, status)
- dim_sub = blf.dimensions(fontid, substatus)
-
- padding = 5
-
- x = (region.width - max(dim[0], dim_sub[0]))*0.5 - padding
- y = (region.height - (dim[1] + dim_sub[1] + padding))*0.5 - padding
-
- bgl.glColor4f(0.0, 0.0, 0.0, 0.5)
- bgl.glEnable(bgl.GL_BLEND)
- bgl.glBlendFunc(bgl.GL_SRC_ALPHA, bgl.GL_ONE_MINUS_SRC_ALPHA)
- bgl.glRectf(x, y, x+max(dim[0], dim_sub[0])+padding+padding, y+dim[1]+dim_sub[1]+padding+padding+2)
- bgl.glDisable(bgl.GL_BLEND)
-
- x = (region.width - dim[0])*0.5
- y = (region.height - (dim[1] + dim_sub[1] + padding))*0.5 + dim_sub[1] + padding
-
- bgl.glColor3f(0.8, 0.8, 0.8)
- blf.position(fontid, x, y, 0)
- blf.draw(fontid, status)
-
- x = (region.width - dim_sub[0])*0.5
- y = (region.height - (dim[1] + dim_sub[1] + padding))*0.5
-
- bgl.glColor3f(0.6, 0.6, 0.6)
- blf.position(fontid, x, y, 0)
- blf.draw(fontid, substatus)
+ lib.draw(engine.session, v3d, rv3d)
def available_devices():
import libcycles_blender as lib
diff --git a/intern/cycles/blender/blender_session.cpp b/intern/cycles/blender/blender_session.cpp
index f69ebff5338..045efef0ef0 100644
--- a/intern/cycles/blender/blender_session.cpp
+++ b/intern/cycles/blender/blender_session.cpp
@@ -243,6 +243,15 @@ void BlenderSession::get_status(string& status, string& substatus)
session->progress.get_status(status, substatus);
}
+void BlenderSession::get_progress(float& progress, double& total_time)
+{
+ double pass_time;
+ int pass;
+
+ session->progress.get_pass(pass, total_time, pass_time);
+ progress = ((float)pass/(float)session->params.passes);
+}
+
void BlenderSession::tag_update()
{
/* tell blender that we want to get another update callback */
@@ -251,16 +260,28 @@ void BlenderSession::tag_update()
void BlenderSession::tag_redraw()
{
- if(background) {
- /* offline render, set stats and redraw if timeout passed */
- string status, substatus;
- get_status(status, substatus);
+ string status, substatus;
+ float progress;
+ double total_time;
+ char time_str[128];
+
+ /* update stats and progress */
+ get_status(status, substatus);
+ get_progress(progress, total_time);
+
+ if(!background) {
+ BLI_timestr(total_time, time_str);
+ status = "Time: " + string(time_str) + " | " + status;
+ }
- if(substatus.size() > 0)
- status += " | " + substatus;
+ if(substatus.size() > 0)
+ status += " | " + substatus;
- RE_engine_update_stats((RenderEngine*)b_engine.ptr.data, "", status.c_str());
+ RE_engine_update_stats((RenderEngine*)b_engine.ptr.data, "", status.c_str());
+ RE_engine_update_progress((RenderEngine*)b_engine.ptr.data, progress);
+ if(background) {
+ /* offline render, redraw if timeout passed */
if(time_dt() - last_redraw_time > 1.0f) {
write_render_result();
engine_tag_redraw((RenderEngine*)b_engine.ptr.data);
diff --git a/intern/cycles/blender/blender_session.h b/intern/cycles/blender/blender_session.h
index 8bc5d3dfab9..ea3e005a884 100644
--- a/intern/cycles/blender/blender_session.h
+++ b/intern/cycles/blender/blender_session.h
@@ -55,6 +55,7 @@ public:
void tag_redraw();
void tag_update();
void get_status(string& status, string& substatus);
+ void get_progress(float& progress, double& total_time);
void test_cancel();
bool background;
diff --git a/intern/cycles/blender/blender_util.h b/intern/cycles/blender/blender_util.h
index 354a195758f..fe9a611e2f8 100644
--- a/intern/cycles/blender/blender_util.h
+++ b/intern/cycles/blender/blender_util.h
@@ -44,9 +44,11 @@ void RE_engine_update_result(struct RenderEngine *engine, struct RenderResult *r
void RE_engine_end_result(struct RenderEngine *engine, struct RenderResult *result);
int RE_engine_test_break(struct RenderEngine *engine);
void RE_engine_update_stats(struct RenderEngine *engine, const char *stats, const char *info);
+void RE_engine_update_progress(struct RenderEngine *engine, float progress);
void engine_tag_redraw(void *engine);
void engine_tag_update(void *engine);
int rna_Object_is_modified(void *ob, void *scene, int settings);
+void BLI_timestr(double _time, char *str);
}
diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c
index cf048582849..746bc752764 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -2566,6 +2566,32 @@ static int view3d_main_area_draw_engine(const bContext *C, ARegion *ar)
return 1;
}
+static void view3d_main_area_draw_engine_info(RegionView3D *rv3d, ARegion *ar)
+{
+ rcti rect;
+ const int header_height = 18;
+
+ if(!rv3d->render_engine || !rv3d->render_engine->text)
+ return;
+
+ /* background box */
+ rect= ar->winrct;
+ rect.xmin= 0;
+ rect.ymin= ar->winrct.ymax - ar->winrct.ymin - header_height;
+ rect.xmax= ar->winrct.xmax - ar->winrct.xmin;
+ rect.ymax= ar->winrct.ymax - ar->winrct.ymin;
+
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
+ glColor4f(0.0f, 0.0f, 0.0f, 0.25f);
+ glRecti(rect.xmin, rect.ymin, rect.xmax+1, rect.ymax+1);
+ glDisable(GL_BLEND);
+
+ /* text */
+ UI_ThemeColor(TH_TEXT_HI);
+ UI_DrawString(12, rect.ymin + 5, rv3d->render_engine->text);
+}
+
/* warning: this function has duplicate drawing in ED_view3d_draw_offscreen() */
void view3d_main_area_draw(const bContext *C, ARegion *ar)
{
@@ -2781,26 +2807,31 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar)
else
draw_view_icon(rv3d);
- if((U.uiflag & USER_SHOW_FPS) && (CTX_wm_screen(C)->animtimer)) {
- draw_viewport_fps(scene, ar);
+ if(rv3d->render_engine) {
+ view3d_main_area_draw_engine_info(rv3d, ar);
}
- else if(U.uiflag & USER_SHOW_VIEWPORTNAME) {
- draw_viewport_name(ar, v3d);
- }
- if (grid_unit) { /* draw below the viewport name */
- char tstr[32]= "";
+ else {
+ if((U.uiflag & USER_SHOW_FPS) && (CTX_wm_screen(C)->animtimer)) {
+ draw_viewport_fps(scene, ar);
+ }
+ else if(U.uiflag & USER_SHOW_VIEWPORTNAME) {
+ draw_viewport_name(ar, v3d);
+ }
+ if (grid_unit) { /* draw below the viewport name */
+ char tstr[32]= "";
- UI_ThemeColor(TH_TEXT_HI);
- if(v3d->grid != 1.0f) {
- BLI_snprintf(tstr, sizeof(tstr), "%s x %.4g", grid_unit, v3d->grid);
+ UI_ThemeColor(TH_TEXT_HI);
+ if(v3d->grid != 1.0f) {
+ BLI_snprintf(tstr, sizeof(tstr), "%s x %.4g", grid_unit, v3d->grid);
+ }
+
+ BLF_draw_default_ascii(22, ar->winy-(USER_SHOW_VIEWPORTNAME?40:20), 0.0f, tstr[0]?tstr : grid_unit, sizeof(tstr)); /* XXX, use real length */
}
- BLF_draw_default_ascii(22, ar->winy-(USER_SHOW_VIEWPORTNAME?40:20), 0.0f, tstr[0]?tstr : grid_unit, sizeof(tstr)); /* XXX, use real length */
+ ob= OBACT;
+ if(U.uiflag & USER_DRAWVIEWINFO)
+ draw_selected_name(scene, ob);
}
-
- ob= OBACT;
- if(U.uiflag & USER_DRAWVIEWINFO)
- draw_selected_name(scene, ob);
/* XXX here was the blockhandlers for floating panels */
diff --git a/source/blender/render/extern/include/RE_engine.h b/source/blender/render/extern/include/RE_engine.h
index f7a927ec5db..7f01bc673d2 100644
--- a/source/blender/render/extern/include/RE_engine.h
+++ b/source/blender/render/extern/include/RE_engine.h
@@ -82,6 +82,7 @@ typedef struct RenderEngine {
struct Render *re;
ListBase fullresult;
+ char *text;
int do_draw;
int do_update;
diff --git a/source/blender/render/intern/pipeline/engine.c b/source/blender/render/intern/pipeline/engine.c
index 68d3b2697c5..0fc6a0320c8 100644
--- a/source/blender/render/intern/pipeline/engine.c
+++ b/source/blender/render/intern/pipeline/engine.c
@@ -38,6 +38,7 @@
#include "MEM_guardedalloc.h"
#include "BLI_listbase.h"
+#include "BLI_string.h"
#include "BLI_utildefines.h"
#include "BKE_report.h"
@@ -133,6 +134,9 @@ void RE_engine_free(RenderEngine *engine)
}
#endif
+ if(engine->text)
+ MEM_freeN(engine->text);
+
MEM_freeN(engine);
}
@@ -204,7 +208,10 @@ int RE_engine_test_break(RenderEngine *engine)
{
Render *re= engine->re;
- return re->test_break(re->tbh);
+ if(re)
+ return re->test_break(re->tbh);
+
+ return 0;
}
/* Statistics */
@@ -213,19 +220,37 @@ void RE_engine_update_stats(RenderEngine *engine, const char *stats, const char
{
Render *re= engine->re;
- re->i.statstr= stats;
- re->i.infostr= info;
- re->stats_draw(re->sdh, &re->i);
- re->i.infostr= NULL;
- re->i.statstr= NULL;
+ /* stats draw callback */
+ if(re) {
+ re->i.statstr= stats;
+ re->i.infostr= info;
+ re->stats_draw(re->sdh, &re->i);
+ re->i.infostr= NULL;
+ re->i.statstr= NULL;
+ }
+
+ /* set engine text */
+ if(engine->text) {
+ MEM_freeN(engine->text);
+ engine->text= NULL;
+ }
+
+ if(stats && stats[0] && info && info[0])
+ engine->text= BLI_sprintfN("%s | %s", stats, info);
+ else if(info && info[0])
+ engine->text= BLI_strdup(info);
+ else if(stats && stats[0])
+ engine->text= BLI_strdup(stats);
}
void RE_engine_update_progress(RenderEngine *engine, float progress)
{
Render *re= engine->re;
- CLAMP(progress, 0.0f, 1.0f);
- re->progress(re->prh, progress);
+ if(re) {
+ CLAMP(progress, 0.0f, 1.0f);
+ re->progress(re->prh, progress);
+ }
}
void RE_engine_report(RenderEngine *engine, int type, const char *msg)