[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [27739] branches/render25/source/blender/ render/intern/source: Render Branch: object subdivision/ displacement can now be cancelled quicker,
Brecht Van Lommel
brecht at blender.org
Thu Mar 25 12:39:21 CET 2010
Revision: 27739
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=27739
Author: blendix
Date: 2010-03-25 12:39:21 +0100 (Thu, 25 Mar 2010)
Log Message:
-----------
Render Branch: object subdivision/displacement can now be cancelled quicker,
and also fixes compositing not being properly cancelled.
Modified Paths:
--------------
branches/render25/source/blender/render/intern/source/object_displace.c
branches/render25/source/blender/render/intern/source/object_mesh.c
branches/render25/source/blender/render/intern/source/object_subdivide.c
branches/render25/source/blender/render/intern/source/pipeline.c
Modified: branches/render25/source/blender/render/intern/source/object_displace.c
===================================================================
--- branches/render25/source/blender/render/intern/source/object_displace.c 2010-03-25 11:34:18 UTC (rev 27738)
+++ branches/render25/source/blender/render/intern/source/object_displace.c 2010-03-25 11:39:21 UTC (rev 27739)
@@ -58,6 +58,7 @@
return 0;
}
+#if 0
static void displace_derivatives(ShadeInput *shi)
{
ShadeGeometry *geom= &shi->geometry;
@@ -77,6 +78,7 @@
geom->dy_u= dot_v3v3(geom->dyco, dcodu);
geom->dy_v= dot_v3v3(geom->dyco, dcodv);
}
+#endif
static void displace_render_vert(Render *re, ObjectRen *obr, ShadeInput *shi, VertRen *vr, int vindex, float *scale, float mat[][4], float nmat[][3], float *sample)
{
@@ -252,11 +254,18 @@
for(i=0; i<obr->totvlak; i++){
vlr=render_object_vlak_get(obr, i);
displace_render_face(re, obr, vlr, scale, mat, nmat, sample);
+
+ if(re->cb.test_break(re->cb.tbh))
+ break;
}
MEM_freeN(sample);
/* recalculate displaced smooth normals, and apply difference */
- render_object_calc_vnormals(re, obr, 0, 0, &diffnor);
+ if(!re->cb.test_break(re->cb.tbh))
+ render_object_calc_vnormals(re, obr, 0, 0, &diffnor);
+
+ if(diffnor)
+ MEM_freeN(diffnor);
}
Modified: branches/render25/source/blender/render/intern/source/object_mesh.c
===================================================================
--- branches/render25/source/blender/render/intern/source/object_mesh.c 2010-03-25 11:34:18 UTC (rev 27738)
+++ branches/render25/source/blender/render/intern/source/object_mesh.c 2010-03-25 11:39:21 UTC (rev 27739)
@@ -991,8 +991,6 @@
}
}
- if(diffnor)
- MEM_freeN(diffnor);
if(arena)
BLI_memarena_free(arena);
if(vtangents)
@@ -2619,6 +2617,9 @@
if((ob->type!=OB_MESH || obr->flag & R_TEMP_COPY) && render_object_has_displacement(re, obr))
render_object_displace(re, obr, NULL, NULL);
+ if(re->cb.test_break(re->cb.tbh))
+ return;
+
if(!timeoffset) {
/* phong normal interpolation can cause error in tracing
* (terminator problem) */
Modified: branches/render25/source/blender/render/intern/source/object_subdivide.c
===================================================================
--- branches/render25/source/blender/render/intern/source/object_subdivide.c 2010-03-25 11:34:18 UTC (rev 27738)
+++ branches/render25/source/blender/render/intern/source/object_subdivide.c 2010-03-25 11:39:21 UTC (rev 27739)
@@ -206,12 +206,15 @@
vertex_weight(w, M, u, v, vi);
}
-static void render_face_subdivide(RenderCamera *cam, float winmat[4][4], float bounds[4], ObjectRen *obrn, ObjectRen *obr, VlakRen *vlr, int quad, int depth, float M[4][4], float displacebound, float shadingrate)
+static void render_face_subdivide(Render *re, RenderCamera *cam, float winmat[4][4], float bounds[4], ObjectRen *obrn, ObjectRen *obr, VlakRen *vlr, int quad, int depth, float M[4][4], float displacebound, float shadingrate)
{
VertRen *s1, *s2, *s3;
float w[4], pM[4][4], fw[4][4];
int i, j, vi[4], offset, res, split;
+ if(re->cb.test_break(re->cb.tbh))
+ return;
+
res= render_face_view_resolution(cam, winmat, vlr, M, quad, shadingrate);
split= 0;
@@ -251,7 +254,7 @@
}
if(!render_vlak_clip(vlr, sM, winmat, bounds, displacebound, quad))
- render_face_subdivide(cam, winmat, bounds, obrn, obr, vlr, quad, depth+1, sM, displacebound, shadingrate);
+ render_face_subdivide(re, cam, winmat, bounds, obrn, obr, vlr, quad, depth+1, sM, displacebound, shadingrate);
}
}
else {
@@ -291,7 +294,7 @@
}
}
-ObjectRen *render_object_tile_subdivide(ObjectRen *obr, RenderCamera *cam, float winmat[4][4], float bounds[4])
+static ObjectRen *render_object_tile_subdivide(Render *re, ObjectRen *obr, RenderCamera *cam, float winmat[4][4], float bounds[4])
{
ObjectRen *obrn;
VlakRen *vlr;
@@ -306,10 +309,13 @@
vlr= render_object_vlak_get(obr, a);
if(!render_vlak_clip(vlr, NULL, winmat, bounds, displacebound, 0))
- render_face_subdivide(cam, winmat, bounds, obrn, obr, vlr, 0, 0, NULL, displacebound, shadingrate);
+ render_face_subdivide(re, cam, winmat, bounds, obrn, obr, vlr, 0, 0, NULL, displacebound, shadingrate);
if(vlr->v4 && !render_vlak_clip(vlr, NULL, winmat, bounds, displacebound, 1))
- render_face_subdivide(cam, winmat, bounds, obrn, obr, vlr, 1, 0, NULL, displacebound, shadingrate);
+ render_face_subdivide(re, cam, winmat, bounds, obrn, obr, vlr, 1, 0, NULL, displacebound, shadingrate);
+
+ if(re->cb.test_break(re->cb.tbh))
+ break;
}
return obrn;
@@ -319,8 +325,9 @@
{
ObjectRen *obrn;
- obrn= render_object_tile_subdivide(obi->obr, &re->cam, winmat, bounds);
- finalize_render_object(re, obrn, 0);
+ obrn= render_object_tile_subdivide(re, obi->obr, &re->cam, winmat, bounds);
+ if(!re->cb.test_break(re->cb.tbh))
+ finalize_render_object(re, obrn, 0);
return obrn;
}
Modified: branches/render25/source/blender/render/intern/source/pipeline.c
===================================================================
--- branches/render25/source/blender/render/intern/source/pipeline.c 2010-03-25 11:34:18 UTC (rev 27738)
+++ branches/render25/source/blender/render/intern/source/pipeline.c 2010-03-25 11:39:21 UTC (rev 27739)
@@ -733,6 +733,7 @@
parts_free(re);
re->cam.viewplane= viewplane; /* restore viewplane, modified by pano render */
+ re->cb.test_break= test_break;
}
/* currently threaded=0 only used by envmap */
More information about the Bf-blender-cvs
mailing list