[Bf-blender-cvs] [376b125] temp-derivedmesh-looptri: Port texture paint and mcolor GPU upload to new design
Antony Riakiotakis
noreply at git.blender.org
Wed Jul 15 19:57:57 CEST 2015
Commit: 376b125a8650d18e2f1be1cb2dd208f51b7e3808
Author: Antony Riakiotakis
Date: Wed Jul 15 19:57:23 2015 +0200
Branches: temp-derivedmesh-looptri
https://developer.blender.org/rB376b125a8650d18e2f1be1cb2dd208f51b7e3808
Port texture paint and mcolor GPU upload to new design
===================================================================
M source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c
index d5c5984..bf1a9cf 100644
--- a/source/blender/blenkernel/intern/cdderivedmesh.c
+++ b/source/blender/blenkernel/intern/cdderivedmesh.c
@@ -1383,17 +1383,18 @@ static void cdDM_buffer_copy_uv(
static void cdDM_buffer_copy_uv_texpaint(
DerivedMesh *dm, float *varray)
{
- int i, tottri;
+ int i, j, totpoly;
int start;
const MPoly *mpoly;
- const MLoopTri *lt;
int totmaterial = dm->totmat;
const MLoopUV **uv_base;
const MLoopUV *uv_stencil_base;
int stencil;
+ totpoly = dm->getNumPolys(dm);
+
/* should have been checked for before, reassert */
BLI_assert(DM_get_loop_data_layer(dm, CD_MLOOPUV));
uv_base = MEM_mallocN(totmaterial * sizeof(*uv_base), "texslots");
@@ -1406,23 +1407,16 @@ static void cdDM_buffer_copy_uv_texpaint(
uv_stencil_base = CustomData_get_layer_n(&dm->loopData, CD_MLOOPUV, stencil);
mpoly = dm->getPolyArray(dm);
- lt = dm->looptris.array;
- tottri = dm->looptris.num;
start = 0;
- for (i = 0; i < tottri; i++, lt++) {
- const MPoly *mp = &mpoly[lt->poly];
- const unsigned int *ltri = lt->tri;
- int mat_i = mp->mat_nr;
+ for (i = 0; i < totpoly; i++, mpoly++) {
+ int mat_i = mpoly->mat_nr;
- /* v1 v2 v3 */
- copy_v2_v2(&varray[start + 0], uv_base[mat_i][ltri[0]].uv);
- copy_v2_v2(&varray[start + 2], uv_stencil_base[ltri[0]].uv);
- copy_v2_v2(&varray[start + 4], uv_base[mat_i][ltri[1]].uv);
- copy_v2_v2(&varray[start + 6], uv_stencil_base[ltri[1]].uv);
- copy_v2_v2(&varray[start + 8], uv_base[mat_i][ltri[2]].uv);
- copy_v2_v2(&varray[start + 10], uv_stencil_base[ltri[2]].uv);
- start += 12;
+ for (j = 0; j < mpoly->totloop; j++) {
+ copy_v2_v2(&varray[start], uv_base[mat_i][mpoly->loopstart + j].uv);
+ copy_v2_v2(&varray[start + 2], uv_stencil_base[mpoly->loopstart + j].uv);
+ start += 4;
+ }
}
MEM_freeN(uv_base);
@@ -1433,24 +1427,21 @@ static void cdDM_buffer_copy_mcol(
DerivedMesh *dm, unsigned char *varray,
const void *user_data)
{
- int i, tottri;
+ int i, j, totpoly;
int start;
- const MLoopTri *lt;
const MLoopCol *mloopcol = user_data;
+ const MPoly *mpoly = dm->getPolyArray(dm);
- lt = dm->looptris.array;
- tottri = dm->looptris.num;
- start = 0;
+ totpoly = dm->getNumPolys(dm);
- for (i = 0; i < tottri; i++, lt++) {
- const unsigned int *ltri = lt->tri;
+ start = 0;
- /* v1 v2 v3 */
- copy_v3_v3_char((char *)&varray[start + 0], &mloopcol[ltri[0]].r);
- copy_v3_v3_char((char *)&varray[start + 3], &mloopcol[ltri[1]].r);
- copy_v3_v3_char((char *)&varray[start + 6], &mloopcol[ltri[2]].r);
- start += 9;
+ for (i = 0; i < totpoly; i++, mpoly++) {
+ for (j = 0; j < mpoly->totloop; j++) {
+ copy_v3_v3_char((char *)&varray[start], &mloopcol[mpoly->loopstart + j].r);
+ start += 3;
+ }
}
}
More information about the Bf-blender-cvs
mailing list