Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Hays <jason_hays22@mymail.eku.edu>2011-08-19 21:15:30 +0400
committerJason Hays <jason_hays22@mymail.eku.edu>2011-08-19 21:15:30 +0400
commitc58fb76f1a043124debf2a71e6c56f2a478a0dde (patch)
tree393c06981022e6159df7c6b9efc3b5062ab7f6af /source/blender/blenkernel/intern/cdderivedmesh.c
parentc57d64468bc9009a11cafdbf0cc66e83cdaa6841 (diff)
parent3a81f23e0975ea87ade780965462ad5b15b39d95 (diff)
Merged 39338-39558
Diffstat (limited to 'source/blender/blenkernel/intern/cdderivedmesh.c')
-rw-r--r--source/blender/blenkernel/intern/cdderivedmesh.c77
1 files changed, 49 insertions, 28 deletions
diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c
index 47686c2626f..5c7ffa5adc3 100644
--- a/source/blender/blenkernel/intern/cdderivedmesh.c
+++ b/source/blender/blenkernel/intern/cdderivedmesh.c
@@ -1031,6 +1031,50 @@ static void cdDM_drawMappedFacesTex(DerivedMesh *dm, int (*setDrawOptions)(void
cdDM_drawFacesTex_common(dm, NULL, setDrawOptions, userData);
}
+static void cddm_draw_attrib_vertex(DMVertexAttribs *attribs, MVert *mvert, int a, int index, int vert, int smoothnormal)
+{
+ int b;
+
+ /* orco texture coordinates */
+ if(attribs->totorco) {
+ if(attribs->orco.glTexco)
+ glTexCoord3fv(attribs->orco.array[index]);
+ else
+ glVertexAttrib3fvARB(attribs->orco.glIndex, attribs->orco.array[index]);
+ }
+
+ /* uv texture coordinates */
+ for(b = 0; b < attribs->tottface; b++) {
+ MTFace *tf = &attribs->tface[b].array[a];
+
+ if(attribs->tface[b].glTexco)
+ glTexCoord2fv(tf->uv[vert]);
+ else
+ glVertexAttrib2fvARB(attribs->tface[b].glIndex, tf->uv[vert]);
+ }
+
+ /* vertex colors */
+ for(b = 0; b < attribs->totmcol; b++) {
+ MCol *cp = &attribs->mcol[b].array[a*4 + vert];
+ GLubyte col[4];
+ col[0]= cp->b; col[1]= cp->g; col[2]= cp->r; col[3]= cp->a;
+ glVertexAttrib4ubvARB(attribs->mcol[b].glIndex, col);
+ }
+
+ /* tangent for normal mapping */
+ if(attribs->tottang) {
+ float *tang = attribs->tang.array[a*4 + vert];
+ glVertexAttrib4fvARB(attribs->tang.glIndex, tang);
+ }
+
+ /* vertex normal */
+ if(smoothnormal)
+ glNormal3sv(mvert[index].no);
+
+ /* vertex coordinate */
+ glVertex3fv(mvert[index].co);
+}
+
static void cdDM_drawMappedFacesGLSL(DerivedMesh *dm, int (*setMaterial)(int, void *attribs), int (*setDrawOptions)(void *userData, int index), void *userData)
{
CDDerivedMesh *cddm = (CDDerivedMesh*) dm;
@@ -1121,37 +1165,14 @@ static void cdDM_drawMappedFacesGLSL(DerivedMesh *dm, int (*setMaterial)(int, vo
}
}
-#define PASSVERT(index, vert) { \
- if(attribs.totorco) \
- glVertexAttrib3fvARB(attribs.orco.glIndex, attribs.orco.array[index]); \
- for(b = 0; b < attribs.tottface; b++) { \
- MTFace *tf = &attribs.tface[b].array[a]; \
- glVertexAttrib2fvARB(attribs.tface[b].glIndex, tf->uv[vert]); \
- } \
- for(b = 0; b < attribs.totmcol; b++) { \
- MCol *cp = &attribs.mcol[b].array[a*4 + vert]; \
- GLubyte col[4]; \
- col[0]= cp->b; col[1]= cp->g; col[2]= cp->r; col[3]= cp->a; \
- glVertexAttrib4ubvARB(attribs.mcol[b].glIndex, col); \
- } \
- if(attribs.tottang) { \
- float *tang = attribs.tang.array[a*4 + vert]; \
- glVertexAttrib4fvARB(attribs.tang.glIndex, tang); \
- } \
- if(smoothnormal) \
- glNormal3sv(mvert[index].no); \
- glVertex3fv(mvert[index].co); \
- }
+ cddm_draw_attrib_vertex(&attribs, mvert, a, mface->v1, 0, smoothnormal);
+ cddm_draw_attrib_vertex(&attribs, mvert, a, mface->v2, 1, smoothnormal);
+ cddm_draw_attrib_vertex(&attribs, mvert, a, mface->v3, 2, smoothnormal);
- PASSVERT(mface->v1, 0);
- PASSVERT(mface->v2, 1);
- PASSVERT(mface->v3, 2);
if(mface->v4)
- PASSVERT(mface->v4, 3)
+ cddm_draw_attrib_vertex(&attribs, mvert, a, mface->v4, 3, smoothnormal);
else
- PASSVERT(mface->v3, 2)
-
-#undef PASSVERT
+ cddm_draw_attrib_vertex(&attribs, mvert, a, mface->v3, 2, smoothnormal);
}
glEnd();
}