[Bf-blender-cvs] [8a077c9] temp_display_optimization: Subsurf VBOs now properly supports colors

Antony Riakiotakis noreply at git.blender.org
Wed Jun 24 18:44:49 CEST 2015


Commit: 8a077c90d23c931d924f317efd422bca0a709d19
Author: Antony Riakiotakis
Date:   Wed Jun 24 18:44:33 2015 +0200
Branches: temp_display_optimization
https://developer.blender.org/rB8a077c90d23c931d924f317efd422bca0a709d19

Subsurf VBOs now properly supports colors

===================================================================

M	source/blender/blenkernel/intern/subsurf_ccg.c

===================================================================

diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c
index 0aefee1..fbf9143 100644
--- a/source/blender/blenkernel/intern/subsurf_ccg.c
+++ b/source/blender/blenkernel/intern/subsurf_ccg.c
@@ -1947,7 +1947,51 @@ static void ccgDM_prepare_vertex_data(DerivedMesh *dm, float *varray, int *UNUSE
 	}
 }
 
+static void copy_mcol_uc3(unsigned char *v, unsigned char *col)
+{
+	v[0] = col[3];
+	v[1] = col[2];
+	v[2] = col[1];
+}
+
 /* Only used by non-editmesh types */
+static void ccgDM_prepare_color_data(DerivedMesh *dm, float *varray_, int *UNUSED(vindex),
+                                      int *UNUSED(mat_orig_to_new), void *user_data)
+{
+	CCGDerivedMesh *ccgdm = (CCGDerivedMesh *) dm;
+	CCGSubSurf *ss = ccgdm->ss;
+	CCGKey key;
+	unsigned char *varray = (unsigned char *)varray_;
+	unsigned char *mcol = (unsigned char *)user_data;
+	int gridSize = ccgSubSurf_getGridSize(ss);
+	int gridFaces = gridSize - 1;
+	int i, totface = ccgSubSurf_getNumFaces(ss);
+	int start = 0;
+	int iface = 0;
+
+	CCG_key_top_level(&key, ss);
+
+
+	for (i = 0; i < totface; i++) {
+		CCGFace *f = ccgdm->faceMap[i].face;
+		int S, x, y, numVerts = ccgSubSurf_getFaceNumVerts(f);
+
+		for (S = 0; S < numVerts; S++) {
+			for (y = 0; y < gridFaces; y++) {
+				for (x = 0; x < gridFaces; x++) {
+					copy_mcol_uc3(&varray[start], &mcol[iface * 16]);
+					copy_mcol_uc3(&varray[start + 3], &mcol[iface * 16 + 16]);
+					copy_mcol_uc3(&varray[start + 6], &mcol[iface * 16 + 8]);
+					copy_mcol_uc3(&varray[start + 9], &mcol[iface * 16 + 4]);
+
+					start += 12;
+					iface++;
+				}
+			}
+		}
+	}
+}
+
 static void ccgDM_prepare_uv_data(DerivedMesh *dm, float *varray, int *UNUSED(vindex),
                                       int *UNUSED(mat_orig_to_new), void *UNUSED(user_data))
 {
@@ -1983,7 +2027,7 @@ static void ccgDM_prepare_uv_data(DerivedMesh *dm, float *varray, int *UNUSED(vi
 }
 
 static void ccgDM_copy_gpu_data(DerivedMesh *dm, int type, float *varray, int *index,
-                         int *mat_orig_to_new, void *UNUSED(user_data))
+                         int *mat_orig_to_new, void *user_data)
 {	
 	switch(type) {
 		case GPU_BUFFER_VERTEX:
@@ -1999,7 +2043,7 @@ static void ccgDM_copy_gpu_data(DerivedMesh *dm, int type, float *varray, int *i
 			//ccgDM_prepare_uv_data(dm, varray, index, mat_orig_to_new, NULL);
 			break;
 		case GPU_BUFFER_COLOR:
-			//ccgDM_prepare_uv_data(dm, varray, index, mat_orig_to_new, NULL);
+			ccgDM_prepare_color_data(dm, varray, index, mat_orig_to_new, user_data);
 			break;
 		case GPU_BUFFER_TRIANGLES:
 			ccgDM_prepare_triangle_data(dm, varray, index, mat_orig_to_new, NULL);
@@ -2641,7 +2685,7 @@ static void ccgDM_drawFacesTex_common(DerivedMesh *dm,
 	else
 		GPU_uv_setup(dm);
 	if (mcol) {
-	//	GPU_color_setup(dm, colType);
+		GPU_color_setup(dm, colType);
 	}
 
 	totface = ccgSubSurf_getNumFaces(ss);
@@ -2691,12 +2735,10 @@ static void ccgDM_drawFacesTex_common(DerivedMesh *dm,
 			int count = (numQuads + (draw_option != DM_DRAW_OPTION_SKIP ? facequads : 0)) * 6;
 
 			if (count) {
-				/*
 				if (mcol && draw_option != DM_DRAW_OPTION_NO_MCOL)
 					GPU_color_switch(1);
 				else
 					GPU_color_switch(0);
-				*/
 
 				GPU_buffer_draw_elements(dm->drawObject->triangles, GL_TRIANGLES, first * 6, count);




More information about the Bf-blender-cvs mailing list