[Bf-blender-cvs] [5d9a863] temp-derivedmesh-looptri: Correctly support UVs with VBO/cddm
Antony Riakiotakis
noreply at git.blender.org
Wed Jul 15 21:00:42 CEST 2015
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;
+ }
}
}
More information about the Bf-blender-cvs
mailing list