[Bf-blender-cvs] [fc24b039dbf] custom-manipulators: Remove face-maps from GPU buffer

Campbell Barton noreply at git.blender.org
Tue May 30 09:03:46 CEST 2017


Commit: fc24b039dbfe528d357107b166cd682d9bcfb8a3
Author: Campbell Barton
Date:   Tue May 30 17:01:08 2017 +1000
Branches: custom-manipulators
https://developer.blender.org/rBfc24b039dbfe528d357107b166cd682d9bcfb8a3

Remove face-maps from GPU buffer

We wont use this long-term so remove to make merge easier.

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

M	source/blender/blenkernel/intern/cdderivedmesh.c
M	source/blender/blenkernel/intern/subsurf_ccg.c
M	source/blender/gpu/GPU_buffers.h
M	source/blender/gpu/intern/gpu_buffers.c

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

diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c
index f1266f6e52a..c743d1f7e11 100644
--- a/source/blender/blenkernel/intern/cdderivedmesh.c
+++ b/source/blender/blenkernel/intern/cdderivedmesh.c
@@ -1488,66 +1488,6 @@ static void cdDM_buffer_copy_uvedge(
 	}
 }
 
-static void cdDM_buffer_copy_facemap(DerivedMesh *dm, unsigned int *varray)
-{
-	GPUDrawObject *gdo = dm->drawObject;
-	int *facemap_iter, *facemap = DM_get_poly_data_layer(dm, CD_FACEMAP);
-	int i, totpoly, offset = 0;
-	MPoly *mp_iter, *mp = dm->getPolyArray(dm);
-	const MLoopTri *ltri = dm->getLoopTriArray(dm);
-	MLoop *mloop = dm->getLoopArray(dm);
-	int *facemap_offset;
-
-	totpoly = dm->getNumPolys(dm);
-
-	gdo->totfacemaps = 0;
-
-	facemap_iter = facemap;
-
-	/* pretty crappy to iterate so many times but it's only being done on creation */
-	for (i = 0; i < totpoly; i++, facemap_iter++) {
-		gdo->totfacemaps = max_ii(*facemap_iter, gdo->totfacemaps);
-	}
-	/* account for 0 - n -1 range */
-	gdo->totfacemaps++;
-
-	gdo->facemap_start = MEM_callocN(gdo->totfacemaps * sizeof(*gdo->facemap_start), "GDO_facemap_start");
-	gdo->facemap_count = MEM_callocN(gdo->totfacemaps * sizeof(*gdo->facemap_count), "GDO_facemap_count");
-	facemap_offset = MEM_callocN(gdo->totfacemaps * sizeof(*facemap_offset), "facemap_offset");
-
-	facemap_iter = facemap;
-	mp_iter = mp;
-	for (i = 0; i < totpoly; i++, facemap_iter++, mp_iter++) {
-		if (*facemap_iter != -1)
-			gdo->facemap_count[*facemap_iter] += ME_POLY_TRI_TOT(mp_iter);
-	}
-
-	for (i = 0; i < gdo->totfacemaps; i++) {
-		gdo->facemap_start[i] = offset;
-		offset += gdo->facemap_count[i];
-	}
-
-	facemap_iter = facemap;
-	mp_iter = mp;
-	for (i = 0; i < totpoly; i++, facemap_iter++, mp_iter++) {
-		if (*facemap_iter != -1) {
-			int numtri = ME_POLY_TRI_TOT(mp_iter);
-			int fmap_offset = (gdo->facemap_start[*facemap_iter] + facemap_offset[*facemap_iter]) * 3;
-			const MLoopTri *ltri_iter = ltri + poly_to_tri_count(i, mp_iter->loopstart);
-
-			facemap_offset[*facemap_iter] += numtri;
-
-			for (; numtri > 0; numtri--, ltri_iter++) {
-				varray[fmap_offset++] = gdo->vert_points[mloop[ltri_iter->tri[0]].v].point_index;
-				varray[fmap_offset++] = gdo->vert_points[mloop[ltri_iter->tri[1]].v].point_index;
-				varray[fmap_offset++] = gdo->vert_points[mloop[ltri_iter->tri[2]].v].point_index;
-			}
-		}
-	}
-
-	MEM_freeN(facemap_offset);
-}
-
 static void cdDM_copy_gpu_data(
         DerivedMesh *dm, int type, void *varray_p,
         const int *mat_orig_to_new, const void *user_data)
@@ -1578,9 +1518,6 @@ static void cdDM_copy_gpu_data(
 		case GPU_BUFFER_TRIANGLES:
 			cdDM_buffer_copy_triangles(dm, (unsigned int *)varray_p, mat_orig_to_new);
 			break;
-		case GPU_BUFFER_FACEMAP:
-			cdDM_buffer_copy_facemap(dm, (unsigned int *)varray_p);
-			break;
 		default:
 			break;
 	}
diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c
index 2a056aba239..1f72744bdee 100644
--- a/source/blender/blenkernel/intern/subsurf_ccg.c
+++ b/source/blender/blenkernel/intern/subsurf_ccg.c
@@ -2115,78 +2115,6 @@ static void ccgDM_buffer_copy_triangles(
 	MEM_freeN(fc);
 }
 
-static void ccgDM_buffer_copy_facemaps(DerivedMesh *dm, unsigned int *varray)
-{
-	GPUDrawObject *gdo = dm->drawObject;
-	CCGDerivedMesh *ccgdm = (CCGDerivedMesh *) dm;
-	CCGSubSurf *ss = ccgdm->ss;
-	CCGKey key;
-	int *facemap = DM_get_poly_data_layer(dm, CD_FACEMAP);
-	int gridSize = ccgSubSurf_getGridSize(ss);
-	int gridFaces = gridSize - 1;
-	int i, totface = ccgSubSurf_getNumFaces(ss);
-	int offset = 0;
-	int totloops = 0;
-	int *facemap_offset;
-
-	CCG_key_top_level(&key, ss);
-
-	gdo->totfacemaps = 0;
-
-	/* pretty crappy to iterate so many times but it's only being done on creation */
-	for (i = 0; i < totface; i++) {
-		gdo->totfacemaps = max_ii(facemap[ccgdm->faceMap[i].startFace], gdo->totfacemaps);
-	}
-	/* account for 0 - n -1 range */
-	gdo->totfacemaps++;
-
-	gdo->facemap_start = MEM_callocN(gdo->totfacemaps * sizeof(*gdo->facemap_start), "GDO_facemap_start");
-	gdo->facemap_count = MEM_callocN(gdo->totfacemaps * sizeof(*gdo->facemap_count), "GDO_facemap_count");
-	facemap_offset = MEM_callocN(gdo->totfacemaps * sizeof(*facemap_offset), "facemap_offset");
-
-	for (i = 0; i < totface; i++) {
-		int facemap_index = facemap[ccgdm->faceMap[i].startFace];
-		if (facemap_index != -1) {
-			CCGFace *f = ccgdm->faceMap[i].face;
-			int numVerts = ccgSubSurf_getFaceNumVerts(f);
-			gdo->facemap_count[facemap_index] += gridFaces * gridFaces * numVerts * 2;
-		}
-	}
-
-	for (i = 0; i < gdo->totfacemaps; i++) {
-		gdo->facemap_start[i] = offset;
-		offset += gdo->facemap_count[i];
-	}
-
-	for (i = 0; i < totface; i++) {
-		int facemap_index = facemap[ccgdm->faceMap[i].startFace];
-		if (facemap_index != -1) {
-			CCGFace *f = ccgdm->faceMap[i].face;
-			int S, x, y, numVerts = ccgSubSurf_getFaceNumVerts(f);
-			int fmap_offset = (gdo->facemap_start[facemap_index] + facemap_offset[facemap_index]) * 3;
-
-			facemap_offset[facemap_index] += gridFaces * gridFaces * numVerts * 2;
-
-			for (S = 0; S < numVerts; S++) {
-				for (y = 0; y < gridFaces; y++) {
-					for (x = 0; x < gridFaces; x++) {
-						varray[fmap_offset++] = totloops + 3;
-						varray[fmap_offset++] = totloops + 2;
-						varray[fmap_offset++] = totloops + 1;
-
-						varray[fmap_offset++] = totloops + 3;
-						varray[fmap_offset++] = totloops + 1;
-						varray[fmap_offset++] = totloops;
-
-						totloops += 4;
-					}
-				}
-			}
-		}
-	}
-
-	MEM_freeN(facemap_offset);
-}
 
 /* Only used by non-editmesh types */
 static void ccgDM_buffer_copy_vertex(
@@ -2614,9 +2542,6 @@ static void ccgDM_copy_gpu_data(
 		case GPU_BUFFER_TRIANGLES:
 			ccgDM_buffer_copy_triangles(dm, (unsigned int *)varray_p, mat_orig_to_new);
 			break;
-		case GPU_BUFFER_FACEMAP:
-			ccgDM_buffer_copy_facemaps(dm, (unsigned int *)varray_p);
-			break;
 		default:
 			break;
 	}
diff --git a/source/blender/gpu/GPU_buffers.h b/source/blender/gpu/GPU_buffers.h
index 6d06585b806..b4d271ed3b9 100644
--- a/source/blender/gpu/GPU_buffers.h
+++ b/source/blender/gpu/GPU_buffers.h
@@ -54,9 +54,6 @@ struct PBVH;
 struct Batch;
 struct MVert;
 
-typedef void (*GPUBufferCopyFunc)(DerivedMesh *dm, float *varray, int *index,
-                                  int *mat_orig_to_new, void *user_data);
-
 typedef struct GPUBuffer {
 	size_t size;        /* in bytes */
 	unsigned int id; /* used with vertex buffer objects */
@@ -102,7 +99,6 @@ typedef struct GPUDrawObject {
 	GPUBuffer *edges;
 	GPUBuffer *uvedges;
 	GPUBuffer *triangles; /* triangle index buffer */
-	GPUBuffer *facemapindices;
 
 	/* for each original vertex, the list of related points */
 	struct GPUVertPointLink *vert_points;
@@ -135,10 +131,6 @@ typedef struct GPUDrawObject {
 	/* for subsurf, offset where drawing of interior edges starts */
 	unsigned int interior_offset;
 	unsigned int totinterior;
-
-	int totfacemaps;    /* total facemaps */
-	int *facemap_start; /* beginning of facemap */
-	int *facemap_count; /* elements per facemap */
 } GPUDrawObject;
 
 /* currently unused */
@@ -179,8 +171,7 @@ typedef enum {
 	GPU_BUFFER_UV_TEXPAINT,
 	GPU_BUFFER_EDGE,
 	GPU_BUFFER_UVEDGE,
-	GPU_BUFFER_TRIANGLES,
-	GPU_BUFFER_FACEMAP
+	GPU_BUFFER_TRIANGLES
 } GPUBufferType;
 
 typedef enum {
@@ -202,7 +193,6 @@ void GPU_color_setup(struct DerivedMesh *dm, int colType);
 void GPU_buffer_bind_as_color(GPUBuffer *buffer);
 void GPU_edge_setup(struct DerivedMesh *dm); /* does not mix with other data */
 void GPU_uvedge_setup(struct DerivedMesh *dm);
-void GPU_facemap_setup(struct DerivedMesh *dm);
 
 void GPU_triangle_setup(struct DerivedMesh *dm);
 
diff --git a/source/blender/gpu/intern/gpu_buffers.c b/source/blender/gpu/intern/gpu_buffers.c
index 352013b2221..6281d0a3b67 100644
--- a/source/blender/gpu/intern/gpu_buffers.c
+++ b/source/blender/gpu/intern/gpu_buffers.c
@@ -95,8 +95,6 @@ const GPUBufferTypeSettings gpu_buffer_type_settings[] = {
     {GL_ELEMENT_ARRAY_BUFFER, 4},
     /* triangles, 1 point since we are allocating from tottriangle points, which account for all points */
     {GL_ELEMENT_ARRAY_BUFFER, 1},
-    /* facemap */
-    {GL_ELEMENT_ARRAY_BUFFER, 3},
 };
 
 #define MAX_GPU_ATTRIB_DATA 32
@@ -429,10 +427,6 @@ void GPU_drawobject_free(DerivedMesh *dm)
 #ifdef USE_GPU_POINT_LINK
 	MEM_freeN(gdo->vert_points_mem);
 #endif
-	if (gdo->facemap_start)
-		MEM_freeN(gdo->facemap_start);
-	if (gdo->facemap_count)
-		MEM_freeN(gdo->facemap_count);
 	GPU_buffer_free(gdo->points);
 	GPU_buffer_free(gdo->normals);
 	GPU_buffer_free(gdo->uv);
@@ -441,7 +435,6 @@ void GPU_drawobject_free(DerivedMesh *dm)
 	GPU_buffer_free(gdo->edges);
 	GPU_buffer_free(gdo->uvedges);
 	GPU_buffer_free(gdo->triangles);
-	GPU_buffer_free(gdo->facemapindices);
 
 	MEM_freeN(gdo);
 	dm->drawObject = NULL;
@@ -552,8 +545,6 @@ static GPUBuffer **gpu_drawobject_buffer_from_type(GPUDrawObject *gdo, GPUBuffer
 			return &gdo->uvedges;
 		case GPU_BUFFER_TRIANGLES:
 			return &gdo->triangles;
-		case GPU_BUFFER_FACEMAP:
-			return &gdo->facemapindices;
 		default:
 			return NULL;
 	}
@@ -580,8 +571,6 @@ static size_t gpu_buffer_size_from_type(DerivedMesh *dm, GPUBufferType type)
 			return sizeof(int) * components * dm->drawObject->tot_loop_verts;
 		case GPU_BUFFER_TRIANGLES:
 			return sizeof(int) * components * dm->drawObject->tot_triangle_point;
-		case GPU_BUFFER_FACEMAP:
-			return sizeof(int) * components * dm->drawObject->tot_triangle_point;
 		default:
 			return -1;
 	}
@@ -755,24 +744,6 @@ void GPU_triangle_setup(struct DerivedMesh *dm)
 	GLStates |= GPU_BUFFER_ELEMENT_STATE;
 }
 
-void GPU_facemap_setup(DerivedMesh *dm)
-{
-	if (!gpu_buffer_setup_common(dm, GPU_BUFFER_FACEMAP, false))
-		return;
-	
-	if (!gpu_buffer_setup_common(dm, GPU_BUFFER_VERTEX, false))
-		return;
-
-	glEnableClientState(GL_VERTEX_ARRAY);
-	glBindBuffer(GL_ARRAY_BUFFER_ARB, dm->drawObject->points->id);
-	glVertexPointer(3, GL_FLOAT, 0, 0);
-	
-	GLStates |= GPU_BUFFER_VERTEX_STATE;
-	glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, dm->drawObject->facemapindices->id);
-	
-	GLStates |= GPU_BUFFER_ELEMENT_STATE;
-}
-
 static int g

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list