Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntony Riakiotakis <kalast@gmail.com>2015-06-16 21:55:37 +0300
committerAntony Riakiotakis <kalast@gmail.com>2015-06-16 21:55:37 +0300
commitfbff0e68a4cb43d24f0e034b084307930114908b (patch)
tree78e49e9ecd25db46b7eea6b21a1ec6515f9b61cd /source/blender/gpu/intern/gpu_buffers.c
parent5ca3f3d81169911836820d2ecd857fbc66be7c84 (diff)
Drawing speedup:
We really don't need to iterate all edges of the mesh every frame to search for loose edges, this calculation can be cached when filling the edge index buffer.
Diffstat (limited to 'source/blender/gpu/intern/gpu_buffers.c')
-rw-r--r--source/blender/gpu/intern/gpu_buffers.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/source/blender/gpu/intern/gpu_buffers.c b/source/blender/gpu/intern/gpu_buffers.c
index 4b7dc7f5c9d..c863e3e8db7 100644
--- a/source/blender/gpu/intern/gpu_buffers.c
+++ b/source/blender/gpu/intern/gpu_buffers.c
@@ -942,15 +942,31 @@ static void GPU_buffer_copy_edge(DerivedMesh *dm, float *varray_, int *UNUSED(in
{
MEdge *medge;
unsigned int *varray = (unsigned int *)varray_;
- int i, totedge;
+ int i, totedge, iloose, inorm;
medge = dm->getEdgeArray(dm);
totedge = dm->getNumEdges(dm);
+ inorm = 0;
+ iloose = totedge - 1;
+
for (i = 0; i < totedge; i++, medge++) {
- varray[i * 2] = dm->drawObject->vert_points[medge->v1].point_index;
- varray[i * 2 + 1] = dm->drawObject->vert_points[medge->v2].point_index;
+ if (medge->flag & ME_LOOSEEDGE) {
+ varray[iloose * 2] = dm->drawObject->vert_points[medge->v1].point_index;
+ varray[iloose * 2 + 1] = dm->drawObject->vert_points[medge->v2].point_index;
+ iloose--;
+ }
+ else {
+ varray[inorm * 2] = dm->drawObject->vert_points[medge->v1].point_index;
+ varray[inorm * 2 + 1] = dm->drawObject->vert_points[medge->v2].point_index;
+ inorm++;
+ }
}
+
+ iloose++;
+ dm->drawObject->tot_loose_edge = totedge - iloose;
+ dm->drawObject->loose_edge_offset = iloose;
+
}
static void GPU_buffer_copy_uvedge(DerivedMesh *dm, float *varray, int *UNUSED(index), int *UNUSED(mat_orig_to_new), void *UNUSED(user))