[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [21535] branches/soc-2009-imbusy/source/ blender/gpu/intern/gpu_buffers.c: fixed a bug with solid/ flat faces in mesh showing up only solid or flat

Lukas Steiblys imbusy at imbusy.org
Sat Jul 11 21:45:47 CEST 2009


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);





More information about the Bf-blender-cvs mailing list