Revision: 21535
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21535
Author:   imbusy
Date:     2009-07-11 21:45:46 +0200 (Sat, 11 Jul 2009)

Log Message:
-----------
fixed a bug with solid/flat faces in mesh showing up only solid or flat

Modified Paths:
--------------
    branches/soc-2009-imbusy/source/blender/gpu/intern/gpu_buffers.c

Modified: branches/soc-2009-imbusy/source/blender/gpu/intern/gpu_buffers.c
===================================================================
--- branches/soc-2009-imbusy/source/blender/gpu/intern/gpu_buffers.c    
2009-07-11 18:46:37 UTC (rev 21534)
+++ branches/soc-2009-imbusy/source/blender/gpu/intern/gpu_buffers.c    
2009-07-11 19:45:46 UTC (rev 21535)
@@ -438,14 +438,12 @@
        int start;
        float norm[3];
 
-       MVert *mvert;
-       MFace *mface;
+       float *nors= dm->getFaceDataArray(dm, CD_NORMAL);
+       MVert *mvert = dm->getVertArray(dm);
+       MFace *mface = dm->getFaceArray(dm);
 
        DEBUG_VBO("GPU_buffer_copy_normal\n");
 
-       mvert = dm->getVertArray(dm);
-       mface = dm->getFaceArray(dm);
-
        for( i=0; i < dm->getNumFaces(dm); i++ ) {
                start = index[redir[mface[i].mat_nr+127]];
                if( mface[i].v4 )
@@ -454,12 +452,17 @@
                        index[redir[mface[i].mat_nr+127]] += 9;
 
                /* v1 v2 v3 */
-               if( mface->flag & ME_SMOOTH ) {
+               if( mface[i].flag & ME_SMOOTH ) {
                        VECCOPY(&varray[start],mvert[mface[i].v1].no);
                        VECCOPY(&varray[start+3],mvert[mface[i].v2].no);
                        VECCOPY(&varray[start+6],mvert[mface[i].v3].no);
                }
                else {
+                       if( nors ) {
+                               VECCOPY(&varray[start],&nors[i*3]);
+                               VECCOPY(&varray[start+3],&nors[i*3]);
+                               VECCOPY(&varray[start+6],&nors[i*3]);
+                       }
                        if( mface[i].v4 )
                                CalcNormFloat4(mvert[mface[i].v1].co, 
mvert[mface[i].v2].co, mvert[mface[i].v3].co, mvert[mface[i].v4].co, norm);
                        else
@@ -471,7 +474,7 @@
 
                if( mface[i].v4 ) {
                        /* v3 v4 v1 */
-                       if( mface->flag & ME_SMOOTH ) {
+                       if( mface[i].flag & ME_SMOOTH ) {
                                VECCOPY(&varray[start+9],mvert[mface[i].v3].no);
                                
VECCOPY(&varray[start+12],mvert[mface[i].v4].no);
                                
VECCOPY(&varray[start+15],mvert[mface[i].v1].no);


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

Reply via email to