Revision: 37398
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37398
Author:   jwilkins
Date:     2011-06-11 06:00:10 +0000 (Sat, 11 Jun 2011)
Log Message:
-----------
Revision: 30792
Author: nicholasbishop
Date: 12:38:26 AM, Tuesday, July 27, 2010
Message:
== VPaint ==

* Enabled fast navigate option for vpaint
* Moved fast navigate UI button back to options panel for now
* Fixed vpaint partial redraw, wasn't actually passing the redraw planes in

**jwilkins:
**kept the fast navigate option on the multires panel
**vpaint on multires is supposed to work but it does not
**it appears that there is no mcol layer

Modified Paths:
--------------
    branches/soc-2011-onion/source/blender/blenkernel/BKE_DerivedMesh.h
    branches/soc-2011-onion/source/blender/blenkernel/intern/DerivedMesh.c
    branches/soc-2011-onion/source/blender/blenkernel/intern/cdderivedmesh.c
    branches/soc-2011-onion/source/blender/blenkernel/intern/subsurf_ccg.c
    branches/soc-2011-onion/source/blender/editors/space_view3d/drawmesh.c
    branches/soc-2011-onion/source/blender/editors/space_view3d/drawobject.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-30783
/trunk/blender:36833-37386
   + /branches/soc-2010-jwilkins:28499-37009
/branches/soc-2010-nicolasbishop:28448-30783,30792
/trunk/blender:36833-37386

Modified: branches/soc-2011-onion/source/blender/blenkernel/BKE_DerivedMesh.h
===================================================================
--- branches/soc-2011-onion/source/blender/blenkernel/BKE_DerivedMesh.h 
2011-06-11 02:26:28 UTC (rev 37397)
+++ branches/soc-2011-onion/source/blender/blenkernel/BKE_DerivedMesh.h 
2011-06-11 06:00:10 UTC (rev 37398)
@@ -278,6 +278,7 @@
         * smooth shaded.
         */
        void (*drawMappedFaces)(DerivedMesh *dm,
+                               float (*partial_redraw_planes)[4], int fast, 
                                                        int 
(*setDrawOptions)(void *userData, int index,
                                                                                
                  int *drawSmooth_r),
                                                        void *userData, int 
useColors,

Modified: branches/soc-2011-onion/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- branches/soc-2011-onion/source/blender/blenkernel/intern/DerivedMesh.c      
2011-06-11 02:26:28 UTC (rev 37397)
+++ branches/soc-2011-onion/source/blender/blenkernel/intern/DerivedMesh.c      
2011-06-11 06:00:10 UTC (rev 37398)
@@ -635,9 +635,8 @@
                func(userData, i, cent, 
emdm->vertexCos?emdm->faceNos[i]:efa->n);
        }
 }
-
 /* note, material function is ignored for now. */
-static void emDM_drawMappedFaces(DerivedMesh *dm, int (*setDrawOptions)(void 
*userData, int index, int *drawSmooth_r), void *userData, int 
UNUSED(useColors), int (*setMaterial)(int, void *attribs))
+static void emDM_drawMappedFaces(DerivedMesh *dm, float 
(*partial_redraw_planes)[4], int fast_navigate, int (*setDrawOptions)(void 
*userData, int index, int *drawSmooth_r), void *userData, int 
UNUSED(useColors), int (*setMaterial)(int, void *attribs))
 {
        EditMeshDerivedMesh *emdm= (EditMeshDerivedMesh*) dm;
        EditFace *efa;

Modified: 
branches/soc-2011-onion/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- branches/soc-2011-onion/source/blender/blenkernel/intern/cdderivedmesh.c    
2011-06-11 02:26:28 UTC (rev 37397)
+++ branches/soc-2011-onion/source/blender/blenkernel/intern/cdderivedmesh.c    
2011-06-11 06:00:10 UTC (rev 37398)
@@ -871,7 +871,14 @@
        cdDM_drawFacesTex_common(dm, setDrawOptions, NULL, NULL);
 }
 
-static void cdDM_drawMappedFaces(DerivedMesh *dm, int (*setDrawOptions)(void 
*userData, int index, int *drawSmooth_r), void *userData, int useColors, int 
(*setMaterial)(int, void *attribs))
+static void cdDM_drawMappedFaces(
+       DerivedMesh *dm,
+       float (*partial_redraw_planes)[4],
+       int fast_navigate,
+       int (*setDrawOptions)(void *userData, int index, int *drawSmooth_r),
+       void *userData,
+       int useColors,
+       int (*setMaterial)(int, void *attribs))
 {
        CDDerivedMesh *cddm = (CDDerivedMesh*) dm;
        MVert *mv = cddm->mvert;
@@ -880,7 +887,7 @@
        float *nors= dm->getFaceDataArray(dm, CD_NORMAL);
        int i, orig, *index = DM_get_face_data_layer(dm, CD_ORIGINDEX);
 
-       if(cddm_draw_pbvh(dm, NULL, NULL,
+       if(cddm_draw_pbvh(dm, partial_redraw_planes, NULL,
                          useColors ? GPU_DRAW_ACTIVE_MCOL : 0))
                return;
 

Modified: branches/soc-2011-onion/source/blender/blenkernel/intern/subsurf_ccg.c
===================================================================
--- branches/soc-2011-onion/source/blender/blenkernel/intern/subsurf_ccg.c      
2011-06-11 02:26:28 UTC (rev 37397)
+++ branches/soc-2011-onion/source/blender/blenkernel/intern/subsurf_ccg.c      
2011-06-11 06:00:10 UTC (rev 37398)
@@ -1880,7 +1880,27 @@
        }
 }
 
-static void ccgDM_drawMappedFaces(DerivedMesh *dm, int (*setDrawOptions)(void 
*userData, int index, int *drawSmooth_r), void *userData, int useColors, int 
(*setMaterial)(int, void *attribs)) {
+/* TODO: unify with gpu_buffers.c */
+static void gl_color_from_grid(DMGridData *elem, GridKey *gridkey)
+{
+       float v[3] = {1, 1, 1};
+       int i;
+
+       for(i = 0; i < gridkey->color; ++i) {
+               float *col = GRIDELEM_COLOR(elem, gridkey)[i];
+               interp_v3_v3v3(v, v, col, col[3]);
+       }
+       glColor3fv(v);
+}
+
+static void ccgDM_drawMappedFaces(DerivedMesh *dm, 
+                                 float (*partial_redraw_planes)[4],
+                                 int fast_navigate,
+                                 int (*setDrawOptions)(void *userData, int 
index, int *drawSmooth_r),
+                                 void *userData,
+                                 int useColors,
+                                 int (*setMaterial)(int, void *attribs))
+{
        CCGDerivedMesh *ccgdm = (CCGDerivedMesh*) dm;
        CCGSubSurf *ss = ccgdm->ss;
        MCol *mcol= NULL;
@@ -1888,16 +1908,23 @@
        GridKey *gridkey = ccgSubSurf_getGridKey(ss);
        char *faceFlags = ccgdm->faceFlags;
        int gridFaces = gridSize - 1, totface;
+       int step = (fast_navigate)? gridSize-1: 1;
 
-       if(ccgdm_draw_pbvh(dm, NULL, NULL, 0, /* TODO, fast nav. */
+       if(ccgdm_draw_pbvh(dm, partial_redraw_planes, NULL, fast_navigate,
                           useColors ? GPU_DRAW_ACTIVE_MCOL : 0))
                return;
 
        if(useColors) {
+               if(fast_navigate) {
+                       glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE);
+                       glEnable(GL_COLOR_MATERIAL);
+               }
+               else {
                mcol = dm->getFaceDataArray(dm, CD_WEIGHT_MCOL);
                if(!mcol)
                        mcol = dm->getFaceDataArray(dm, CD_MCOL);
        }
+       }
 
        totface = ccgSubSurf_getNumFaces(ss);
        for(i = 0; i < totface; i++) {
@@ -1933,19 +1960,22 @@
                                
                                for (S=0; S<numVerts; S++) {
                                        DMGridData *faceGridData = 
ccgSubSurf_getFaceGridDataArray(ss, f, S);
+                                       DMGridData *a, *b, *c, *d;
+                                                       
                                        if (drawSmooth) {
                                                glShadeModel(GL_SMOOTH);
-                                               for (y=0; y<gridFaces; y++) {
-                                                       DMGridData *a, *b;
+                                               for (y=0; y<gridFaces; y+=step) 
{
                                                        glBegin(GL_QUAD_STRIP);
-                                                       for (x=0; x<gridFaces; 
x++) {
+                                                       for (x=0; x<gridFaces; 
x+=step) {
                                                                a = 
GRIDELEM_AT(faceGridData, (y+0)*gridSize + x, gridkey);
-                                                               b = 
GRIDELEM_AT(faceGridData, (y+1)*gridSize + x, gridkey);
+                                                               b = 
GRIDELEM_AT(faceGridData, (y+step)*gridSize + x, gridkey);
        
                                                                if(cp) 
glColor3ub(cp[3], cp[2], cp[1]);
+                                                               else 
gl_color_from_grid(a, gridkey);
                                                                
glNormal3fv(GRIDELEM_NO(a, gridkey));
                                                                
glVertex3fv(GRIDELEM_CO(a, gridkey));
                                                                if(cp) 
glColor3ub(cp[7], cp[6], cp[5]);
+                                                               else 
gl_color_from_grid(b, gridkey);
                                                                
glNormal3fv(GRIDELEM_NO(b, gridkey));
                                                                
glVertex3fv(GRIDELEM_CO(b, gridkey));
 
@@ -1955,12 +1985,14 @@
                                                        }
 
                                                        a = 
GRIDELEM_AT(faceGridData, (y+0)*gridSize + x, gridkey);
-                                                       b = 
GRIDELEM_AT(faceGridData, (y+1)*gridSize + x, gridkey);
+                                                       b = 
GRIDELEM_AT(faceGridData, (y+step)*gridSize + x, gridkey);
 
                                                        if(cp) 
glColor3ub(cp[15], cp[14], cp[13]);
+                                                       else 
gl_color_from_grid(a, gridkey);
                                                        
glNormal3fv(GRIDELEM_NO(a, gridkey));
                                                        
glVertex3fv(GRIDELEM_CO(a, gridkey));
                                                        if(cp) 
glColor3ub(cp[11], cp[10], cp[9]);
+                                                       else 
gl_color_from_grid(b, gridkey);
                                                        
glNormal3fv(GRIDELEM_NO(b, gridkey));
                                                        
glVertex3fv(GRIDELEM_CO(b, gridkey));
 
@@ -1971,23 +2003,37 @@
                                        } else {
                                                glShadeModel(GL_FLAT);
                                                glBegin(GL_QUADS);
-                                               for (y=0; y<gridFaces; y++) {
-                                                       for (x=0; x<gridFaces; 
x++) {
-                                                               float *a = 
GRIDELEM_CO_AT(faceGridData, (y+0)*gridSize + x, gridkey);
-                                                               float *b = 
GRIDELEM_CO_AT(faceGridData, (y+0)*gridSize + x + 1, gridkey);
-                                                               float *c = 
GRIDELEM_CO_AT(faceGridData, (y+1)*gridSize + x + 1, gridkey);
-                                                               float *d = 
GRIDELEM_CO_AT(faceGridData, (y+1)*gridSize + x, gridkey);
+                                               for (y=0; y<gridFaces; y+=step) 
{
+                                                       for (x=0; x<gridFaces; 
x+=step) {
+                                                               float *a_co, 
*b_co, *c_co, *d_co;
 
-                                                               
ccgDM_glNormalFast(a, b, c, d);
+                                                               a = 
GRIDELEM_AT(faceGridData, (y+0)*gridSize + x, gridkey);
+                                                               b = 
GRIDELEM_AT(faceGridData, (y+0)*gridSize + x + step, gridkey);
+                                                               c = 
GRIDELEM_AT(faceGridData, (y+step)*gridSize + x + step, gridkey);
+                                                               d = 
GRIDELEM_AT(faceGridData, (y+step)*gridSize + x, gridkey);
        
+                                                               a_co = 
GRIDELEM_CO(a, gridkey);
+                                                               b_co = 
GRIDELEM_CO(b, gridkey);
+                                                               c_co = 
GRIDELEM_CO(c, gridkey);
+                                                               d_co = 
GRIDELEM_CO(d, gridkey);
+
+                                                               
ccgDM_glNormalFast(a_co, b_co, c_co, d_co);
+       
                                                                if(cp) 
glColor3ub(cp[7], cp[6], cp[5]);
-                                                               glVertex3fv(d);
+                                                               else 
gl_color_from_grid(d, gridkey);
+                                                               
glVertex3fv(a_co);
+
                                                                if(cp) 
glColor3ub(cp[11], cp[10], cp[9]);
-                                                               glVertex3fv(c);
+                                                               else 
gl_color_from_grid(c, gridkey);
+                                                               
glVertex3fv(b_co);
+
                                                                if(cp) 
glColor3ub(cp[15], cp[14], cp[13]);
-                                                               glVertex3fv(b);
+                                                               else 
gl_color_from_grid(b, gridkey);
+                                                               
glVertex3fv(c_co);
+
                                                                if(cp) 
glColor3ub(cp[3], cp[2], cp[1]);
-                                                               glVertex3fv(a);
+                                                               else 
gl_color_from_grid(a, gridkey);
+                                                               
glVertex3fv(d_co);
 
                                                                if(cp) cp += 16;
                                                        }
@@ -2000,6 +2046,9 @@
                        }
                }
        }
+
+       if(fast_navigate)
+               glDisable(GL_COLOR_MATERIAL);
 }
 static void ccgDM_drawMappedEdges(DerivedMesh *dm, int (*setDrawOptions)(void 
*userData, int index), void *userData) {
        CCGDerivedMesh *ccgdm = (CCGDerivedMesh*) dm;

Modified: branches/soc-2011-onion/source/blender/editors/space_view3d/drawmesh.c
===================================================================
--- branches/soc-2011-onion/source/blender/editors/space_view3d/drawmesh.c      
2011-06-11 02:26:28 UTC (rev 37397)
+++ branches/soc-2011-onion/source/blender/editors/space_view3d/drawmesh.c      
2011-06-11 06:00:10 UTC (rev 37398)
@@ -670,7 +670,7 @@
                dm->drawMappedFacesTex(dm, draw_em_tf_mapped__set_draw, 
me->edit_mesh);
        } else if(faceselect) {
                if(ob->mode & OB_MODE_WEIGHT_PAINT)
-                       dm->drawMappedFaces(dm, wpaint__setSolidDrawOptions, 
me, 1, GPU_enable_material);
+                       dm->drawMappedFaces(dm, NULL, 0, 
wpaint__setSolidDrawOptions, me, 1, GPU_enable_material);
                else
                        dm->drawMappedFacesTex(dm, me->mface ? 
draw_tface_mapped__set_draw : NULL, me);
        }

Modified: 
branches/soc-2011-onion/source/blender/editors/space_view3d/drawobject.c
===================================================================
--- branches/soc-2011-onion/source/blender/editors/space_view3d/drawobject.c    
2011-06-11 02:26:28 UTC (rev 37397)
+++ branches/soc-2011-onion/source/blender/editors/space_view3d/drawobject.c    
2011-06-11 06:00:10 UTC (rev 37398)
@@ -2026,7 +2026,7 @@
        data.cols[2] = actCol;
        data.efa_act = efa_act;
 
-       dm->drawMappedFaces(dm, draw_dm_faces_sel__setDrawOptions, &data, 0, 
GPU_enable_material);

@@ 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