diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2015-11-27 23:16:26 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2015-12-06 21:35:15 +0300 |
commit | 82191b102fba685b0dbb70c1bffd4dafc8c538b6 (patch) | |
tree | 082f5d942a07a780e5307e8d53b2c8e5ccc692af /source | |
parent | 1eed354e530f395c14b290b4b504a1bcc9299fcb (diff) |
OpenGL: pass flag to indicate of drawMappedFaces needs to use normals.
Differential Revision: https://developer.blender.org/D1645
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenkernel/BKE_DerivedMesh.h | 3 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/editderivedmesh.c | 6 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/drawmesh.c | 12 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/drawobject.c | 10 |
4 files changed, 18 insertions, 13 deletions
diff --git a/source/blender/blenkernel/BKE_DerivedMesh.h b/source/blender/blenkernel/BKE_DerivedMesh.h index 2c6e37b9ed8..3eed4b5634b 100644 --- a/source/blender/blenkernel/BKE_DerivedMesh.h +++ b/source/blender/blenkernel/BKE_DerivedMesh.h @@ -151,7 +151,8 @@ typedef enum DMDrawFlag { DM_DRAW_USE_TEXPAINT_UV = (1 << 3), DM_DRAW_SKIP_HIDDEN = (1 << 4), DM_DRAW_SKIP_SELECT = (1 << 5), - DM_DRAW_SELECT_USE_EDITMODE = (1 << 6) + DM_DRAW_SELECT_USE_EDITMODE = (1 << 6), + DM_DRAW_NEED_NORMALS = (1 << 7) } DMDrawFlag; typedef enum DMForeachFlag { diff --git a/source/blender/blenkernel/intern/editderivedmesh.c b/source/blender/blenkernel/intern/editderivedmesh.c index 7fd241eb8e3..b6d009deb2a 100644 --- a/source/blender/blenkernel/intern/editderivedmesh.c +++ b/source/blender/blenkernel/intern/editderivedmesh.c @@ -732,8 +732,7 @@ static void emDM_drawMappedFaces( const int lasttri = tottri - 1; /* compare agasint this a lot */ DMDrawOption draw_option; int i, flush; - const int skip_normals = !glIsEnabled(GL_LIGHTING); /* could be passed as an arg */ - + const int skip_normals = !(flag & DM_DRAW_NEED_NORMALS); const float (*lnors)[3] = dm->getLoopDataArray(dm, CD_NORMAL); MLoopCol *lcol[3] = {NULL} /* , dummylcol = {0} */; unsigned char(*color_vert_array)[4] = em->derivedVertColor; @@ -755,7 +754,8 @@ static void emDM_drawMappedFaces( } if (has_vcol_preview || has_fcol_preview) { flag |= DM_DRAW_ALWAYS_SMOOTH; - glDisable(GL_LIGHTING); /* grr */ + /* weak, this logic should really be moved higher up */ + setMaterial = NULL; } if (bmdm->vertexCos) { diff --git a/source/blender/editors/space_view3d/drawmesh.c b/source/blender/editors/space_view3d/drawmesh.c index afc48d2ff5e..cfffeb01b06 100644 --- a/source/blender/editors/space_view3d/drawmesh.c +++ b/source/blender/editors/space_view3d/drawmesh.c @@ -1235,13 +1235,14 @@ void draw_mesh_paint_weight_faces(DerivedMesh *dm, const bool use_light, void *facemask_cb, void *user_data) { DMSetMaterial setMaterial = GPU_object_materials_check() ? GPU_object_material_bind : NULL; + int flags = DM_DRAW_USE_COLORS; if (use_light) { draw_mesh_paint_light_begin(); + flags |= DM_DRAW_NEED_NORMALS; } - dm->drawMappedFaces(dm, (DMSetDrawOptions)facemask_cb, setMaterial, NULL, user_data, - DM_DRAW_USE_COLORS); + dm->drawMappedFaces(dm, (DMSetDrawOptions)facemask_cb, setMaterial, NULL, user_data, flags); if (use_light) { draw_mesh_paint_light_end(); @@ -1253,17 +1254,20 @@ void draw_mesh_paint_vcolor_faces(DerivedMesh *dm, const bool use_light, const Mesh *me) { DMSetMaterial setMaterial = GPU_object_materials_check() ? GPU_object_material_bind : NULL; + int flags = 0; if (use_light) { draw_mesh_paint_light_begin(); + flags |= DM_DRAW_NEED_NORMALS; } if (me->mloopcol) { - dm->drawMappedFaces(dm, facemask_cb, setMaterial, NULL, user_data, DM_DRAW_USE_COLORS); + dm->drawMappedFaces(dm, facemask_cb, setMaterial, NULL, user_data, + DM_DRAW_USE_COLORS | flags); } else { glColor3f(1.0f, 1.0f, 1.0f); - dm->drawMappedFaces(dm, facemask_cb, setMaterial, NULL, user_data, 0); + dm->drawMappedFaces(dm, facemask_cb, setMaterial, NULL, user_data, flags); } if (use_light) { diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 9ab93b18cc1..07481c25939 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -3797,7 +3797,7 @@ static void draw_em_fancy(Scene *scene, ARegion *ar, View3D *v3d, /* use the cageDM since it always overlaps the editmesh faces */ glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); cageDM->drawMappedFaces(cageDM, draw_em_fancy__setFaceOpts, - GPU_object_material_bind, NULL, me->edit_btmesh, DM_DRAW_SKIP_HIDDEN); + GPU_object_material_bind, NULL, me->edit_btmesh, DM_DRAW_SKIP_HIDDEN | DM_DRAW_NEED_NORMALS); glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); } else if (check_object_draw_texture(scene, v3d, dt)) { @@ -3821,7 +3821,7 @@ static void draw_em_fancy(Scene *scene, ARegion *ar, View3D *v3d, glEnable(GL_LIGHTING); glFrontFace((ob->transflag & OB_NEG_SCALE) ? GL_CW : GL_CCW); - finalDM->drawMappedFaces(finalDM, draw_em_fancy__setFaceOpts, GPU_object_material_bind, NULL, me->edit_btmesh, DM_DRAW_SKIP_HIDDEN); + finalDM->drawMappedFaces(finalDM, draw_em_fancy__setFaceOpts, GPU_object_material_bind, NULL, me->edit_btmesh, DM_DRAW_SKIP_HIDDEN | DM_DRAW_NEED_NORMALS); glFrontFace(GL_CCW); glDisable(GL_LIGHTING); @@ -4183,7 +4183,7 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D glEnable(GL_LIGHTING); glEnable(GL_COLOR_MATERIAL); - dm->drawMappedFaces(dm, NULL, NULL, NULL, NULL, DM_DRAW_USE_COLORS); + dm->drawMappedFaces(dm, NULL, NULL, NULL, NULL, DM_DRAW_USE_COLORS | DM_DRAW_NEED_NORMALS); glDisable(GL_COLOR_MATERIAL); glDisable(GL_LIGHTING); @@ -8680,8 +8680,8 @@ static void draw_object_mesh_instance(Scene *scene, View3D *v3d, RegionView3D *r GPU_end_object_materials(); } else if (edm) - edm->drawMappedFaces(edm, NULL, GPU_object_material_bind, NULL, NULL, 0); - + edm->drawMappedFaces(edm, NULL, GPU_object_material_bind, NULL, NULL, DM_DRAW_NEED_NORMALS); + glDisable(GL_LIGHTING); } |