[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