diff options
-rw-r--r-- | source/blender/blenkernel/BKE_DerivedMesh.h | 11 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/cdderivedmesh.c | 13 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/editderivedmesh.c | 13 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/subsurf_ccg.c | 10 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/drawmesh.c | 13 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/drawobject.c | 32 |
6 files changed, 48 insertions, 44 deletions
diff --git a/source/blender/blenkernel/BKE_DerivedMesh.h b/source/blender/blenkernel/BKE_DerivedMesh.h index 3fb245ff0fa..6b49235a0b7 100644 --- a/source/blender/blenkernel/BKE_DerivedMesh.h +++ b/source/blender/blenkernel/BKE_DerivedMesh.h @@ -130,7 +130,11 @@ typedef int (*DMCompareDrawOptions)(void *userData, int cur_index, int next_inde typedef void (*DMSetDrawInterpOptions)(void *userData, int index, float t); typedef int (*DMSetDrawOptions)(void *userData, int index); typedef int (*DMSetDrawOptionsTex)(struct MTFace *tface, int has_vcol, int matnr); -typedef int (*DMSetDrawOptionsShading)(void *userData, int index, int *drawSmooth_r); + +typedef enum DMDrawFlag { + DM_DRAW_USE_COLORS = 1, + DM_DRAW_ALWAYS_SMOOTH = 2 +} DMDrawFlag; typedef struct DerivedMesh DerivedMesh; struct DerivedMesh { @@ -346,10 +350,11 @@ struct DerivedMesh { * smooth shaded. */ void (*drawMappedFaces)(DerivedMesh *dm, - DMSetDrawOptionsShading setDrawOptions, + DMSetDrawOptions setDrawOptions, DMSetMaterial setMaterial, DMCompareDrawOptions compareDrawOptions, - void *userData, int useColors); + void *userData, + DMDrawFlag flag); /* Draw mapped faces using MTFace * o Drawing options too complicated to enumerate, look at code. diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c index 6b3b11fe0b9..e2b61d81967 100644 --- a/source/blender/blenkernel/intern/cdderivedmesh.c +++ b/source/blender/blenkernel/intern/cdderivedmesh.c @@ -796,16 +796,17 @@ static void cdDM_drawFacesTex(DerivedMesh *dm, } static void cdDM_drawMappedFaces(DerivedMesh *dm, - DMSetDrawOptionsShading setDrawOptions, + DMSetDrawOptions setDrawOptions, DMSetMaterial setMaterial, DMCompareDrawOptions compareDrawOptions, - void *userData, int useColors) + void *userData, DMDrawFlag flag) { CDDerivedMesh *cddm = (CDDerivedMesh*) dm; MVert *mv = cddm->mvert; MFace *mf = cddm->mface; MCol *mc; float *nors= DM_get_tessface_data_layer(dm, CD_NORMAL); + int useColors = flag & DM_DRAW_USE_COLORS; int i, orig, *index = DM_get_tessface_data_layer(dm, CD_ORIGINDEX); mc = DM_get_tessface_data_layer(dm, CD_ID_MCOL); @@ -821,7 +822,7 @@ static void cdDM_drawMappedFaces(DerivedMesh *dm, if( GPU_buffer_legacy(dm) || G.f & G_BACKBUFSEL) { DEBUG_VBO( "Using legacy code. cdDM_drawMappedFaces\n" ); for(i = 0; i < dm->numTessFaceData; i++, mf++) { - int drawSmooth = (mf->flag & ME_SMOOTH); + int drawSmooth = (flag & DM_DRAW_ALWAYS_SMOOTH) ? 1 : (mf->flag & ME_SMOOTH); int draw= 1; orig= (index==NULL) ? i : *index++; @@ -829,7 +830,7 @@ static void cdDM_drawMappedFaces(DerivedMesh *dm, if(orig == ORIGINDEX_NONE) draw= setMaterial(mf->mat_nr + 1, NULL); else if (setDrawOptions != NULL) - draw= setDrawOptions(userData, orig, &drawSmooth); + draw= setDrawOptions(userData, orig); if(draw) { unsigned char *cp = NULL; @@ -914,7 +915,7 @@ static void cdDM_drawMappedFaces(DerivedMesh *dm, //int actualFace = dm->drawObject->triangle_to_mface[i]; int actualFace = next_actualFace; MFace *mface= mf + actualFace; - int drawSmooth= (mface->flag & ME_SMOOTH); + /*int drawSmooth= (flag & DM_DRAW_ALWAYS_SMOOTH) ? 1 : (mface->flag & ME_SMOOTH);*/ /* UNUSED */ int draw = 1; int flush = 0; @@ -926,7 +927,7 @@ static void cdDM_drawMappedFaces(DerivedMesh *dm, if(orig == ORIGINDEX_NONE) draw= setMaterial(mface->mat_nr + 1, NULL); else if (setDrawOptions != NULL) - draw= setDrawOptions(userData, orig, &drawSmooth); + draw= setDrawOptions(userData, orig); /* Goal is to draw as long of a contiguous triangle array as possible, so draw when we hit either an diff --git a/source/blender/blenkernel/intern/editderivedmesh.c b/source/blender/blenkernel/intern/editderivedmesh.c index ae52322a0c5..06712d38890 100644 --- a/source/blender/blenkernel/intern/editderivedmesh.c +++ b/source/blender/blenkernel/intern/editderivedmesh.c @@ -579,10 +579,11 @@ static void emDM_foreachMappedFaceCenter( static void emDM_drawMappedFaces( DerivedMesh *dm, - DMSetDrawOptionsShading setDrawOptions, + DMSetDrawOptions setDrawOptions, DMSetMaterial setMaterial, DMCompareDrawOptions compareDrawOptions, - void *userData, int UNUSED(useColors)) + void *userData, + DMDrawFlag flag) { EditDerivedBMesh *bmdm= (EditDerivedBMesh*) dm; BMFace *efa; @@ -615,9 +616,9 @@ static void emDM_drawMappedFaces( int drawSmooth; efa = l[0]->f; - drawSmooth= BM_elem_flag_test(efa, BM_ELEM_SMOOTH); + drawSmooth= (flag & DM_DRAW_ALWAYS_SMOOTH) ? 1 : BM_elem_flag_test(efa, BM_ELEM_SMOOTH); - draw = setDrawOptions==NULL ? 1 : setDrawOptions(userData, BM_elem_index_get(efa), &drawSmooth); + draw = setDrawOptions==NULL ? 1 : setDrawOptions(userData, BM_elem_index_get(efa)); if (draw) { const GLenum poly_type= GL_TRIANGLES; /* BMESH NOTE, this is odd but keep it for now to match trunk */ if (draw==2) { /* enabled with stipple */ @@ -687,9 +688,9 @@ static void emDM_drawMappedFaces( int drawSmooth; efa = l[0]->f; - drawSmooth= BM_elem_flag_test(efa, BM_ELEM_SMOOTH); + drawSmooth= (flag & DM_DRAW_ALWAYS_SMOOTH) ? 1 : BM_elem_flag_test(efa, BM_ELEM_SMOOTH); - draw = setDrawOptions==NULL ? 1 : setDrawOptions(userData, BM_elem_index_get(efa), &drawSmooth); + draw = setDrawOptions==NULL ? 1 : setDrawOptions(userData, BM_elem_index_get(efa)); if (draw) { const GLenum poly_type= GL_TRIANGLES; /* BMESH NOTE, this is odd but keep it for now to match trunk */ if (draw==2) { /* enabled with stipple */ diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c index 8edd6362d50..75636ab5c23 100644 --- a/source/blender/blenkernel/intern/subsurf_ccg.c +++ b/source/blender/blenkernel/intern/subsurf_ccg.c @@ -2111,16 +2111,17 @@ static void ccgDM_drawUVEdges(DerivedMesh *dm) } static void ccgDM_drawMappedFaces(DerivedMesh *dm, - DMSetDrawOptionsShading setDrawOptions, + DMSetDrawOptions setDrawOptions, DMSetMaterial setMaterial, DMCompareDrawOptions compareDrawOptions, - void *userData, int useColors) + void *userData, DMDrawFlag flag) { CCGDerivedMesh *ccgdm = (CCGDerivedMesh*) dm; CCGSubSurf *ss = ccgdm->ss; MCol *mcol= NULL; int i, gridSize = ccgSubSurf_getGridSize(ss); DMFlagMat *faceFlags = ccgdm->faceFlags; + int useColors = flag & DM_DRAW_USE_COLORS; int gridFaces = gridSize - 1, totface; /* currently unused -- each original face is handled separately */ @@ -2142,7 +2143,8 @@ static void ccgDM_drawMappedFaces(DerivedMesh *dm, origIndex = GET_INT_FROM_POINTER(ccgSubSurf_getFaceFaceHandle(f)); - if(faceFlags) drawSmooth = (faceFlags[origIndex].flag & ME_SMOOTH); + if(flag & DM_DRAW_ALWAYS_SMOOTH) drawSmooth = 1; + else if(faceFlags) drawSmooth = (faceFlags[origIndex].flag & ME_SMOOTH); else drawSmooth = 1; if(mcol) { @@ -2156,7 +2158,7 @@ static void ccgDM_drawMappedFaces(DerivedMesh *dm, if(index == ORIGINDEX_NONE) draw= setMaterial(faceFlags ? faceFlags[origIndex].mat_nr + 1: 1, NULL); /* XXX, no faceFlags no material */ else if (setDrawOptions) - draw= setDrawOptions(userData, index, &drawSmooth); + draw= setDrawOptions(userData, index); if (draw) { if (draw==2) { diff --git a/source/blender/editors/space_view3d/drawmesh.c b/source/blender/editors/space_view3d/drawmesh.c index 9ad7a196113..fabd3f92573 100644 --- a/source/blender/editors/space_view3d/drawmesh.c +++ b/source/blender/editors/space_view3d/drawmesh.c @@ -576,7 +576,7 @@ static int draw_em_tf_mapped__set_draw(void *userData, int index) } } -static int wpaint__setSolidDrawOptions_material(void *userData, int index, int *drawSmooth_r) +static int wpaint__setSolidDrawOptions_material(void *userData, int index) { Mesh *me = (Mesh*)userData; @@ -587,17 +587,15 @@ static int wpaint__setSolidDrawOptions_material(void *userData, int index, int * } } - *drawSmooth_r = 1; return 1; } /* when face select is on, use face hidden flag */ -static int wpaint__setSolidDrawOptions_facemask(void *userData, int index, int *drawSmooth_r) +static int wpaint__setSolidDrawOptions_facemask(void *userData, int index) { Mesh *me = (Mesh*)userData; MPoly *mp = &me->mpoly[index]; if (mp->flag & ME_HIDE) return 0; - *drawSmooth_r = 1; return 1; } @@ -783,7 +781,8 @@ void draw_mesh_textured_old(Scene *scene, View3D *v3d, RegionView3D *rv3d, Objec } else if (draw_flags & DRAW_FACE_SELECT) { if (ob->mode & OB_MODE_WEIGHT_PAINT) - dm->drawMappedFaces(dm, wpaint__setSolidDrawOptions_facemask, GPU_enable_material, NULL, me, 1); + dm->drawMappedFaces(dm, wpaint__setSolidDrawOptions_facemask, GPU_enable_material, NULL, me, + DM_DRAW_USE_COLORS | DM_DRAW_ALWAYS_SMOOTH); else dm->drawMappedFacesTex(dm, me->mpoly ? draw_tface_mapped__set_draw : NULL, NULL, me); } @@ -940,10 +939,8 @@ void draw_mesh_textured(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *o if (ob->mode & OB_MODE_WEIGHT_PAINT) { /* weight paint mode exception */ - int useColors= 1; - dm->drawMappedFaces(dm, wpaint__setSolidDrawOptions_material, - GPU_enable_material, NULL, ob->data, useColors); + GPU_enable_material, NULL, ob->data, DM_DRAW_USE_COLORS | DM_DRAW_ALWAYS_SMOOTH); } else { Mesh *me= ob->data; diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 77a686e81b7..e56b4216583 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -2482,7 +2482,7 @@ static void draw_dm_edges_sharp(BMEditMesh *em, DerivedMesh *dm) /* Draw faces with color set based on selection * return 2 for the active face so it renders with stipple enabled */ -static int draw_dm_faces_sel__setDrawOptions(void *userData, int index, int *UNUSED(drawSmooth_r)) +static int draw_dm_faces_sel__setDrawOptions(void *userData, int index) { drawDMFacesSel_userData * data = userData; BMFace *efa = EDBM_get_face_for_index(data->em, index); @@ -2965,7 +2965,7 @@ static void draw_em_indices(BMEditMesh *em) } } -static int draw_em_fancy__setFaceOpts(void *userData, int index, int *UNUSED(drawSmooth_r)) +static int draw_em_fancy__setFaceOpts(void *userData, int index) { BMFace *efa = EDBM_get_face_for_index(userData, index); @@ -3189,12 +3189,6 @@ static void draw_mesh_object_outline(View3D *v3d, Object *ob, DerivedMesh *dm) } } -static int wpaint__setSolidDrawOptions(void *UNUSED(userData), int UNUSED(index), int *drawSmooth_r) -{ - *drawSmooth_r = 1; - return 1; -} - static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D *rv3d, Base *base, int dt, int flag) { Object *ob= base->object; @@ -3283,7 +3277,8 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D /* weight paint in solid mode, special case. focus on making the weights clear * rather than the shading, this is also forced in wire view */ GPU_enable_material(0, NULL); - dm->drawMappedFaces(dm, wpaint__setSolidDrawOptions, GPU_enable_material, NULL, me->mpoly, 1); + dm->drawMappedFaces(dm, NULL, GPU_enable_material, NULL, me->mpoly, + DM_DRAW_USE_COLORS | DM_DRAW_ALWAYS_SMOOTH); bglPolygonOffset(rv3d->dist, 1.0); glDepthMask(0); // disable write in zbuffer, selected edge wires show better @@ -3336,7 +3331,7 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D glEnable(GL_LIGHTING); glEnable(GL_COLOR_MATERIAL); - dm->drawMappedFaces(dm, NULL, GPU_enable_material, NULL, NULL, 1); + dm->drawMappedFaces(dm, NULL, GPU_enable_material, NULL, NULL, DM_DRAW_USE_COLORS); glDisable(GL_COLOR_MATERIAL); glDisable(GL_LIGHTING); @@ -3411,7 +3406,8 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D glEnable(GL_LIGHTING); glEnable(GL_COLOR_MATERIAL); - dm->drawMappedFaces(dm, wpaint__setSolidDrawOptions, GPU_enable_material, NULL, me->mpoly, 1); + dm->drawMappedFaces(dm, NULL, GPU_enable_material, NULL, me->mpoly, + DM_DRAW_USE_COLORS | DM_DRAW_ALWAYS_SMOOTH); glDisable(GL_COLOR_MATERIAL); glDisable(GL_LIGHTING); @@ -3419,10 +3415,12 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D } else if (ob->mode & (OB_MODE_VERTEX_PAINT|OB_MODE_TEXTURE_PAINT)) { if (me->mloopcol) - dm->drawMappedFaces(dm, wpaint__setSolidDrawOptions, GPU_enable_material, NULL, NULL, 1); + dm->drawMappedFaces(dm, NULL, GPU_enable_material, NULL, NULL, + DM_DRAW_USE_COLORS | DM_DRAW_ALWAYS_SMOOTH); else { glColor3f(1.0f, 1.0f, 1.0f); - dm->drawMappedFaces(dm, wpaint__setSolidDrawOptions, GPU_enable_material, NULL, NULL, 0); + dm->drawMappedFaces(dm, NULL, GPU_enable_material, NULL, NULL, + DM_DRAW_ALWAYS_SMOOTH); } } } @@ -7147,7 +7145,7 @@ static void bbs_mesh_wire(BMEditMesh *em, DerivedMesh *dm, int offset) dm->drawMappedEdges(dm, bbs_mesh_wire__setDrawOptions, ptrs); } -static int bbs_mesh_solid__setSolidDrawOptions(void *userData, int index, int *UNUSED(drawSmooth_r)) +static int bbs_mesh_solid__setSolidDrawOptions(void *userData, int index) { BMFace *efa = EDBM_get_face_for_index(((void**)userData)[0], index); @@ -7198,13 +7196,13 @@ static void bbs_mesh_solid_EM(BMEditMesh *em, Scene *scene, View3D *v3d, } } -static int bbs_mesh_solid__setDrawOpts(void *UNUSED(userData), int index, int *UNUSED(drawSmooth_r)) +static int bbs_mesh_solid__setDrawOpts(void *UNUSED(userData), int index) { WM_set_framebuffer_index_color(index+1); return 1; } -static int bbs_mesh_solid_hide__setDrawOpts(void *userData, int index, int *UNUSED(drawSmooth_r)) +static int bbs_mesh_solid_hide__setDrawOpts(void *userData, int index) { Mesh *me = userData; @@ -7218,7 +7216,7 @@ static int bbs_mesh_solid_hide__setDrawOpts(void *userData, int index, int *UNUS } // must have called WM_set_framebuffer_index_color beforehand -static int bbs_mesh_solid_hide2__setDrawOpts(void *userData, int index, int *UNUSED(drawSmooth_r)) +static int bbs_mesh_solid_hide2__setDrawOpts(void *userData, int index) { Mesh *me = userData; |