[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