[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [21386] branches/soc-2009-imbusy/source/ blender: fixed one bug, cleaned up some code, still can' t figure out how vertex paint mode works

Lukas Steiblys imbusy at imbusy.org
Mon Jul 6 15:36:22 CEST 2009


Revision: 21386
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21386
Author:   imbusy
Date:     2009-07-06 15:36:22 +0200 (Mon, 06 Jul 2009)

Log Message:
-----------
fixed one bug, cleaned up some code, still can't figure out how vertex paint mode works

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

Modified: branches/soc-2009-imbusy/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- branches/soc-2009-imbusy/source/blender/blenkernel/intern/cdderivedmesh.c	2009-07-06 13:27:40 UTC (rev 21385)
+++ branches/soc-2009-imbusy/source/blender/blenkernel/intern/cdderivedmesh.c	2009-07-06 13:36:22 UTC (rev 21386)
@@ -326,7 +326,7 @@
 			glShadeModel(GL_SMOOTH);
 			for( a = 0; a < dm->drawObject->nmaterials; a++ ) {
 				setMaterial(dm->drawObject->materials[a].mat_nr+1, NULL);
-				glDrawArrays(GL_TRIANGLES, dm->drawObject->materials[a].start, dm->drawObject->materials[a].end);
+				glDrawArrays(GL_TRIANGLES, dm->drawObject->materials[a].start, dm->drawObject->materials[a].end-dm->drawObject->materials[a].start);
 			}
 		}
 		GPU_buffer_unbind( );
@@ -672,23 +672,31 @@
 		int prevstart = 0;
 		GPU_vertex_setup(dm);
 		GPU_normal_setup(dm);
+		if( useColors && mc )
+			GPU_color_setup(dm);
 		if( !GPU_buffer_legacy(dm) ) {
-			if( useColors && mc )
-				GPU_color_setup(dm);
 			glShadeModel(GL_SMOOTH);
 			for( i = 0; i < dm->drawObject->nelements/3; i++ ) {
 				int actualFace = dm->drawObject->faceRemap[i];
 				int drawSmooth = (mf[actualFace].flag & ME_SMOOTH);
+				int dontdraw = 0;
 				if(index) {
 					orig = index[actualFace];
+					if(setDrawOptions && orig == ORIGINDEX_NONE)
+						dontdraw = 1;
 				}
 				else
 					orig = i;
-				if(!setDrawOptions || setDrawOptions(userData, orig, &drawSmooth)) {
-					state = 1;
+				if( dontdraw ) {
+					state = 0;
 				}
 				else {
-					state = 0;
+					if(!setDrawOptions || setDrawOptions(userData, orig, &drawSmooth)) {
+						state = 1;
+					}
+					else {
+						state = 0;
+					}
 				}
 				if( prevstate != state && prevstate == 1 ) {
 					if( i-prevstart > 0 ) {

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-06 13:27:40 UTC (rev 21385)
+++ branches/soc-2009-imbusy/source/blender/gpu/intern/gpu_buffers.c	2009-07-06 13:36:22 UTC (rev 21386)
@@ -535,76 +535,44 @@
 
 void GPU_buffer_copy_color3( DerivedMesh *dm, float *varray_, int *index, int *redir, void *user )
 {
-	int start;
 	int i;
-	
-	MFace *mface;
-	unsigned char *varray;
-	unsigned char *mcol;
+	unsigned char *varray = varray_;
+	unsigned char *mcol = user;
+	MFace *mface = dm->getFaceArray(dm);
 
 	DEBUG_VBO("GPU_buffer_copy_color3\n");
 
-	dm->drawObject->colType = -1;
-	mcol = user;
-	varray = (unsigned char *)varray_;
-
-	mface = dm->getFaceArray(dm);
-
 	for( i=0; i < dm->getNumFaces(dm); i++ ) {
-		start = index[redir[mface[i].mat_nr+127]];
+		int start = index[redir[mface[i].mat_nr+127]];
 		if( mface[i].v4 )
 			index[redir[mface[i].mat_nr+127]] += 18;
 		else
 			index[redir[mface[i].mat_nr+127]] += 9;
 
-		varray[start] = mcol[i*12];
-		varray[start+1] = mcol[i*12+1];
-		varray[start+2] = mcol[i*12+2];
-
-		varray[start+3] = mcol[i*12+3];
-		varray[start+4] = mcol[i*12+4];
-		varray[start+5] = mcol[i*12+5];
-
-		varray[start+6] = mcol[i*12+6];
-		varray[start+7] = mcol[i*12+7];
-		varray[start+8] = mcol[i*12+8];
 		/* v1 v2 v3 */
+		VECCOPY(&varray[start],&mcol[i*12]);
+		VECCOPY(&varray[start+3],&mcol[i*12+3]);
+		VECCOPY(&varray[start+6],&mcol[i*12+6]);
 		if( mface[i].v4 ) {
 			/* v3 v4 v1 */
-			varray[start+9] = mcol[i*12+6];
-			varray[start+10] = mcol[i*12+7];
-			varray[start+11] = mcol[i*12+8];
-
-			varray[start+12] = mcol[i*12+9];
-			varray[start+13] = mcol[i*12+10];
-			varray[start+14] = mcol[i*12+11];
-
-			varray[start+15] = mcol[i*12];
-			varray[start+16] = mcol[i*12+1];
-			varray[start+17] = mcol[i*12+2];
+			VECCOPY(&varray[start+9],&mcol[i*12+6]);
+			VECCOPY(&varray[start+12],&mcol[i*12+9]);
+			VECCOPY(&varray[start+15],&mcol[i*12]);
 		}
 	}
 }
 
 void GPU_buffer_copy_color4( DerivedMesh *dm, float *varray_, int *index, int *redir, void *user )
 {
-	int start;
 	int i;
-	
-	MFace *mface;
-	unsigned char *varray;
-	unsigned char *mcol;
+	unsigned char *varray = varray_;
+	unsigned char *mcol = user;
+	MFace *mface = dm->getFaceArray(dm);
 
 	DEBUG_VBO("GPU_buffer_copy_color4\n");
 
-	dm->drawObject->colType = -1;
-	mcol = (unsigned char *)user;
-	varray = (unsigned char *)varray_;
-
-	mface = dm->getFaceArray(dm);
-
 	for( i=0; i < dm->getNumFaces(dm); i++ ) {
-		start = index[redir[mface[i].mat_nr+127]];
+		int start = index[redir[mface[i].mat_nr+127]];
 		if( mface[i].v4 )
 			index[redir[mface[i].mat_nr+127]] += 18;
 		else





More information about the Bf-blender-cvs mailing list