[Bf-blender-cvs] [c219e59] temp-derivedmesh-looptri: Revert "Port UV display to new design. As plus, we can remove the extra buffer completely"

Antony Riakiotakis noreply at git.blender.org
Wed Jul 15 21:00:40 CEST 2015


Commit: c219e59ffb7df232c18334fb4c1fe285de9057f3
Author: Antony Riakiotakis
Date:   Wed Jul 15 20:21:45 2015 +0200
Branches: temp-derivedmesh-looptri
https://developer.blender.org/rBc219e59ffb7df232c18334fb4c1fe285de9057f3

Revert "Port UV display to new design. As plus, we can remove the extra buffer completely"

This reverts commit a5e3c4f04ce0b36ed78c88a221ccca5a3d2bcd50.

I was too hasty in concluding this could be removed easily

===================================================================

M	source/blender/blenkernel/intern/cdderivedmesh.c
M	source/blender/gpu/GPU_buffers.h
M	source/blender/gpu/intern/gpu_buffers.c

===================================================================

diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c
index e5bdb2b..bf1a9cf 100644
--- a/source/blender/blenkernel/intern/cdderivedmesh.c
+++ b/source/blender/blenkernel/intern/cdderivedmesh.c
@@ -371,14 +371,14 @@ static void cdDM_drawUVEdges(DerivedMesh *dm)
 
 	if (lt) {
 		const MPoly *mpoly = cddm->mpoly;
-		const int totpoly = dm->getNumPolys(dm);
 		int prevstart = 0;
 		bool prevdraw = true;
 		int curpos = 0;
 		
 		GPU_uvedge_setup(dm);
-		for (i = 0; i < totpoly; i++, mpoly++) {
-			const bool draw = (mpoly->flag & ME_HIDE) == 0;
+		for (i = 0; i < dm->looptris.num; i++, lt++) {
+			const MPoly *mp = &mpoly[lt->poly];
+			const bool draw = (mp->flag & ME_HIDE) == 0;
 
 			if (prevdraw != draw) {
 				if (prevdraw && (curpos != prevstart)) {
@@ -387,7 +387,7 @@ static void cdDM_drawUVEdges(DerivedMesh *dm)
 				prevstart = curpos;
 			}
 
-			curpos += mpoly->totloop;
+			curpos += 6;
 			prevdraw = draw;
 		}
 		if (prevdraw && (curpos != prevstart)) {
@@ -1505,6 +1505,37 @@ static void cdDM_buffer_copy_edge(
 	dm->drawObject->tot_edge_drawn = tot;
 }
 
+static void cdDM_buffer_copy_uvedge(
+        DerivedMesh *dm, float *varray)
+{
+	int i, tottri;
+	int start;
+	const MLoopTri *lt;
+	const MLoopUV *mloopuv;
+
+	if ((mloopuv = DM_get_loop_data_layer(dm, CD_MLOOPUV)) == NULL) {
+		return;
+	}
+
+	lt = dm->looptris.array;
+	tottri = dm->looptris.num;
+	start = 0;
+
+	for (i = 0; i < tottri; i++, lt++) {
+		const unsigned int *ltri = lt->tri;
+
+		copy_v2_v2(&varray[start + 0], mloopuv[ltri[0]].uv);
+		copy_v2_v2(&varray[start + 2], mloopuv[ltri[1]].uv);
+
+		copy_v2_v2(&varray[start + 4], mloopuv[ltri[1]].uv);
+		copy_v2_v2(&varray[start + 6], mloopuv[ltri[2]].uv);
+
+		copy_v2_v2(&varray[start + 8], mloopuv[ltri[2]].uv);
+		copy_v2_v2(&varray[start + 10], mloopuv[ltri[0]].uv);
+		start += 12;
+	}
+}
+
 static void cdDM_copy_gpu_data(
         DerivedMesh *dm, int type, void *varray_p,
         const int *mat_orig_to_new, const void *user_data)
@@ -1529,6 +1560,9 @@ static void cdDM_copy_gpu_data(
 		case GPU_BUFFER_EDGE:
 			cdDM_buffer_copy_edge(dm, (unsigned int *)varray_p);
 			break;
+		case GPU_BUFFER_UVEDGE:
+			cdDM_buffer_copy_uvedge(dm, (float *)varray_p);
+			break;
 		case GPU_BUFFER_TRIANGLES:
 			cdDM_buffer_copy_triangles(dm, (unsigned int *)varray_p, mat_orig_to_new);
 			break;
diff --git a/source/blender/gpu/GPU_buffers.h b/source/blender/gpu/GPU_buffers.h
index 0c76b1f..3a8b71c 100644
--- a/source/blender/gpu/GPU_buffers.h
+++ b/source/blender/gpu/GPU_buffers.h
@@ -160,6 +160,7 @@ typedef enum {
 	GPU_BUFFER_UV,
 	GPU_BUFFER_UV_TEXPAINT,
 	GPU_BUFFER_EDGE,
+	GPU_BUFFER_UVEDGE,
 	GPU_BUFFER_TRIANGLES
 } GPUBufferType;
 
diff --git a/source/blender/gpu/intern/gpu_buffers.c b/source/blender/gpu/intern/gpu_buffers.c
index ac304be..370a11f 100644
--- a/source/blender/gpu/intern/gpu_buffers.c
+++ b/source/blender/gpu/intern/gpu_buffers.c
@@ -575,6 +575,8 @@ static GPUBuffer **gpu_drawobject_buffer_from_type(GPUDrawObject *gdo, GPUBuffer
 			return &gdo->uv_tex;
 		case GPU_BUFFER_EDGE:
 			return &gdo->edges;
+		case GPU_BUFFER_UVEDGE:
+			return &gdo->uvedges;
 		case GPU_BUFFER_TRIANGLES:
 			return &gdo->triangles;
 		default:
@@ -598,6 +600,13 @@ static int gpu_buffer_size_from_type(DerivedMesh *dm, GPUBufferType type)
 			return sizeof(float) * gpu_buffer_type_settings[type].num_components * dm->drawObject->tot_triangle_point;
 		case GPU_BUFFER_EDGE:
 			return sizeof(int) * gpu_buffer_type_settings[type].num_components * dm->drawObject->totedge;
+		case GPU_BUFFER_UVEDGE:
+			/* each face gets 3 points, 3 edges per triangle, and
+			 * each edge has its own, non-shared coords, so each
+			 * tri corner needs minimum of 4 floats, quads used
+			 * less so here we can over allocate and assume all
+			 * tris. */
+			return sizeof(int) * gpu_buffer_type_settings[type].num_components * dm->drawObject->tot_triangle_point;
 		case GPU_BUFFER_TRIANGLES:
 			return sizeof(int) * gpu_buffer_type_settings[type].num_components * dm->drawObject->tot_triangle_point;
 		default:
@@ -798,7 +807,7 @@ void GPU_edge_setup(DerivedMesh *dm)
 
 void GPU_uvedge_setup(DerivedMesh *dm)
 {
-	if (!gpu_buffer_setup_common(dm, GPU_BUFFER_UV))
+	if (!gpu_buffer_setup_common(dm, GPU_BUFFER_UVEDGE))
 		return;
 
 	glEnableClientState(GL_VERTEX_ARRAY);




More information about the Bf-blender-cvs mailing list