[Bf-blender-cvs] [4cac468] temp-derivedmesh-looptri: Textured and GLSL drawing for cddm except from tangent layer now ported correctly to new display paradigm
Antony Riakiotakis
noreply at git.blender.org
Wed Jul 15 19:44:33 CEST 2015
Commit: 4cac468e09d3dc3e575abedac441509283c421dd
Author: Antony Riakiotakis
Date: Wed Jul 15 19:29:57 2015 +0200
Branches: temp-derivedmesh-looptri
https://developer.blender.org/rB4cac468e09d3dc3e575abedac441509283c421dd
Textured and GLSL drawing for cddm except from tangent layer
now ported correctly to new display paradigm
===================================================================
M source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c
index bfb5e1e..d5c5984 100644
--- a/source/blender/blenkernel/intern/cdderivedmesh.c
+++ b/source/blender/blenkernel/intern/cdderivedmesh.c
@@ -488,9 +488,8 @@ static void cdDM_drawFacesTex_common(
{
CDDerivedMesh *cddm = (CDDerivedMesh *) dm;
const MPoly *mpoly = cddm->mpoly;
- const MLoopTri *looptri = dm->looptris.array;
- const MLoopCol *mloopcol;
MTexPoly *mtexpoly = DM_get_poly_data_layer(dm, CD_MTEXPOLY);
+ const MLoopCol *mloopcol;
int i;
int colType, start_element, tot_drawn;
bool use_tface = (uvflag & DM_DRAW_USE_ACTIVE_UV) != 0;
@@ -546,7 +545,7 @@ static void cdDM_drawFacesTex_common(
/* lastFlag = 0; */ /* UNUSED */
for (mat_index = 0; mat_index < dm->drawObject->totmaterial; mat_index++) {
GPUBufferMaterial *bufmat = dm->drawObject->materials + mat_index;
- next_actualFace = looptri[bufmat->polys[0]].poly;
+ next_actualFace = bufmat->polys[0];
totpoly = bufmat->totpolys;
tot_element = 0;
@@ -554,12 +553,12 @@ static void cdDM_drawFacesTex_common(
start_element = 0;
for (i = 0; i < totpoly; i++) {
- int actualFace = looptri[bufmat->polys[i]].poly;
+ int actualFace = bufmat->polys[i];
DMDrawOption draw_option = DM_DRAW_OPTION_NORMAL;
int flush = 0;
if (i != totpoly - 1)
- next_actualFace = looptri[bufmat->polys[i + 1]].poly;
+ next_actualFace = bufmat->polys[i + 1];
if (drawParams) {
draw_option = drawParams(use_tface && mtexpoly ? &mtexpoly[actualFace] : NULL, (mloopcol != NULL), mpoly[actualFace].mat_nr);
@@ -591,11 +590,11 @@ static void cdDM_drawFacesTex_common(
flush |= compareDrawOptions(userData, actualFace, next_actualFace) == 0;
}
- tot_element += 3;
+ tot_element += (mpoly[actualFace].totloop - 2) * 3;
if (flush) {
if (draw_option != DM_DRAW_OPTION_SKIP)
- tot_drawn += 3;
+ tot_drawn += (mpoly[actualFace].totloop - 2) * 3;
if (tot_drawn) {
if (mloopcol && draw_option != DM_DRAW_OPTION_NO_MCOL)
@@ -609,7 +608,7 @@ static void cdDM_drawFacesTex_common(
start_element = tot_element;
}
else {
- tot_drawn += 3;
+ tot_drawn += (mpoly[actualFace].totloop - 2) * 3;
}
}
}
@@ -846,6 +845,7 @@ static void cdDM_drawMappedFacesGLSL(
/* MTFace *tf = dm->getTessFaceDataArray(dm, CD_MTFACE); */ /* UNUSED */
const float (*nors)[3] = dm->getPolyDataArray(dm, CD_NORMAL);
const float (*lnors)[3] = dm->getLoopDataArray(dm, CD_NORMAL);
+ const int totpoly = dm->getNumPolys(dm);
int a, b, matnr, new_matnr;
bool do_draw;
int orig;
@@ -1010,7 +1010,6 @@ static void cdDM_drawMappedFacesGLSL(
/* part two, generate and fill the arrays with the data */
if (max_element_size > 0) {
- const MLoopTri *lt = dm->looptris.array;
buffer = GPU_buffer_alloc(max_element_size * dm->drawObject->tot_loop_verts, false);
if (buffer == NULL) {
@@ -1026,39 +1025,35 @@ static void cdDM_drawMappedFacesGLSL(
return;
}
- for (a = 0; a < dm->looptris.num; a++, lt++) {
- const MPoly *mp = &mpoly[lt->poly];
- int i = mat_orig_to_new[mp->mat_nr];
+ for (a = 0; a < totpoly; a++, mpoly++) {
+ int j;
+ int i = mat_orig_to_new[mpoly->mat_nr];
offset = tot_loops * max_element_size;
if (matconv[i].numdata != 0) {
- const unsigned int *ltri = lt->tri;
- const unsigned int vtri[3] = {mloop[ltri[0]].v, mloop[ltri[1]].v, mloop[ltri[2]].v};
-
if (matconv[i].attribs.totorco && matconv[i].attribs.orco.array) {
- copy_v3_v3((float *)&varray[offset], (float *)matconv[i].attribs.orco.array[vtri[0]]);
- copy_v3_v3((float *)&varray[offset + max_element_size], (float *)matconv[i].attribs.orco.array[vtri[1]]);
- copy_v3_v3((float *)&varray[offset + max_element_size * 2], (float *)matconv[i].attribs.orco.array[vtri[2]]);
+ for (j = 0; j < mpoly->totloop; j++)
+ copy_v3_v3((float *)&varray[offset + j * max_element_size],
+ (float *)matconv[i].attribs.orco.array[mloop[mpoly->loopstart + j].v]);
offset += sizeof(float) * 3;
}
for (b = 0; b < matconv[i].attribs.tottface; b++) {
if (matconv[i].attribs.tface[b].array) {
const MLoopUV *mloopuv = matconv[i].attribs.tface[b].array;
- copy_v2_v2((float *)&varray[offset], mloopuv[ltri[0]].uv);
- copy_v2_v2((float *)&varray[offset + max_element_size], mloopuv[ltri[1]].uv);
- copy_v2_v2((float *)&varray[offset + max_element_size * 2], mloopuv[ltri[2]].uv);
+ for (j = 0; j < mpoly->totloop; j++)
+ copy_v2_v2((float *)&varray[offset + j * max_element_size], mloopuv[mpoly->loopstart + j].uv);
offset += sizeof(float) * 2;
}
}
for (b = 0; b < matconv[i].attribs.totmcol; b++) {
if (matconv[i].attribs.mcol[b].array) {
const MLoopCol *mloopcol = matconv[i].attribs.mcol[b].array;
- copy_v4_v4_char((char *)&varray[offset], &mloopcol[ltri[0]].r);
- copy_v4_v4_char((char *)&varray[offset + max_element_size], &mloopcol[ltri[1]].r);
- copy_v4_v4_char((char *)&varray[offset + max_element_size * 2], &mloopcol[ltri[2]].r);
+ for (j = 0; j < mpoly->totloop; j++)
+ copy_v4_v4_char((char *)&varray[offset + j * max_element_size], &mloopcol[mpoly->loopstart + j].r);
offset += sizeof(unsigned char) * 4;
}
}
+ /* TODO, handle tangents */
if (matconv[i].attribs.tottang && matconv[i].attribs.tang.array) {
const float *tang = matconv[i].attribs.tang.array[i * 4 + 0];
copy_v4_v4((float *)&varray[offset], tang);
@@ -1070,7 +1065,7 @@ static void cdDM_drawMappedFacesGLSL(
}
}
- tot_loops += 3;
+ tot_loops += mpoly->totloop;
}
GPU_buffer_unlock(buffer);
}
More information about the Bf-blender-cvs
mailing list