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:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2013-04-15 01:42:58 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2013-04-15 01:42:58 +0400
commitc9a10b99ff2f25b6807cf43c3bfa827ba185e625 (patch)
treecfac9bc40c5b1f2a039933882d18dfd7c4f6513a /source/blender/windowmanager/intern/wm_draw.c
parent77a78658eaf8903d359b23867ae00cf492d39f75 (diff)
Cycles: optimization for 3D viewport border render with heavy scenes, the OpenGL
render of objects could slow things down when redrawing the view each time a new sample is displayed. Now it does a partial redraw of the viewport with only the render border area, skipping OpenGL object drawing while the render is refining.
Diffstat (limited to 'source/blender/windowmanager/intern/wm_draw.c')
-rw-r--r--source/blender/windowmanager/intern/wm_draw.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/source/blender/windowmanager/intern/wm_draw.c b/source/blender/windowmanager/intern/wm_draw.c
index e437d7c0958..396c827fe25 100644
--- a/source/blender/windowmanager/intern/wm_draw.c
+++ b/source/blender/windowmanager/intern/wm_draw.c
@@ -53,6 +53,7 @@
#include "GHOST_C-api.h"
+#include "ED_view3d.h"
#include "ED_screen.h"
#include "GPU_draw.h"
@@ -125,14 +126,24 @@ static int wm_area_test_invalid_backbuf(ScrArea *sa)
return 1;
}
-static void wm_region_test_render_do_draw(ScrArea *sa, ARegion *ar)
+static void wm_region_test_render_do_draw(bScreen *screen, ScrArea *sa, ARegion *ar)
{
+ /* tag region for redraw from render engine preview running inside of it */
if (sa->spacetype == SPACE_VIEW3D) {
RegionView3D *rv3d = ar->regiondata;
RenderEngine *engine = (rv3d) ? rv3d->render_engine : NULL;
if (engine && (engine->flag & RE_ENGINE_DO_DRAW)) {
- ar->do_draw = TRUE;
+ Scene *scene = screen->scene;
+ View3D *v3d = sa->spacedata.first;
+ rcti border_rect;
+
+ /* do partial redraw when possible */
+ if (ED_view3d_calc_render_border(scene, v3d, ar, &border_rect))
+ ED_region_tag_redraw_partial(ar, &border_rect);
+ else
+ ED_region_tag_redraw(ar);
+
engine->flag &= ~RE_ENGINE_DO_DRAW;
}
}
@@ -710,7 +721,7 @@ static int wm_draw_update_test_window(wmWindow *win)
for (sa = win->screen->areabase.first; sa; sa = sa->next) {
for (ar = sa->regionbase.first; ar; ar = ar->next) {
- wm_region_test_render_do_draw(sa, ar);
+ wm_region_test_render_do_draw(win->screen, sa, ar);
if (ar->swinid && ar->do_draw)
do_draw = TRUE;