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

Reply via email to