[Bf-blender-cvs] [9074d95] temp_display_optimization: Edit mode drawing
Antony Riakiotakis
noreply at git.blender.org
Tue Jul 28 17:54:05 CEST 2015
Commit: 9074d9572e4c81fbdb15de5bb331afb72b14b9bd
Author: Antony Riakiotakis
Date: Tue Jul 28 17:26:06 2015 +0200
Branches: temp_display_optimization
https://developer.blender.org/rB9074d9572e4c81fbdb15de5bb331afb72b14b9bd
Edit mode drawing
Draw all materials of the mesh
Don't display hidden triangles.
===================================================================
M source/blender/blenkernel/intern/editderivedmesh.c
M source/blender/gpu/GPU_buffers.h
===================================================================
diff --git a/source/blender/blenkernel/intern/editderivedmesh.c b/source/blender/blenkernel/intern/editderivedmesh.c
index 3e3886a..d8a39c7 100644
--- a/source/blender/blenkernel/intern/editderivedmesh.c
+++ b/source/blender/blenkernel/intern/editderivedmesh.c
@@ -499,6 +499,7 @@ static void emDM_buffer_copy_triangles(
/* set the visible polygons */
for (i = 0; i < totmat; i++) {
gpumaterials[i].totvisiblepolys = fc[i].i_visible;
+ gpumaterials[i].totvisibleelems = fc[i].i_tri_visible;
}
MEM_freeN(fc);
@@ -790,6 +791,7 @@ static void emDM_drawMappedFaces(
BMEditMesh *em = bmdm->em;
BMesh *bm = em->bm;
BMFace *efa;
+ bool skip_hidden = (flag & DM_DRAW_SKIP_HIDDEN) != 0;
struct BMLoop *(*looptris)[3] = bmdm->em->looptris;
const int tottri = bmdm->em->tottri;
const int lasttri = tottri - 1; /* compare agasint this a lot */
@@ -823,9 +825,16 @@ static void emDM_drawMappedFaces(
GPU_vertex_setup(dm);
GPU_normal_setup(dm);
GPU_triangle_setup(dm);
- if (dm->drawObject->triangles) {
- GPU_buffer_draw_elements(dm->drawObject->triangles, GL_TRIANGLES, 0, dm->drawObject->materials[0].totelements);
+ glShadeModel(GL_SMOOTH);
+ for (i = 0; i < dm->drawObject->totmaterial; i++) {
+ if (!setMaterial || setMaterial(dm->drawObject->materials[i].mat_nr + 1, NULL)) {
+ unsigned int totalelem = (skip_hidden) ? dm->drawObject->materials[i].totvisibleelems :
+ dm->drawObject->materials[i].totelements;
+ GPU_buffer_draw_elements(dm->drawObject->triangles, GL_TRIANGLES,
+ dm->drawObject->materials[i].start, totalelem);
+ }
}
+ glShadeModel(GL_FLAT);
GPU_buffers_unbind();
return;
diff --git a/source/blender/gpu/GPU_buffers.h b/source/blender/gpu/GPU_buffers.h
index e653af0..f74f118 100644
--- a/source/blender/gpu/GPU_buffers.h
+++ b/source/blender/gpu/GPU_buffers.h
@@ -67,6 +67,7 @@ typedef struct GPUBufferMaterial {
unsigned int *polys; /* array of polygons for this material */
unsigned int totpolys; /* total polygons in polys */
unsigned int totvisiblepolys; /* total visible polygons */
+ unsigned int totvisibleelems; /* total visible elements */
/* original material index */
short mat_nr;
More information about the Bf-blender-cvs
mailing list