Revision: 37268
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37268
Author:   jwilkins
Date:     2011-06-06 19:36:37 +0000 (Mon, 06 Jun 2011)
Log Message:
-----------
Revision: 30692
Author: nicholasbishop
Date: 12:18:42 PM, Saturday, July 24, 2010
Message:
== VPaint ==

Added partial redraw to vpaint.

Updated the PBVH docs in the wiki to include some info about partial redraw:
http://wiki.blender.org/index.php/Dev:2.5/Source/Modeling/PBVH#Partial_Redraw

* Moved some sculpt-pbvh functions to paint_util for general use
** sculpt_get_redraw_rect -> paint_get_redraw_rect
** sculpt_get_redraw_planes -> paint_get_redraw_planes
** Some of the code from sculpt_flush_update is now paint_tag_partial_redraw
* Added some debugging code to show the area being redraw during partial redraw
** Draws a box around the area being updated
** Set rt to 444 to see it


** jwilkins:
** made sure that code from trunk, which makes sure shrinking redraw regions 
update correctly, was merged in with these changes

Modified Paths:
--------------
    branches/soc-2011-onion/source/blender/blenkernel/BKE_paint.h
    branches/soc-2011-onion/source/blender/blenlib/intern/pbvh.c
    branches/soc-2011-onion/source/blender/editors/include/ED_sculpt.h
    branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_intern.h
    branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_utils.c
    branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_vertex.c
    branches/soc-2011-onion/source/blender/editors/sculpt_paint/sculpt.c
    branches/soc-2011-onion/source/blender/editors/space_view3d/drawobject.c
    branches/soc-2011-onion/source/blender/editors/space_view3d/view3d_draw.c

Property Changed:
----------------
    branches/soc-2011-onion/


Property changes on: branches/soc-2011-onion
___________________________________________________________________
Modified: svn:mergeinfo
   - /branches/soc-2010-jwilkins:28499-37009
/branches/soc-2010-nicolasbishop:28448-30676
/trunk/blender:36833-37206
   + /branches/soc-2010-jwilkins:28499-37009
/branches/soc-2010-nicolasbishop:28448-30676,30692
/trunk/blender:36833-37206

Modified: branches/soc-2011-onion/source/blender/blenkernel/BKE_paint.h
===================================================================
--- branches/soc-2011-onion/source/blender/blenkernel/BKE_paint.h       
2011-06-06 19:33:38 UTC (rev 37267)
+++ branches/soc-2011-onion/source/blender/blenkernel/BKE_paint.h       
2011-06-06 19:36:37 UTC (rev 37268)
@@ -32,6 +32,8 @@
  *  \ingroup bke
  */
 
+#include "DNA_vec_types.h"
+
 struct Brush;
 struct MFace;
 struct MultireModifierData;
@@ -104,6 +106,9 @@
 
        /* Partial redraw */
        int partial_redraw;
+
+       /* previous redraw rect */
+       rcti previous_r;
 } PaintSession;
 
 void create_paintsession(struct Object *ob);

Modified: branches/soc-2011-onion/source/blender/blenlib/intern/pbvh.c
===================================================================
--- branches/soc-2011-onion/source/blender/blenlib/intern/pbvh.c        
2011-06-06 19:33:38 UTC (rev 37267)
+++ branches/soc-2011-onion/source/blender/blenlib/intern/pbvh.c        
2011-06-06 19:36:37 UTC (rev 37268)
@@ -1253,6 +1253,8 @@
        if(nodes) MEM_freeN(nodes);
 }
 
+/* get the object-space bounding box containing all the nodes that
+   have been marked with PBVH_UpdateRedraw */
 void BLI_pbvh_redraw_BB(PBVH *bvh, float bb_min[3], float bb_max[3])
 {
        PBVHIter iter;

Modified: branches/soc-2011-onion/source/blender/editors/include/ED_sculpt.h
===================================================================
--- branches/soc-2011-onion/source/blender/editors/include/ED_sculpt.h  
2011-06-06 19:33:38 UTC (rev 37267)
+++ branches/soc-2011-onion/source/blender/editors/include/ED_sculpt.h  
2011-06-06 19:36:37 UTC (rev 37268)
@@ -41,8 +41,6 @@
 
 /* sculpt.c */
 void ED_operatortypes_sculpt(void);
-void sculpt_get_redraw_planes(float planes[4][4], struct ARegion *ar,
-                                  struct RegionView3D *rv3d, struct Object 
*ob);
 void ED_sculpt_force_update(struct bContext *C);
 
 void ED_paint_modifiers_changed(struct Object *ob);
@@ -59,6 +57,11 @@
 void ED_undo_paint_free(void);
 int ED_undo_paint_valid(int type, const char *name);
 
+/* paint_util.c */
+void paint_get_redraw_planes(float planes[4][4], struct ARegion *ar,
+                            struct RegionView3D *rv3d, struct Object *ob);
+
+
 void ED_draw_paint_overlay(const struct bContext *C, struct ARegion *ar);
 void ED_draw_on_surface_cursor(float modelview[16], float projection[16], 
float col[3], float alpha, float size[3], int viewport[4], float location[3], 
float inner_radius, float outer_radius, int brush_size);
 void ED_draw_fixed_overlay_on_surface(float modelview[16], float 
projection[16], float size[3], int viewport[4], float location[3], float 
outer_radius, struct Sculpt *sd, struct Brush *brush, struct ViewContext *vc, 
float t, float b, float l, float r, float angle);

Modified: 
branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_intern.h
===================================================================
--- branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_intern.h  
2011-06-06 19:33:38 UTC (rev 37267)
+++ branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_intern.h  
2011-06-06 19:36:37 UTC (rev 37268)
@@ -140,6 +140,8 @@
 
 int facemask_paint_poll(struct bContext *C);
 
+void paint_tag_partial_redraw(struct bContext *C, struct Object *ob);
+
 struct MultiresModifierData *paint_multires_active(struct Scene *scene, struct 
Object *ob);
 
 /* stroke operator */

Modified: 
branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_utils.c
===================================================================
--- branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_utils.c   
2011-06-06 19:33:38 UTC (rev 37267)
+++ branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_utils.c   
2011-06-06 19:36:37 UTC (rev 37268)
@@ -15,6 +15,7 @@
 
 #include "BLI_math.h"
 #include "BLI_utildefines.h"
+#include "BLI_rect.h"
 
 #include "BKE_brush.h"
 #include "BKE_context.h"
@@ -459,3 +460,117 @@
        return NULL;
 }
 
+/*** BVH Tree ***/
+
+/* Get a screen-space rectangle of the modified area */
+static int paint_get_redraw_rect(
+       ARegion *ar,
+       RegionView3D *rv3d,
+       Object *ob,
+       rcti *rect)
+{
+       PBVH *pbvh= ob->paint->pbvh;
+       float bb_min[3], bb_max[3], pmat[4][4];
+       int i, j, k;
+
+       ED_view3d_ob_project_mat_get(rv3d, ob, pmat);
+
+       if(!pbvh)
+               return 0;
+
+       BLI_pbvh_redraw_BB(pbvh, bb_min, bb_max);
+
+       rect->xmin = rect->ymin = INT_MAX;
+       rect->xmax = rect->ymax = INT_MIN;
+
+       if(bb_min[0] > bb_max[0] || bb_min[1] > bb_max[1] || bb_min[2] > 
bb_max[2])
+               return 0;
+
+       for(i = 0; i < 2; ++i) {
+               for(j = 0; j < 2; ++j) {
+                       for(k = 0; k < 2; ++k) {
+                               float vec[3], proj[2];
+                               vec[0] = i ? bb_min[0] : bb_max[0];
+                               vec[1] = j ? bb_min[1] : bb_max[1];
+                               vec[2] = k ? bb_min[2] : bb_max[2];
+                               ED_view3d_project_float(ar, vec, proj, pmat);
+                               rect->xmin = MIN2(rect->xmin, proj[0]);
+                               rect->xmax = MAX2(rect->xmax, proj[0]);
+                               rect->ymin = MIN2(rect->ymin, proj[1]);
+                               rect->ymax = MAX2(rect->ymax, proj[1]);
+                       }
+               }
+       }
+
+       if (rect->xmin < rect->xmax && rect->ymin < rect->ymax) {
+               /* expand redraw rect with redraw rect from previous step to 
prevent
+                  partial-redraw issues caused by fast strokes. This is needed 
here (not in sculpt_flush_update)
+                  as it was before because redraw rectangle should be the same 
in both of
+                  optimized PBVH draw function and 3d view redraw (if not -- 
some mesh parts could
+                  disapper from screen (sergey) */
+
+               if (!BLI_rcti_is_empty(&(ob->paint->previous_r)))
+                       BLI_union_rcti(rect, &(ob->paint->previous_r));
+
+               return 1;
+       }
+       else {
+               return rect->xmin < rect->xmax && rect->ymin < rect->ymax;
+       }
+}
+
+void paint_tag_partial_redraw(bContext *C, Object *ob)
+{
+       RegionView3D *rv3d = CTX_wm_region_view3d(C);
+       ARegion *ar = CTX_wm_region(C);
+       rcti r;
+
+       if(paint_get_redraw_rect(ar, rv3d, ob, &r)) {
+               ob->paint->previous_r= r;
+
+               r.xmin += ar->winrct.xmin + 1;
+               r.xmax += ar->winrct.xmin - 1;
+               r.ymin += ar->winrct.ymin + 1;
+               r.ymax += ar->winrct.ymin - 1;
+
+               ob->paint->partial_redraw = 1;
+               ED_region_tag_redraw_partial(ar, &r);
+       }
+}
+
+void paint_get_redraw_planes(
+       float planes[4][4],
+       ARegion *ar,
+       RegionView3D *rv3d,
+       Object *ob)
+{
+       PBVH *pbvh= ob->paint->pbvh;
+       BoundBox bb = {{0}};
+       bglMats mats;
+       rcti rect;
+
+       view3d_get_transformation(ar, rv3d, ob, &mats);
+       paint_get_redraw_rect(ar, rv3d,ob, &rect);
+
+#if 1
+       /* use some extra space just in case */
+       rect.xmin -= 2;
+       rect.xmax += 2;
+       rect.ymin -= 2;
+       rect.ymax += 2;
+#else
+       /* it was doing this before, allows to redraw a smaller
+          part of the screen but also gives artifaces .. */
+       rect.xmin += 2;
+       rect.xmax -= 2;
+       rect.ymin += 2;
+       rect.ymax -= 2;
+#endif
+
+       ED_view3d_calc_clipping(&bb, planes, &mats, &rect);
+       mul_m4_fl(planes, -1.0f);
+
+       /* clear redraw flag from nodes */
+       if(pbvh)
+               BLI_pbvh_update(pbvh, PBVH_UpdateRedraw, NULL);
+}

Modified: 
branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_vertex.c
===================================================================
--- branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_vertex.c  
2011-06-06 19:33:38 UTC (rev 37267)
+++ branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_vertex.c  
2011-06-06 19:36:37 UTC (rev 37268)
@@ -2158,7 +2158,8 @@
        if(brush->vertexpaint_tool == VP_BLUR)
                do_shared_vertexcol(ob->data);
 
-       ED_region_tag_redraw(vc->ar);
+       /* partial redraw */
+       paint_tag_partial_redraw(C, ob);
 }
 
 static void vpaint_stroke_update_step(bContext *C, PaintStroke *stroke, 
PointerRNA *itemptr)

Modified: branches/soc-2011-onion/source/blender/editors/sculpt_paint/sculpt.c
===================================================================
--- branches/soc-2011-onion/source/blender/editors/sculpt_paint/sculpt.c        
2011-06-06 19:33:38 UTC (rev 37267)
+++ branches/soc-2011-onion/source/blender/editors/sculpt_paint/sculpt.c        
2011-06-06 19:36:37 UTC (rev 37268)
@@ -269,113 +269,12 @@
        float plane_trim_squared;
 
        float frontface_start, frontface_range;
-
-       rcti previous_r; /* previous redraw rectangle */
 } StrokeCache;
 
 /* rotation direction is flipped in different symmetrical passes */
 static const int rotation_flip[8] = { 1, -1, -1, 1, -1, 1, 1, -1 };
 
 
-/*** BVH Tree ***/
-
-/* Get a screen-space rectangle of the modified area */
-static int sculpt_get_redraw_rect(
-       ARegion *ar,
-       RegionView3D *rv3d,
-       Object *ob,
-       rcti *rect)
-{
-       PBVH *pbvh= ob->paint->pbvh;
-       float bb_min[3], bb_max[3], pmat[4][4];
-       int i, j, k;
-
-       ED_view3d_ob_project_mat_get(rv3d, ob, pmat);
-
-       if(!pbvh)
-               return 0;
-
-       BLI_pbvh_redraw_BB(pbvh, bb_min, bb_max);
-
-       rect->xmin = rect->ymin = INT_MAX;
-       rect->xmax = rect->ymax = INT_MIN;
-
-       if(bb_min[0] > bb_max[0] || bb_min[1] > bb_max[1] || bb_min[2] > 
bb_max[2])
-               return 0;
-
-       for(i = 0; i < 2; ++i) {
-               for(j = 0; j < 2; ++j) {
-                       for(k = 0; k < 2; ++k) {
-                               float vec[3], proj[2];
-                               vec[0] = i ? bb_min[0] : bb_max[0];
-                               vec[1] = j ? bb_min[1] : bb_max[1];
-                               vec[2] = k ? bb_min[2] : bb_max[2];
-                               ED_view3d_project_float(ar, vec, proj, pmat);
-                               rect->xmin = MIN2(rect->xmin, proj[0]);
-                               rect->xmax = MAX2(rect->xmax, proj[0]);
-                               rect->ymin = MIN2(rect->ymin, proj[1]);
-                               rect->ymax = MAX2(rect->ymax, proj[1]);
-                       }
-               }
-       }
-
-       if (rect->xmin < rect->xmax && rect->ymin < rect->ymax) {
-               /* expand redraw rect with redraw rect from previous step to 
prevent
-                  partial-redraw issues caused by fast strokes. This is needed 
here (not in sculpt_flush_update)
-                  as it was before because redraw rectangle should be the same 
in both of
-                  optimized PBVH draw function and 3d view redraw (if not -- 
some mesh parts could
-                  disapper from screen (sergey) */
-
-               if (ob->paint->sculpt->cache) {
-                       rcti* previous_r = 
&(ob->paint->sculpt->cache->previous_r);
-
-                       if (!BLI_rcti_is_empty(previous_r))
-                               BLI_union_rcti(rect, previous_r);
-               }
-
-               return 1;
-       }
-       else {
-               return rect->xmin < rect->xmax && rect->ymin < rect->ymax;
-       }
-}
-
-void sculpt_get_redraw_planes(float planes[4][4], ARegion *ar,
-                                 RegionView3D *rv3d, Object *ob)
-{
-       PBVH *pbvh= ob->paint->pbvh;
-       BoundBox bb;
-       bglMats mats;

@@ Diff output truncated at 10240 characters. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to