Revision: 42055
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42055
Author:   campbellbarton
Date:     2011-11-22 11:37:17 +0000 (Tue, 22 Nov 2011)
Log Message:
-----------
fix for [#29355] clone-brush in texture paint

but was caused by cycles code, noticed it was also doing a render engine string 
lookup & flag check per pixel (tsk tsk), result is now cached.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/sculpt_paint/paint_image.c

Modified: trunk/blender/source/blender/editors/sculpt_paint/paint_image.c
===================================================================
--- trunk/blender/source/blender/editors/sculpt_paint/paint_image.c     
2011-11-22 10:42:48 UTC (rev 42054)
+++ trunk/blender/source/blender/editors/sculpt_paint/paint_image.c     
2011-11-22 11:37:17 UTC (rev 42055)
@@ -300,6 +300,7 @@
        short do_occlude;                       /* Use raytraced occlusion? - 
ortherwise will paint right through to the back*/
        short do_backfacecull;  /* ignore faces with normals pointing away, 
skips a lot of raycasts if your normals are correctly flipped */
        short do_mask_normal;                   /* mask out pixels based on 
their normals */
+       short do_new_shading_nodes;     /* cache scene_use_new_shading_nodes 
value */
        float normal_angle;                             /* what angle to mask 
at*/
        float normal_angle_inner;
        float normal_angle_range;               /* difference between 
normal_angle and normal_angle_inner, for easy access */
@@ -518,17 +519,16 @@
        return ima;
 }
 
-static Image *project_paint_face_image(const ProjPaintState *ps, int 
face_index)
+static Image *project_paint_face_image(const ProjPaintState *ps, MTFace 
*dm_mtface, int face_index)
 {
        Image *ima;
 
-       if(scene_use_new_shading_nodes(ps->scene)) {
+       if(ps->do_new_shading_nodes) { /* cached scene_use_new_shading_nodes 
result */
                MFace *mf = ps->dm_mface+face_index;
                ED_object_get_active_image(ps->ob, mf->mat_nr, &ima, NULL, 
NULL);
        }
        else {
-               MTFace *tf = ps->dm_mtface+face_index;
-               ima = tf->tpage;
+               ima = dm_mtface[face_index].tpage;
        }
 
        return ima;
@@ -725,7 +725,7 @@
                interp_v2_v2v2v2(uv, tf->uv[0], tf->uv[2], tf->uv[3], w);
        }
 
-       ima = project_paint_face_image(ps, face_index);
+       ima = project_paint_face_image(ps, ps->dm_mtface, face_index);
        ibuf = ima->ibufs.first; /* we must have got the imbuf before getting 
here */
        if (!ibuf) return 0;
        
@@ -1091,8 +1091,8 @@
                        
                        /* Only need to check if 'i2_fidx' is valid because we 
know i1_fidx is the same vert on both faces */
                        if (i2_fidx != -1) {
-                               Image *tpage = project_paint_face_image(ps, 
face_index);
-                               Image *orig_tpage = 
project_paint_face_image(ps, orig_face);
+                               Image *tpage = project_paint_face_image(ps, 
ps->dm_mtface, face_index);
+                               Image *orig_tpage = 
project_paint_face_image(ps, ps->dm_mtface, orig_face);
 
                                /* This IS an adjacent face!, now lets check if 
the UVs are ok */
                                tf = ps->dm_mtface + face_index;
@@ -1349,7 +1349,7 @@
        if (ps->do_layer_stencil) {
                /* another UV layers image is masking this one's */
                ImBuf *ibuf_other;
-               Image *other_tpage = project_paint_face_image(ps, face_index);
+               Image *other_tpage = project_paint_face_image(ps, 
ps->dm_mtface_stencil, face_index);
                const MTFace *tf_other = ps->dm_mtface_stencil + face_index;
                
                if (other_tpage && (ibuf_other = 
BKE_image_get_ibuf(other_tpage, NULL))) {
@@ -1506,7 +1506,7 @@
        if (ps->tool==PAINT_TOOL_CLONE) {
                if (ps->dm_mtface_clone) {
                        ImBuf *ibuf_other;
-                       Image *other_tpage = project_paint_face_image(ps, 
face_index);
+                       Image *other_tpage = project_paint_face_image(ps, 
ps->dm_mtface_clone, face_index);
                        const MTFace *tf_other = ps->dm_mtface_clone + 
face_index;
                        
                        if (other_tpage && (ibuf_other = 
BKE_image_get_ibuf(other_tpage, NULL))) {
@@ -2746,7 +2746,7 @@
                        face_index = GET_INT_FROM_POINTER(node->link);
                                
                        /* Image context switching */
-                       tpage = project_paint_face_image(ps, face_index);
+                       tpage = project_paint_face_image(ps, ps->dm_mtface, 
face_index);
                        if (tpage_last != tpage) {
                                tpage_last = tpage;
 
@@ -3249,7 +3249,7 @@
                }
 #endif
                
-               tpage = project_paint_face_image(ps, face_index);
+               tpage = project_paint_face_image(ps, ps->dm_mtface, face_index);
 
                if (tpage && ((((Mesh *)ps->ob->data)->editflag & 
ME_EDIT_PAINT_MASK)==0 || mf->flag & ME_FACE_SEL)) {
                        
@@ -4714,6 +4714,7 @@
        ps->do_backfacecull = (settings->imapaint.flag & 
IMAGEPAINT_PROJECT_BACKFACE) ? 0 : 1;
        ps->do_occlude = (settings->imapaint.flag & IMAGEPAINT_PROJECT_XRAY) ? 
0 : 1;
        ps->do_mask_normal = (settings->imapaint.flag & 
IMAGEPAINT_PROJECT_FLAT) ? 0 : 1;
+       ps->do_new_shading_nodes = scene_use_new_shading_nodes(scene); /* only 
cache the value */
 
        if (ps->tool == PAINT_TOOL_CLONE)
                ps->do_layer_clone = (settings->imapaint.flag & 
IMAGEPAINT_PROJECT_LAYER_CLONE);

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

Reply via email to