[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