Commit: 5d9a86356fc0bba8ca345d287fcddff411d0602d
Author: Antony Riakiotakis
Date:   Wed Jul 15 21:00:34 2015 +0200
Branches: temp-derivedmesh-looptri
https://developer.blender.org/rB5d9a86356fc0bba8ca345d287fcddff411d0602d

Correctly support UVs with VBO/cddm

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

M       source/blender/blenkernel/intern/cdderivedmesh.c

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

diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c 
b/source/blender/blenkernel/intern/cdderivedmesh.c
index bf1a9cf..549cc81 100644
--- a/source/blender/blenkernel/intern/cdderivedmesh.c
+++ b/source/blender/blenkernel/intern/cdderivedmesh.c
@@ -366,35 +366,31 @@ static void cdDM_drawVerts(DerivedMesh *dm)
 static void cdDM_drawUVEdges(DerivedMesh *dm)
 {
        CDDerivedMesh *cddm = (CDDerivedMesh *) dm;
-       const MLoopTri *lt = dm->looptris.array;
        int i;
+       const MPoly *mpoly = cddm->mpoly;
+       int totpoly = dm->getNumPolys(dm);
+       int prevstart = 0;
+       bool prevdraw = true;
+       int curpos = 0;
 
-       if (lt) {
-               const MPoly *mpoly = cddm->mpoly;
-               int prevstart = 0;
-               bool prevdraw = true;
-               int curpos = 0;
-               
-               GPU_uvedge_setup(dm);
-               for (i = 0; i < dm->looptris.num; i++, lt++) {
-                       const MPoly *mp = &mpoly[lt->poly];
-                       const bool draw = (mp->flag & ME_HIDE) == 0;
+       GPU_uvedge_setup(dm);
+       for (i = 0; i < totpoly; i++, mpoly++) {
+               const bool draw = (mpoly->flag & ME_HIDE) == 0;
 
-                       if (prevdraw != draw) {
-                               if (prevdraw && (curpos != prevstart)) {
-                                       glDrawArrays(GL_LINES, prevstart, 
curpos - prevstart);
-                               }
-                               prevstart = curpos;
+               if (prevdraw != draw) {
+                       if (prevdraw && (curpos != prevstart)) {
+                               glDrawArrays(GL_LINES, prevstart, curpos - 
prevstart);
                        }
-
-                       curpos += 6;
-                       prevdraw = draw;
+                       prevstart = curpos;
                }
-               if (prevdraw && (curpos != prevstart)) {
-                       glDrawArrays(GL_LINES, prevstart, curpos - prevstart);
-               }
-               GPU_buffer_unbind();
+
+               curpos += 2 * mpoly->totloop;
+               prevdraw = draw;
+       }
+       if (prevdraw && (curpos != prevstart)) {
+               glDrawArrays(GL_LINES, prevstart, curpos - prevstart);
        }
+       GPU_buffer_unbind();
 }
 
 static void cdDM_drawEdges(DerivedMesh *dm, bool drawLooseEdges, bool 
drawAllEdges)
@@ -1508,31 +1504,24 @@ static void cdDM_buffer_copy_edge(
 static void cdDM_buffer_copy_uvedge(
         DerivedMesh *dm, float *varray)
 {
-       int i, tottri;
+       int i, j, totpoly;
        int start;
-       const MLoopTri *lt;
        const MLoopUV *mloopuv;
+       const MPoly *mpoly = dm->getPolyArray(dm);
 
        if ((mloopuv = DM_get_loop_data_layer(dm, CD_MLOOPUV)) == NULL) {
                return;
        }
 
-       lt = dm->looptris.array;
-       tottri = dm->looptris.num;
+       totpoly = dm->getNumPolys(dm);
        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;
+       for (i = 0; i < totpoly; i++, mpoly++) {
+               for (j = 0; j < mpoly->totloop; j++) {
+                       copy_v2_v2(&varray[start], mloopuv[mpoly->loopstart + 
j].uv);
+                       copy_v2_v2(&varray[start + 2], mloopuv[mpoly->loopstart 
+ (j + 1) % mpoly->totloop].uv);
+                       start += 4;
+               }
        }
 }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to