diff options
author | Campbell Barton <ideasman42@gmail.com> | 2013-02-23 09:36:15 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2013-02-23 09:36:15 +0400 |
commit | 0c53fb3a9212cb350bb64aed9877535a246e0b8c (patch) | |
tree | 700402c5e0dd935c80448e069c7cf652b09789d1 /source/blender/blenkernel/intern | |
parent | e42e570ff41eb348dc7e496567038265b8468925 (diff) |
code cleanup: make editmode PASSATTRIB into static functions.
Diffstat (limited to 'source/blender/blenkernel/intern')
-rw-r--r-- | source/blender/blenkernel/intern/editderivedmesh.c | 139 |
1 files changed, 70 insertions, 69 deletions
diff --git a/source/blender/blenkernel/intern/editderivedmesh.c b/source/blender/blenkernel/intern/editderivedmesh.c index d652b97e2fa..35d66c3a72e 100644 --- a/source/blender/blenkernel/intern/editderivedmesh.c +++ b/source/blender/blenkernel/intern/editderivedmesh.c @@ -997,6 +997,31 @@ static void emDM_drawMappedFacesTex(DerivedMesh *dm, emDM_drawFacesTex_common(dm, NULL, setDrawOptions, compareDrawOptions, userData); } +static void emdm_draw_attrib_vertex_glsl(DMVertexAttribs *attribs, BMesh *bm, BMLoop *loop, BMVert *eve, int vert) +{ + int i; + if (attribs->totorco) { + float *orco = attribs->orco.array[BM_elem_index_get(eve)]; + glVertexAttrib3fvARB(attribs->orco.gl_index, orco); + } + for (i = 0; i < attribs->tottface; i++) { + MLoopUV *_luv = CustomData_bmesh_get_n(&bm->ldata, loop->head.data, + CD_MLOOPUV, i); + glVertexAttrib2fvARB(attribs->tface[i].gl_index, _luv->uv); + } + for (i = 0; i < attribs->totmcol; i++) { + MLoopCol *_cp = CustomData_bmesh_get_n(&bm->ldata, loop->head.data, + CD_MLOOPCOL, i); + GLubyte _col[4]; + _col[0] = _cp->b; _col[1] = _cp->g; _col[2] = _cp->r; _col[3] = _cp->a; + glVertexAttrib4ubvARB(attribs->mcol[i].gl_index, _col); + } + if (attribs->tottang) { + float *tang = attribs->tang.array[i * 4 + vert]; + glVertexAttrib3fvARB(attribs->tang.gl_index, tang); + } +} + static void emDM_drawMappedFacesGLSL(DerivedMesh *dm, DMSetMaterial setMaterial, DMSetDrawOptions setDrawOptions, @@ -1012,7 +1037,7 @@ static void emDM_drawMappedFacesGLSL(DerivedMesh *dm, DMVertexAttribs attribs; GPUVertexAttribs gattribs; - int i, b, matnr, new_matnr, do_draw; + int i, matnr, new_matnr, do_draw; do_draw = FALSE; matnr = -1; @@ -1023,30 +1048,6 @@ static void emDM_drawMappedFacesGLSL(DerivedMesh *dm, glShadeModel(GL_SMOOTH); BM_mesh_elem_index_ensure(bm, BM_VERT | BM_FACE); -#define PASSATTRIB(loop, eve, vert) { \ - if (attribs.totorco) { \ - float *orco = attribs.orco.array[BM_elem_index_get(eve)]; \ - glVertexAttrib3fvARB(attribs.orco.gl_index, orco); \ - } \ - for (b = 0; b < attribs.tottface; b++) { \ - MLoopUV *_luv = CustomData_bmesh_get_n(&bm->ldata, loop->head.data, \ - CD_MLOOPUV, b); \ - glVertexAttrib2fvARB(attribs.tface[b].gl_index, _luv->uv); \ - } \ - for (b = 0; b < attribs.totmcol; b++) { \ - MLoopCol *_cp = CustomData_bmesh_get_n(&bm->ldata, loop->head.data, \ - CD_MLOOPCOL, b); \ - GLubyte _col[4]; \ - _col[0] = _cp->b; _col[1] = _cp->g; _col[2] = _cp->r; _col[3] = _cp->a; \ - glVertexAttrib4ubvARB(attribs.mcol[b].gl_index, _col); \ - } \ - if (attribs.tottang) { \ - float *tang = attribs.tang.array[i * 4 + vert]; \ - glVertexAttrib3fvARB(attribs.tang.gl_index, tang); \ - } \ - } (void)0 - - for (i = 0, ltri = em->looptris[0]; i < em->tottri; i++, ltri += 3) { int drawSmooth; @@ -1069,20 +1070,20 @@ static void emDM_drawMappedFacesGLSL(DerivedMesh *dm, if (vertexCos) glNormal3fv(bmdm->polyNos[BM_elem_index_get(efa)]); else glNormal3fv(efa->no); - PASSATTRIB(ltri[0], ltri[0]->v, 0); + emdm_draw_attrib_vertex_glsl(&attribs, bm, ltri[0], ltri[0]->v, 0); if (vertexCos) glVertex3fv(vertexCos[BM_elem_index_get(ltri[0]->v)]); else glVertex3fv(ltri[0]->v->co); - PASSATTRIB(ltri[1], ltri[1]->v, 1); + emdm_draw_attrib_vertex_glsl(&attribs, bm, ltri[1], ltri[1]->v, 1); if (vertexCos) glVertex3fv(vertexCos[BM_elem_index_get(ltri[1]->v)]); else glVertex3fv(ltri[1]->v->co); - PASSATTRIB(ltri[2], ltri[2]->v, 2); + emdm_draw_attrib_vertex_glsl(&attribs, bm, ltri[2], ltri[2]->v, 2); if (vertexCos) glVertex3fv(vertexCos[BM_elem_index_get(ltri[2]->v)]); else glVertex3fv(ltri[2]->v->co); } else { - PASSATTRIB(ltri[0], ltri[0]->v, 0); + emdm_draw_attrib_vertex_glsl(&attribs, bm, ltri[0], ltri[0]->v, 0); if (vertexCos) { glNormal3fv(vertexNos[BM_elem_index_get(ltri[0]->v)]); glVertex3fv(vertexCos[BM_elem_index_get(ltri[0]->v)]); @@ -1092,7 +1093,7 @@ static void emDM_drawMappedFacesGLSL(DerivedMesh *dm, glVertex3fv(ltri[0]->v->co); } - PASSATTRIB(ltri[1], ltri[1]->v, 1); + emdm_draw_attrib_vertex_glsl(&attribs, bm, ltri[1], ltri[1]->v, 1); if (vertexCos) { glNormal3fv(vertexNos[BM_elem_index_get(ltri[1]->v)]); glVertex3fv(vertexCos[BM_elem_index_get(ltri[1]->v)]); @@ -1102,7 +1103,7 @@ static void emDM_drawMappedFacesGLSL(DerivedMesh *dm, glVertex3fv(ltri[1]->v->co); } - PASSATTRIB(ltri[2], ltri[2]->v, 2); + emdm_draw_attrib_vertex_glsl(&attribs, bm, ltri[2], ltri[2]->v, 2); if (vertexCos) { glNormal3fv(vertexNos[BM_elem_index_get(ltri[2]->v)]); glVertex3fv(vertexCos[BM_elem_index_get(ltri[2]->v)]); @@ -1115,7 +1116,6 @@ static void emDM_drawMappedFacesGLSL(DerivedMesh *dm, glEnd(); } } -#undef PASSATTRIB } static void emDM_drawFacesGLSL(DerivedMesh *dm, @@ -1124,6 +1124,37 @@ static void emDM_drawFacesGLSL(DerivedMesh *dm, dm->drawMappedFacesGLSL(dm, setMaterial, NULL, NULL); } +static void emdm_draw_attrib_vertex_mat(DMVertexAttribs *attribs, BMesh *bm, BMLoop *loop, BMVert *eve, int vert) +{ + int i; + if (attribs->totorco) { + float *orco = attribs->orco.array[BM_elem_index_get(eve)]; + if (attribs->orco.gl_texco) + glTexCoord3fv(orco); + else + glVertexAttrib3fvARB(attribs->orco.gl_index, orco); + } + for (i = 0; i < attribs->tottface; i++) { + MLoopUV *_luv = CustomData_bmesh_get_n(&bm->ldata, loop->head.data, + CD_MLOOPUV, i); + if (attribs->tface[i].gl_texco) + glTexCoord2fv(_luv->uv); + else + glVertexAttrib2fvARB(attribs->tface[i].gl_index, _luv->uv); + } + for (i = 0; i < attribs->totmcol; i++) { + MLoopCol *_cp = CustomData_bmesh_get_n(&bm->ldata, loop->head.data, + CD_MLOOPCOL, i); + GLubyte _col[4]; + _col[0] = _cp->b; _col[1] = _cp->g; _col[2] = _cp->r; _col[3] = _cp->a; + glVertexAttrib4ubvARB(attribs->mcol[i].gl_index, _col); + } + if (attribs->tottang) { + float *tang = attribs->tang.array[i * 4 + vert]; + glVertexAttrib4fvARB(attribs->tang.gl_index, tang); + } +} + static void emDM_drawMappedFacesMat(DerivedMesh *dm, void (*setMaterial)(void *userData, int, void *attribs), int (*setFace)(void *userData, int index), void *userData) @@ -1137,7 +1168,7 @@ static void emDM_drawMappedFacesMat(DerivedMesh *dm, BMLoop **ltri; DMVertexAttribs attribs = {{{0}}}; GPUVertexAttribs gattribs; - int i, b, matnr, new_matnr; + int i, matnr, new_matnr; matnr = -1; @@ -1146,35 +1177,6 @@ static void emDM_drawMappedFacesMat(DerivedMesh *dm, BM_mesh_elem_index_ensure(bm, BM_VERT | BM_FACE); -#define PASSATTRIB(loop, eve, vert) { \ - if (attribs.totorco) { \ - float *orco = attribs.orco.array[BM_elem_index_get(eve)]; \ - if (attribs.orco.gl_texco) \ - glTexCoord3fv(orco); \ - else \ - glVertexAttrib3fvARB(attribs.orco.gl_index, orco); \ - } \ - for (b = 0; b < attribs.tottface; b++) { \ - MLoopUV *_luv = CustomData_bmesh_get_n(&bm->ldata, loop->head.data, \ - CD_MLOOPUV, b); \ - if (attribs.tface[b].gl_texco) \ - glTexCoord2fv(_luv->uv); \ - else \ - glVertexAttrib2fvARB(attribs.tface[b].gl_index, _luv->uv); \ - } \ - for (b = 0; b < attribs.totmcol; b++) { \ - MLoopCol *_cp = CustomData_bmesh_get_n(&bm->ldata, loop->head.data, \ - CD_MLOOPCOL, b); \ - GLubyte _col[4]; \ - _col[0] = _cp->b; _col[1] = _cp->g; _col[2] = _cp->r; _col[3] = _cp->a; \ - glVertexAttrib4ubvARB(attribs.mcol[b].gl_index, _col); \ - } \ - if (attribs.tottang) { \ - float *tang = attribs.tang.array[i * 4 + vert]; \ - glVertexAttrib4fvARB(attribs.tang.gl_index, tang); \ - } \ - } (void)0 - for (i = 0, ltri = em->looptris[0]; i < em->tottri; i++, ltri += 3) { int drawSmooth; @@ -1198,21 +1200,21 @@ static void emDM_drawMappedFacesMat(DerivedMesh *dm, if (vertexCos) glNormal3fv(bmdm->polyNos[BM_elem_index_get(efa)]); else glNormal3fv(efa->no); - PASSATTRIB(ltri[0], ltri[0]->v, 0); + emdm_draw_attrib_vertex_mat(&attribs, bm, ltri[0], ltri[0]->v, 0); if (vertexCos) glVertex3fv(vertexCos[BM_elem_index_get(ltri[0]->v)]); else glVertex3fv(ltri[0]->v->co); - PASSATTRIB(ltri[1], ltri[1]->v, 1); + emdm_draw_attrib_vertex_mat(&attribs, bm, ltri[1], ltri[1]->v, 1); if (vertexCos) glVertex3fv(vertexCos[BM_elem_index_get(ltri[1]->v)]); else glVertex3fv(ltri[1]->v->co); - PASSATTRIB(ltri[2], ltri[2]->v, 2); + emdm_draw_attrib_vertex_mat(&attribs, bm, ltri[2], ltri[2]->v, 2); if (vertexCos) glVertex3fv(vertexCos[BM_elem_index_get(ltri[2]->v)]); else glVertex3fv(ltri[2]->v->co); } else { - PASSATTRIB(ltri[0], ltri[0]->v, 0); + emdm_draw_attrib_vertex_mat(&attribs, bm, ltri[0], ltri[0]->v, 0); if (vertexCos) { glNormal3fv(vertexNos[BM_elem_index_get(ltri[0]->v)]); glVertex3fv(vertexCos[BM_elem_index_get(ltri[0]->v)]); @@ -1222,7 +1224,7 @@ static void emDM_drawMappedFacesMat(DerivedMesh *dm, glVertex3fv(ltri[0]->v->co); } - PASSATTRIB(ltri[1], ltri[1]->v, 1); + emdm_draw_attrib_vertex_mat(&attribs, bm, ltri[1], ltri[1]->v, 1); if (vertexCos) { glNormal3fv(vertexNos[BM_elem_index_get(ltri[1]->v)]); glVertex3fv(vertexCos[BM_elem_index_get(ltri[1]->v)]); @@ -1232,7 +1234,7 @@ static void emDM_drawMappedFacesMat(DerivedMesh *dm, glVertex3fv(ltri[1]->v->co); } - PASSATTRIB(ltri[2], ltri[2]->v, 2); + emdm_draw_attrib_vertex_mat(&attribs, bm, ltri[2], ltri[2]->v, 2); if (vertexCos) { glNormal3fv(vertexNos[BM_elem_index_get(ltri[2]->v)]); glVertex3fv(vertexCos[BM_elem_index_get(ltri[2]->v)]); @@ -1244,7 +1246,6 @@ static void emDM_drawMappedFacesMat(DerivedMesh *dm, } glEnd(); } -#undef PASSATTRIB } static void emDM_getMinMax(DerivedMesh *dm, float min_r[3], float max_r[3]) |