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 */


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to