[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