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:
authorTon Roosendaal <ton@blender.org>2013-05-17 15:13:46 +0400
committerTon Roosendaal <ton@blender.org>2013-05-17 15:13:46 +0400
commit7b2172cb0b4afaada3f59f90f694847cfc61c43d (patch)
tree439fc1413791498022c04b310deebf78c5689902 /source/blender/editors/render
parenta4e9edb6743769bd9f8fd3e24bd11fd1878d510a (diff)
3D Viewport rendering (Blender Internal)
Added incremental re-render on view changes. That means all data preprocessing only needs to be done once on view changes, quite faster that way. Also fixed a bug in raytracing strands with soft shadows, was wrongly changing coordinates in a static array. Note: proper signals for re-renders is still on the todo. Many button options don't signal a re-render yet. Work around: press G+ESC for quick full renders.
Diffstat (limited to 'source/blender/editors/render')
-rw-r--r--source/blender/editors/render/render_internal.c31
1 files changed, 14 insertions, 17 deletions
diff --git a/source/blender/editors/render/render_internal.c b/source/blender/editors/render/render_internal.c
index a172287113f..954fff42a37 100644
--- a/source/blender/editors/render/render_internal.c
+++ b/source/blender/editors/render/render_internal.c
@@ -718,6 +718,8 @@ typedef struct RenderPreview {
Main *bmain;
RenderEngine *engine;
+ float viewmat[4][4];
+
int keep_data;
} RenderPreview;
@@ -828,7 +830,7 @@ static void render_view3d_startjob(void *customdata, short *stop, short *do_upda
rp->stop = stop;
rp->do_update = do_update;
-// printf("Enter previewrender\n");
+ // printf("Enter previewrender\n");
/* ok, are we rendering all over? */
sprintf(name, "View3dPreview %p", (void *)rp->ar);
@@ -884,14 +886,14 @@ static void render_view3d_startjob(void *customdata, short *stop, short *do_upda
lay |= rp->v3d->lay;
else lay = rp->v3d->lay;
- RE_SetView(re, rp->rv3d->viewmat);
+ RE_SetView(re, rp->viewmat);
RE_Database_FromScene(re, rp->bmain, rp->scene, lay, 0); // 0= dont use camera view
-// printf("dbase update\n");
+ // printf("dbase update\n");
}
else {
-// printf("dbase rotate\n");
- RE_DataBase_IncrementalView(re, rp->rv3d->viewmat, 0);
+ // printf("dbase rotate\n");
+ RE_DataBase_IncrementalView(re, rp->viewmat, 0);
restore = 1;
}
@@ -900,15 +902,13 @@ static void render_view3d_startjob(void *customdata, short *stop, short *do_upda
/* OK, can we enter render code? */
if (rstats->convertdone) {
RE_TileProcessor(re);
-// printf("tile processor\n");
+ /* always rotate back */
if (restore)
- RE_DataBase_IncrementalView(re, rp->rv3d->viewmat, 1);
-
+ RE_DataBase_IncrementalView(re, rp->viewmat, 1);
+
rp->engine->flag &= ~RE_ENGINE_DO_UPDATE;
}
-
-// printf("done\n\n");
}
static void render_view3d_free(void *customdata)
@@ -943,6 +943,7 @@ static void render_view3d_do(RenderEngine *engine, const bContext *C, int keep_d
rp->rv3d = CTX_wm_region_view3d(C);
rp->bmain = CTX_data_main(C);
rp->keep_data = keep_data;
+ copy_m4_m4(rp->viewmat, rp->rv3d->viewmat);
/* dont alloc in threads */
if (engine->text == NULL)
@@ -992,13 +993,9 @@ static int render_view3d_changed(RenderEngine *engine, const bContext *C)
if (engine->resolution_x != ar->winx || engine->resolution_y != ar->winy)
update |= PR_UPDATE_RENDERSIZE;
- /* view updating fails on raytrace */
RE_GetView(re, mat);
if (compare_m4m4(mat, rv3d->viewmat, 0.00001f) == 0) {
- if ((scene->r.mode & R_RAYTRACE) == 0)
- update |= PR_UPDATE_VIEW;
- else
- engine->flag |= RE_ENGINE_DO_UPDATE;
+ update |= PR_UPDATE_VIEW;
}
render_view3d_get_rects(ar, v3d, rv3d, &viewplane, engine, &clipsta, &clipend, &orth);
@@ -1013,8 +1010,8 @@ static int render_view3d_changed(RenderEngine *engine, const bContext *C)
if (update)
engine->flag |= RE_ENGINE_DO_UPDATE;
-// if (update)
-// printf("changed ma %d res %d view %d\n", update & PR_UPDATE_MATERIAL, update & PR_UPDATE_RENDERSIZE, update & PR_UPDATE_VIEW);
+ //if (update)
+ // printf("changed ma %d res %d view %d\n", update & PR_UPDATE_MATERIAL, update & PR_UPDATE_RENDERSIZE, update & PR_UPDATE_VIEW);
}
return update;