Revision: 24888
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24888
Author:   blendix
Date:     2009-11-25 15:13:43 +0100 (Wed, 25 Nov 2009)

Log Message:
-----------
Sculpt: Fast Navigate option for multires. This will show the lowest multires
level when rotating/panning/zooming the viewport, and only draw the full thing
at the end, to make the viewport more interactive.

Modified Paths:
--------------
    branches/sculpt25/release/scripts/ui/space_view3d_toolbar.py
    branches/sculpt25/source/blender/blenkernel/BKE_DerivedMesh.h
    branches/sculpt25/source/blender/blenkernel/intern/cdderivedmesh.c
    branches/sculpt25/source/blender/blenkernel/intern/subsurf_ccg.c
    branches/sculpt25/source/blender/editors/space_view3d/drawobject.c
    branches/sculpt25/source/blender/editors/space_view3d/view3d_edit.c
    branches/sculpt25/source/blender/editors/space_view3d/view3d_view.c
    branches/sculpt25/source/blender/makesdna/DNA_scene_types.h
    branches/sculpt25/source/blender/makesdna/DNA_view3d_types.h
    branches/sculpt25/source/blender/makesrna/intern/rna_sculpt_paint.c

Modified: branches/sculpt25/release/scripts/ui/space_view3d_toolbar.py
===================================================================
--- branches/sculpt25/release/scripts/ui/space_view3d_toolbar.py        
2009-11-25 14:10:45 UTC (rev 24887)
+++ branches/sculpt25/release/scripts/ui/space_view3d_toolbar.py        
2009-11-25 14:13:43 UTC (rev 24888)
@@ -671,6 +671,7 @@
 
         col = layout.column()
         col.itemR(sculpt, "show_brush")
+        col.itemR(sculpt, "fast_navigate")
 
         split = self.layout.split()
 

Modified: branches/sculpt25/source/blender/blenkernel/BKE_DerivedMesh.h
===================================================================
--- branches/sculpt25/source/blender/blenkernel/BKE_DerivedMesh.h       
2009-11-25 14:10:45 UTC (rev 24887)
+++ branches/sculpt25/source/blender/blenkernel/BKE_DerivedMesh.h       
2009-11-25 14:13:43 UTC (rev 24888)
@@ -232,7 +232,7 @@
         * Also called for *final* editmode DerivedMeshes
         */
        void (*drawFacesSolid)(DerivedMesh *dm, float 
(*partial_redraw_planes)[4],
-                              int (*setMaterial)(int, void *attribs));
+                              int fast, int (*setMaterial)(int, void 
*attribs));
 
        /* Draw all faces
         *  o If useTwoSided, draw front and back using col arrays

Modified: branches/sculpt25/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- branches/sculpt25/source/blender/blenkernel/intern/cdderivedmesh.c  
2009-11-25 14:10:45 UTC (rev 24887)
+++ branches/sculpt25/source/blender/blenkernel/intern/cdderivedmesh.c  
2009-11-25 14:13:43 UTC (rev 24888)
@@ -395,7 +395,7 @@
 
 static void cdDM_drawFacesSolid(DerivedMesh *dm,
                                float (*partial_redraw_planes)[4],
-                               int (*setMaterial)(int, void *attribs))
+                               int fast, int (*setMaterial)(int, void 
*attribs))
 {
        CDDerivedMesh *cddm = (CDDerivedMesh*) dm;
        MVert *mvert = cddm->mvert;

Modified: branches/sculpt25/source/blender/blenkernel/intern/subsurf_ccg.c
===================================================================
--- branches/sculpt25/source/blender/blenkernel/intern/subsurf_ccg.c    
2009-11-25 14:10:45 UTC (rev 24887)
+++ branches/sculpt25/source/blender/blenkernel/intern/subsurf_ccg.c    
2009-11-25 14:13:43 UTC (rev 24888)
@@ -1223,15 +1223,15 @@
 }
 
        /* Only used by non-editmesh types */
-static void ccgDM_drawFacesSolid(DerivedMesh *dm, float 
(*partial_redraw_planes)[4]/*, int fast*/, int (*setMaterial)(int, void 
*attribs)) {
+static void ccgDM_drawFacesSolid(DerivedMesh *dm, float 
(*partial_redraw_planes)[4], int fast, int (*setMaterial)(int, void *attribs)) {
        CCGDerivedMesh *ccgdm = (CCGDerivedMesh*) dm;
        CCGSubSurf *ss = ccgdm->ss;
        CCGFaceIterator *fi;
        int gridSize = ccgSubSurf_getGridSize(ss);
        char *faceFlags = ccgdm->faceFlags;
-       int step = 1; //(fast)? gridSize-1: 1;
+       int step = (fast)? gridSize-1: 1;
 
-       if(ccgdm->pbvh && ccgdm->multires.mmd) { // && !fast) {
+       if(ccgdm->pbvh && ccgdm->multires.mmd && !fast) {
                CCGFace **faces;
                int totface;
 

Modified: branches/sculpt25/source/blender/editors/space_view3d/drawobject.c
===================================================================
--- branches/sculpt25/source/blender/editors/space_view3d/drawobject.c  
2009-11-25 14:10:45 UTC (rev 24887)
+++ branches/sculpt25/source/blender/editors/space_view3d/drawobject.c  
2009-11-25 14:13:43 UTC (rev 24888)
@@ -2692,7 +2692,7 @@
                   drawFacesSolid() doesn't draw the transparent faces */
                if(ob->dtx & OB_DRAWTRANSP) {
                        glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); 
-                       dm->drawFacesSolid(dm, NULL, GPU_enable_material);
+                       dm->drawFacesSolid(dm, NULL, 0, GPU_enable_material);
                        glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
                        GPU_disable_material();
                }
@@ -2793,8 +2793,10 @@
                glFrontFace((ob->transflag&OB_NEG_SCALE)?GL_CW:GL_CCW);
 
                if(ob->sculpt) {
+                       Paint *p = paint_get_active(scene);
                        float planes[4][4];
                        float (*fpl)[4] = NULL;
+                       int fast= (p->flags & PAINT_FAST_NAVIGATE) && 
(rv3d->rflag & RV3D_NAVIGATING);
 
                        if(ob->sculpt->partial_redraw) {
                                sculpt_get_redraw_planes(planes, ar, rv3d, ob);
@@ -2802,10 +2804,10 @@
                                ob->sculpt->partial_redraw = 0;
                        }
 
-                       dm->drawFacesSolid(dm, fpl, GPU_enable_material);
+                       dm->drawFacesSolid(dm, fpl, fast, GPU_enable_material);
                }
                else
-                       dm->drawFacesSolid(dm, NULL, GPU_enable_material);
+                       dm->drawFacesSolid(dm, NULL, 0, GPU_enable_material);
 
                GPU_disable_material();
 
@@ -6270,7 +6272,7 @@
                glEnable(GL_LIGHTING);
                
                if(dm) {
-                       dm->drawFacesSolid(dm, NULL, GPU_enable_material);
+                       dm->drawFacesSolid(dm, NULL, 0, GPU_enable_material);
                        GPU_end_object_materials();
                }
                else if(edm)

Modified: branches/sculpt25/source/blender/editors/space_view3d/view3d_edit.c
===================================================================
--- branches/sculpt25/source/blender/editors/space_view3d/view3d_edit.c 
2009-11-25 14:10:45 UTC (rev 24887)
+++ branches/sculpt25/source/blender/editors/space_view3d/view3d_edit.c 
2009-11-25 14:13:43 UTC (rev 24888)
@@ -275,7 +275,7 @@
 }
 
 
-static void viewops_data(bContext *C, wmOperator *op, wmEvent *event)
+static void viewops_data_create(bContext *C, wmOperator *op, wmEvent *event)
 {
        static float lastofs[3] = {0,0,0};
        View3D *v3d = CTX_wm_view3d(C);
@@ -314,8 +314,23 @@
        if (rv3d->persmat[2][1] < 0.0f)
                vod->reverse= -1.0f;
 
+       rv3d->rflag |= RV3D_NAVIGATING;
 }
 
+static void viewops_data_free(bContext *C, wmOperator *op)
+{
+       Paint *p = paint_get_active(CTX_data_scene(C));
+       ViewOpsData *vod= op->customdata;
+
+       vod->rv3d->rflag &= ~RV3D_NAVIGATING;
+
+       if(p && (p->flags & PAINT_FAST_NAVIGATE))
+               ED_region_tag_redraw(vod->ar);
+
+       MEM_freeN(vod);
+       op->customdata= NULL;
+}
+
 /* ************************** viewrotate **********************************/
 
 static const float thres = 0.93f; //cos(20 deg);
@@ -578,10 +593,8 @@
        }
        else if (event_code==VIEW_CONFIRM) {
                request_depth_update(CTX_wm_region_view3d(C));
+               viewops_data_free(C, op);
 
-               MEM_freeN(vod);
-               op->customdata= NULL;
-
                return OPERATOR_FINISHED;
        }
 
@@ -597,7 +610,7 @@
                return OPERATOR_CANCELLED;
 
        /* makes op->customdata */
-       viewops_data(C, op, event);
+       viewops_data_create(C, op, event);
        vod= op->customdata;
 
        /* switch from camera view when: */
@@ -718,8 +731,7 @@
        else if (event_code==VIEW_CONFIRM) {
                request_depth_update(CTX_wm_region_view3d(C));
 
-               MEM_freeN(vod);
-               op->customdata= NULL;
+               viewops_data_free(C, op);
 
                return OPERATOR_FINISHED;
        }
@@ -730,7 +742,7 @@
 static int viewmove_invoke(bContext *C, wmOperator *op, wmEvent *event)
 {
        /* makes op->customdata */
-       viewops_data(C, op, event);
+       viewops_data_create(C, op, event);
 
        /* add temp handler */
        WM_event_add_modal_handler(C, op);
@@ -911,10 +923,8 @@
        }
        else if (event_code==VIEW_CONFIRM) {
                request_depth_update(CTX_wm_region_view3d(C));
+               viewops_data_free(C, op);
 
-               MEM_freeN(vod);
-               op->customdata= NULL;
-
                return OPERATOR_FINISHED;
        }
 
@@ -974,7 +984,7 @@
        }
        else {
                /* makes op->customdata */
-               viewops_data(C, op, event);
+               viewops_data_create(C, op, event);
 
                /* add temp handler */
                WM_event_add_modal_handler(C, op);

Modified: branches/sculpt25/source/blender/editors/space_view3d/view3d_view.c
===================================================================
--- branches/sculpt25/source/blender/editors/space_view3d/view3d_view.c 
2009-11-25 14:10:45 UTC (rev 24887)
+++ branches/sculpt25/source/blender/editors/space_view3d/view3d_view.c 
2009-11-25 14:13:43 UTC (rev 24888)
@@ -286,6 +286,8 @@
                        
                        /* ensure it shows correct */
                        if(sms.to_camera) rv3d->persp= RV3D_PERSP;
+
+                       rv3d->rflag |= RV3D_NAVIGATING;
                        
                        /* keep track of running timer! */
                        if(rv3d->sms==NULL)
@@ -348,6 +350,7 @@
                
                WM_event_remove_timer(CTX_wm_manager(C), CTX_wm_window(C), 
rv3d->smooth_timer);
                rv3d->smooth_timer= NULL;
+               rv3d->rflag &= ~RV3D_NAVIGATING;
        }
        else {
                int i;
@@ -1885,7 +1888,7 @@
 
        fly->time_lastdraw= fly->time_lastwheel= PIL_check_seconds_timer();
 
-       fly->rv3d->rflag |= RV3D_FLYMODE; /* so we draw the corner margins */
+       fly->rv3d->rflag |= RV3D_FLYMODE|RV3D_NAVIGATING; /* so we draw the 
corner margins */
 
        /* detect weather to start with Z locking */
        upvec[0]=1.0f; upvec[1]=0.0f; upvec[2]=0.0f;
@@ -1985,7 +1988,7 @@
                /*Done with correcting for the dist */
        }
 
-       rv3d->rflag &= ~RV3D_FLYMODE;
+       rv3d->rflag &= ~(RV3D_FLYMODE|RV3D_NAVIGATING);
 //XXX2.5       BIF_view3d_previewrender_signal(fly->sa, PR_DBASE|PR_DISPRECT); 
/* not working at the moment not sure why */
 
 

Modified: branches/sculpt25/source/blender/makesdna/DNA_scene_types.h
===================================================================
--- branches/sculpt25/source/blender/makesdna/DNA_scene_types.h 2009-11-25 
14:10:45 UTC (rev 24887)
+++ branches/sculpt25/source/blender/makesdna/DNA_scene_types.h 2009-11-25 
14:13:43 UTC (rev 24888)
@@ -1047,7 +1047,8 @@
 
 /* Paint.flags */
 typedef enum {
-       PAINT_SHOW_BRUSH = 1
+       PAINT_SHOW_BRUSH = 1,
+       PAINT_FAST_NAVIGATE = 2
 } PaintFlags;
 
 /* Sculpt.flags */

Modified: branches/sculpt25/source/blender/makesdna/DNA_view3d_types.h
===================================================================
--- branches/sculpt25/source/blender/makesdna/DNA_view3d_types.h        
2009-11-25 14:10:45 UTC (rev 24887)
+++ branches/sculpt25/source/blender/makesdna/DNA_view3d_types.h        
2009-11-25 14:13:43 UTC (rev 24888)
@@ -210,6 +210,7 @@
 /* RegionView3d->rflag */
 #define RV3D_FLYMODE                           2
 #define RV3D_CLIPPING                          4
+#define RV3D_NAVIGATING                                8
 
 /* RegionView3d->viewlock */
 #define RV3D_LOCKED                    1

Modified: branches/sculpt25/source/blender/makesrna/intern/rna_sculpt_paint.c
===================================================================
--- branches/sculpt25/source/blender/makesrna/intern/rna_sculpt_paint.c 
2009-11-25 14:10:45 UTC (rev 24887)
+++ branches/sculpt25/source/blender/makesrna/intern/rna_sculpt_paint.c 
2009-11-25 14:13:43 UTC (rev 24888)
@@ -174,6 +174,10 @@
        prop= RNA_def_property(srna, "show_brush", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "flags", PAINT_SHOW_BRUSH);
        RNA_def_property_ui_text(prop, "Show Brush", "");
+
+       prop= RNA_def_property(srna, "fast_navigate", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "flags", PAINT_FAST_NAVIGATE);
+       RNA_def_property_ui_text(prop, "Fast Navigate", "For multires, show low 
resolution while navigating the view.");
 }
 
 static void rna_def_sculpt(BlenderRNA  *brna)


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

Reply via email to