[Bf-blender-cvs] [9566b13] temp_display_optimization: GLSL fix one more error - meant that attributes would not get uploaded correctly.
Antony Riakiotakis
noreply at git.blender.org
Tue Jun 30 12:23:03 CEST 2015
Commit: 9566b13672b91b4d8f1b9b1b41d31a01a68348e2
Author: Antony Riakiotakis
Date: Tue Jun 30 12:22:53 2015 +0200
Branches: temp_display_optimization
https://developer.blender.org/rB9566b13672b91b4d8f1b9b1b41d31a01a68348e2
GLSL fix one more error - meant that attributes would not get uploaded
correctly.
===================================================================
M source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c
index a9ae379..0fb22ff 100644
--- a/source/blender/blenkernel/intern/cdderivedmesh.c
+++ b/source/blender/blenkernel/intern/cdderivedmesh.c
@@ -873,7 +873,6 @@ static void cddm_draw_attrib_vertex(DMVertexAttribs *attribs, const MVert *mvert
typedef struct {
DMVertexAttribs attribs;
- int elementsize; /* size of one vertex for the format of this material */
int numdata;
GPUAttrib datatypes[GPU_MAX_ATTRIB]; /* TODO, messing up when switching materials many times - [#21056]*/
@@ -1063,8 +1062,8 @@ static void cdDM_drawMappedFacesGLSL(DerivedMesh *dm,
numdata++;
}
if (numdata != 0) {
- matconv[a].elementsize = GPU_attrib_element_size(matconv[a].datatypes, numdata);
- max_element_size = max_ii(matconv[a].elementsize, max_element_size);
+ matconv[a].numdata = numdata;
+ max_element_size = max_ii(GPU_attrib_element_size(matconv[a].datatypes, numdata), max_element_size);
}
}
}
@@ -1092,14 +1091,13 @@ static void cdDM_drawMappedFacesGLSL(DerivedMesh *dm,
int i = mat_orig_to_new[mface->mat_nr];
offset = tot_loops * max_element_size;
- if (do_draw && matconv[i].elementsize != 0) {
- int elementsize = max_element_size;
+ if (matconv[i].numdata != 0) {
if (matconv[i].attribs.totorco && matconv[i].attribs.orco.array) {
copy_v3_v3((float *)&varray[offset], (float *)matconv[i].attribs.orco.array[mface->v1]);
- copy_v3_v3((float *)&varray[offset + elementsize], (float *)matconv[i].attribs.orco.array[mface->v2]);
- copy_v3_v3((float *)&varray[offset + elementsize * 2], (float *)matconv[i].attribs.orco.array[mface->v3]);
+ copy_v3_v3((float *)&varray[offset + max_element_size], (float *)matconv[i].attribs.orco.array[mface->v2]);
+ copy_v3_v3((float *)&varray[offset + max_element_size * 2], (float *)matconv[i].attribs.orco.array[mface->v3]);
if (mface->v4) {
- copy_v3_v3((float *)&varray[offset + elementsize * 3], (float *)matconv[i].attribs.orco.array[mface->v4]);
+ copy_v3_v3((float *)&varray[offset + max_element_size * 3], (float *)matconv[i].attribs.orco.array[mface->v4]);
}
offset += sizeof(float) * 3;
}
@@ -1107,10 +1105,10 @@ static void cdDM_drawMappedFacesGLSL(DerivedMesh *dm,
if (matconv[i].attribs.tface[b].array) {
MTFace *tf = &matconv[i].attribs.tface[b].array[a];
copy_v2_v2((float *)&varray[offset], tf->uv[0]);
- copy_v2_v2((float *)&varray[offset + elementsize], tf->uv[1]);
- copy_v2_v2((float *)&varray[offset + elementsize * 2], tf->uv[2]);
+ copy_v2_v2((float *)&varray[offset + max_element_size], tf->uv[1]);
+ copy_v2_v2((float *)&varray[offset + max_element_size * 2], tf->uv[2]);
if (mface->v4) {
- copy_v2_v2((float *)&varray[offset + elementsize * 3], tf->uv[3]);
+ copy_v2_v2((float *)&varray[offset + max_element_size * 3], tf->uv[3]);
}
offset += sizeof(float) * 2;
}
@@ -1123,14 +1121,14 @@ static void cdDM_drawMappedFacesGLSL(DerivedMesh *dm,
copy_v4_v4_char((char *)&varray[offset], (char *)col);
cp = &matconv[i].attribs.mcol[b].array[a * 4 + 1];
col[0] = cp->b; col[1] = cp->g; col[2] = cp->r; col[3] = cp->a;
- copy_v4_v4_char((char *)&varray[offset + elementsize], (char *)col);
+ copy_v4_v4_char((char *)&varray[offset + max_element_size], (char *)col);
cp = &matconv[i].attribs.mcol[b].array[a * 4 + 2];
col[0] = cp->b; col[1] = cp->g; col[2] = cp->r; col[3] = cp->a;
- copy_v4_v4_char((char *)&varray[offset + elementsize * 2], (char *)col);
+ copy_v4_v4_char((char *)&varray[offset + max_element_size * 2], (char *)col);
if (mface->v4) {
cp = &matconv[i].attribs.mcol[b].array[a * 4 + 3];
col[0] = cp->b; col[1] = cp->g; col[2] = cp->r; col[3] = cp->a;
- copy_v4_v4_char((char *)&varray[offset + elementsize * 3], (char *)col);
+ copy_v4_v4_char((char *)&varray[offset + max_element_size * 3], (char *)col);
}
offset += sizeof(unsigned char) * 4;
}
@@ -1139,12 +1137,12 @@ static void cdDM_drawMappedFacesGLSL(DerivedMesh *dm,
const float *tang = matconv[i].attribs.tang.array[a * 4 + 0];
copy_v4_v4((float *)&varray[offset], tang);
tang = matconv[i].attribs.tang.array[a * 4 + 1];
- copy_v4_v4((float *)&varray[offset + elementsize], tang);
+ copy_v4_v4((float *)&varray[offset + max_element_size], tang);
tang = matconv[i].attribs.tang.array[a * 4 + 2];
- copy_v4_v4((float *)&varray[offset + elementsize * 2], tang);
+ copy_v4_v4((float *)&varray[offset + max_element_size * 2], tang);
if (mface->v4) {
tang = matconv[i].attribs.tang.array[a * 4 + 3];
- copy_v4_v4((float *)&varray[offset + elementsize * 3], tang);
+ copy_v4_v4((float *)&varray[offset + max_element_size * 3], tang);
}
offset += sizeof(float) * 4;
}
More information about the Bf-blender-cvs
mailing list