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; _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs