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>2011-11-02 22:20:53 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2011-11-02 22:20:53 +0400
commit97a0ae3e1b7eea3c069da8c6d3c7a3535734059d (patch)
tree139a1b118140779120ed16c45ed319588596477e /source/blender/windowmanager/intern/wm_draw.c
parenta59f7e02f8c8b2527e6a23e440ca61a9b9992373 (diff)
RenderEngine api: support for viewport rendering, details here:
http://wiki.blender.org/index.php/Dev:2.6/Source/Render/RenderEngineAPI * This adds a Rendered draw type in the 3D view, only available when the render engine implements the view_draw callback. * 3D view now stores a pointer to a RenderEngine. * view_draw() callback will do OpenGL drawing instead of the viewport. * view_update() callback is called after depsgraph updates.
Diffstat (limited to 'source/blender/windowmanager/intern/wm_draw.c')
-rw-r--r--source/blender/windowmanager/intern/wm_draw.c41
1 files changed, 31 insertions, 10 deletions
diff --git a/source/blender/windowmanager/intern/wm_draw.c b/source/blender/windowmanager/intern/wm_draw.c
index 8261198ef78..389049d9e59 100644
--- a/source/blender/windowmanager/intern/wm_draw.c
+++ b/source/blender/windowmanager/intern/wm_draw.c
@@ -55,6 +55,8 @@
#include "GPU_draw.h"
#include "GPU_extensions.h"
+#include "RE_engine.h"
+
#include "WM_api.h"
#include "WM_types.h"
#include "wm.h"
@@ -113,6 +115,19 @@ static int wm_area_test_invalid_backbuf(ScrArea *sa)
return 1;
}
+static void wm_region_test_render_do_draw(ScrArea *sa, ARegion *ar)
+{
+ 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 = 1;
+ engine->flag &= ~RE_ENGINE_DO_DRAW;
+ }
+ }
+}
+
/********************** draw all **************************/
/* - reference method, draw all each time */
@@ -205,7 +220,7 @@ static void wm_method_draw_overlap_all(bContext *C, wmWindow *win, int exchange)
for(sa= screen->areabase.first; sa; sa= sa->next)
for(ar= sa->regionbase.first; ar; ar= ar->next)
if(ar->swinid && !wm_area_test_invalid_backbuf(sa))
- ED_region_tag_redraw(ar);
+ ED_region_tag_redraw(ar);
/* flush overlapping regions */
if(screen->regionbase.first) {
@@ -662,13 +677,28 @@ static int wm_draw_update_test_window(wmWindow *win)
{
ScrArea *sa;
ARegion *ar;
+ int do_draw= 0;
for(ar= win->screen->regionbase.first; ar; ar= ar->next) {
if(ar->do_draw_overlay) {
wm_tag_redraw_overlay(win, ar);
ar->do_draw_overlay= 0;
}
+ if(ar->swinid && ar->do_draw)
+ do_draw= 1;
+ }
+
+ 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);
+
+ if(ar->swinid && ar->do_draw)
+ do_draw = 1;
+ }
}
+
+ if(do_draw)
+ return 1;
if(win->screen->do_refresh)
return 1;
@@ -681,15 +711,6 @@ static int wm_draw_update_test_window(wmWindow *win)
if(win->screen->do_draw_drag)
return 1;
- for(ar= win->screen->regionbase.first; ar; ar= ar->next)
- if(ar->swinid && ar->do_draw)
- return 1;
-
- for(sa= win->screen->areabase.first; sa; sa= sa->next)
- for(ar=sa->regionbase.first; ar; ar= ar->next)
- if(ar->swinid && ar->do_draw)
- return 1;
-
return 0;
}