diff options
Diffstat (limited to 'source/blender/editors/space_view3d/drawobject.c')
-rw-r--r-- | source/blender/editors/space_view3d/drawobject.c | 188 |
1 files changed, 54 insertions, 134 deletions
diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index c697b22d57b..e03f81742b7 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -87,8 +87,9 @@ #include "BIF_glutil.h" #include "GPU_draw.h" -#include "GPU_extensions.h" #include "GPU_select.h" +#include "GPU_basic_shader.h" +#include "GPU_shader.h" #include "ED_mesh.h" #include "ED_particle.h" @@ -289,8 +290,6 @@ static bool check_ob_drawface_dot(Scene *sce, View3D *vd, char dt) bool draw_glsl_material(Scene *scene, Object *ob, View3D *v3d, const char dt) { - if (!GPU_glsl_support()) - return false; if (G.f & G_PICKSEL) return false; if (!check_object_draw_texture(scene, v3d, dt)) @@ -1694,8 +1693,6 @@ static void draw_viewport_object_reconstruction(Scene *scene, Base *base, View3D v3d->bundle_size / 0.05f / camera_size[2]); if (v3d->drawtype == OB_WIRE) { - glDisable(GL_LIGHTING); - if ((dflag & DRAW_CONSTCOLOR) == 0) { if (selected && (track->flag & TRACK_CUSTOMCOLOR) == 0) { glColor3ubv(ob_wire_col); @@ -1706,8 +1703,6 @@ static void draw_viewport_object_reconstruction(Scene *scene, Base *base, View3D } drawaxes(0.05f, v3d->bundle_drawtype); - - glEnable(GL_LIGHTING); } else if (v3d->drawtype > OB_WIRE) { if (v3d->bundle_drawtype == OB_EMPTY_SPHERE) { @@ -1718,13 +1713,11 @@ static void draw_viewport_object_reconstruction(Scene *scene, Base *base, View3D } glLineWidth(2.0f); - glDisable(GL_LIGHTING); glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); draw_bundle_sphere(); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - glEnable(GL_LIGHTING); glLineWidth(1.0f); } @@ -1736,8 +1729,6 @@ static void draw_viewport_object_reconstruction(Scene *scene, Base *base, View3D draw_bundle_sphere(); } else { - glDisable(GL_LIGHTING); - if ((dflag & DRAW_CONSTCOLOR) == 0) { if (selected) { glColor3ubv(ob_wire_col); @@ -1749,8 +1740,6 @@ static void draw_viewport_object_reconstruction(Scene *scene, Base *base, View3D } drawaxes(0.05f, v3d->bundle_drawtype); - - glEnable(GL_LIGHTING); } } @@ -1778,7 +1767,6 @@ static void draw_viewport_object_reconstruction(Scene *scene, Base *base, View3D MovieReconstructedCamera *camera = reconstruction->cameras; int a = 0; - glDisable(GL_LIGHTING); UI_ThemeColor(TH_CAMERA_PATH); glLineWidth(2.0f); @@ -1789,7 +1777,6 @@ static void draw_viewport_object_reconstruction(Scene *scene, Base *base, View3D glEnd(); glLineWidth(1.0f); - glEnable(GL_LIGHTING); } } } @@ -1813,9 +1800,9 @@ static void draw_viewport_reconstruction(Scene *scene, Base *base, View3D *v3d, if (v3d->flag2 & V3D_RENDER_OVERRIDE) return; - glEnable(GL_LIGHTING); - glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE); - glEnable(GL_COLOR_MATERIAL); + GPU_basic_shader_colors(NULL, NULL, 0, 1.0f); + GPU_basic_shader_bind(GPU_SHADER_LIGHTING | GPU_SHADER_USE_COLOR); + glShadeModel(GL_SMOOTH); tracking_object = tracking->objects.first; @@ -1828,8 +1815,7 @@ static void draw_viewport_reconstruction(Scene *scene, Base *base, View3D *v3d, /* restore */ glShadeModel(GL_FLAT); - glDisable(GL_COLOR_MATERIAL); - glDisable(GL_LIGHTING); + GPU_basic_shader_bind(GPU_SHADER_USE_COLOR); if ((dflag & DRAW_CONSTCOLOR) == 0) { glColor3ubv(ob_wire_col); @@ -2137,7 +2123,6 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base BKE_camera_view_frame_ex(scene, cam, cam->drawsize, is_view, scale, asp, shift, &drawsize, vec); - glDisable(GL_LIGHTING); glDisable(GL_CULL_FACE); /* camera frame */ @@ -3799,16 +3784,16 @@ 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_enable_material, 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)) { if (draw_glsl_material(scene, ob, v3d, dt)) { glFrontFace((ob->transflag & OB_NEG_SCALE) ? GL_CW : GL_CCW); - finalDM->drawMappedFacesGLSL(finalDM, GPU_enable_material, + finalDM->drawMappedFacesGLSL(finalDM, GPU_object_material_bind, draw_em_fancy__setGLSLFaceOpts, em); - GPU_disable_material(); + GPU_object_material_unbind(); glFrontFace(GL_CCW); } @@ -3817,17 +3802,12 @@ static void draw_em_fancy(Scene *scene, ARegion *ar, View3D *v3d, } } else { - /* 3 floats for position, - * 3 for normal and times two because the faces may actually be quads instead of triangles */ - glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, (me->flag & ME_TWOSIDED) ? GL_TRUE : GL_FALSE); - - glEnable(GL_LIGHTING); glFrontFace((ob->transflag & OB_NEG_SCALE) ? GL_CW : GL_CCW); - finalDM->drawMappedFaces(finalDM, draw_em_fancy__setFaceOpts, GPU_enable_material, 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); - glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE); + + GPU_object_material_unbind(); } /* Setup for drawing wire over, disable zbuffer @@ -3987,7 +3967,7 @@ static void draw_em_fancy(Scene *scene, ARegion *ar, View3D *v3d, if (dt > OB_WIRE) { glDepthMask(1); ED_view3d_polygon_offset(rv3d, 0.0); - GPU_disable_material(); + GPU_object_material_unbind(); } #if 0 /* currently not needed */ else if (use_occlude_wire) { @@ -4006,13 +3986,13 @@ static void draw_mesh_object_outline(View3D *v3d, Object *ob, DerivedMesh *dm) glLineWidth(UI_GetThemeValuef(TH_OUTLINE_WIDTH) * 2.0f); glDepthMask(0); - /* if transparent, we cannot draw the edges for solid select... edges have no material info. - * drawFacesSolid() doesn't draw the transparent faces */ + /* if transparent, we cannot draw the edges for solid select... edges + * have no material info. GPU_object_material_visible will skip the + * transparent faces */ if (ob->dtx & OB_DRAWTRANSP) { glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - dm->drawFacesSolid(dm, NULL, 0, GPU_enable_material); + dm->drawFacesSolid(dm, NULL, 0, GPU_object_material_visible); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - GPU_disable_material(); } else { dm->drawEdges(dm, 0, 1); @@ -4122,18 +4102,18 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D } } - GPU_enable_material(1, &gattribs); + GPU_object_material_bind(1, &gattribs); dm->drawFacesSolid(dm, fpl, fast, NULL); draw_loose = false; } else - dm->drawFacesGLSL(dm, GPU_enable_material); + dm->drawFacesGLSL(dm, GPU_object_material_bind); #if 0 /* XXX */ if (BKE_bproperty_object_get(ob, "Text")) draw_mesh_text(ob, 1); #endif - GPU_disable_material(); + GPU_object_material_unbind(); glFrontFace(GL_CCW); @@ -4157,10 +4137,11 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D if (draw_flags & DRAW_MODIFIERS_PREVIEW) { /* for object selection draws no shade */ if (dflag & (DRAW_PICKING | DRAW_CONSTCOLOR)) { - dm->drawFacesSolid(dm, NULL, 0, GPU_enable_material); + dm->drawFacesSolid(dm, NULL, 0, GPU_object_material_bind); + GPU_object_material_unbind(); } else { - const float spec[4] = {0.47f, 0.47f, 0.47f, 0.47f}; + const float specular[3] = {0.47f, 0.47f, 0.47f}; /* draw outline */ if ((v3d->flag & V3D_SELECT_OUTLINE) && @@ -4175,21 +4156,13 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D /* materials arent compatible with vertex colors */ GPU_end_object_materials(); - GPU_enable_material(0, NULL); - - /* set default spec */ - glColorMaterial(GL_FRONT_AND_BACK, GL_SPECULAR); - glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, spec); - /* diffuse */ - glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE); - glEnable(GL_LIGHTING); - glEnable(GL_COLOR_MATERIAL); + /* set default specular */ + GPU_basic_shader_colors(NULL, specular, 35, 1.0f); + GPU_basic_shader_bind(GPU_SHADER_LIGHTING | GPU_SHADER_USE_COLOR); - dm->drawMappedFaces(dm, NULL, NULL, NULL, NULL, DM_DRAW_USE_COLORS); - glDisable(GL_COLOR_MATERIAL); - glDisable(GL_LIGHTING); + dm->drawMappedFaces(dm, NULL, NULL, NULL, NULL, DM_DRAW_USE_COLORS | DM_DRAW_NEED_NORMALS); - GPU_disable_material(); + GPU_basic_shader_bind(GPU_SHADER_USE_COLOR); } } else { @@ -4204,9 +4177,6 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D draw_mesh_object_outline(v3d, ob, dm); } - glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, (me->flag & ME_TWOSIDED) ? GL_TRUE : GL_FALSE); - - glEnable(GL_LIGHTING); glFrontFace((ob->transflag & OB_NEG_SCALE) ? GL_CW : GL_CCW); if (ob->sculpt && (p = BKE_paint_get_active(scene))) { @@ -4222,17 +4192,14 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D } } - dm->drawFacesSolid(dm, fpl, fast, GPU_enable_material); + dm->drawFacesSolid(dm, fpl, fast, GPU_object_material_bind); } else - dm->drawFacesSolid(dm, NULL, 0, GPU_enable_material); - - GPU_disable_material(); + dm->drawFacesSolid(dm, NULL, 0, GPU_object_material_bind); glFrontFace(GL_CCW); - glDisable(GL_LIGHTING); - glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE); + GPU_object_material_unbind(); if (!ob->sculpt && (v3d->flag2 & V3D_RENDER_OVERRIDE) == 0) { if ((dflag & DRAW_CONSTCOLOR) == 0) { @@ -4536,7 +4503,6 @@ static void drawDispListsolid(ListBase *lb, Object *ob, const short dflag, if (lb == NULL) return; - glEnable(GL_LIGHTING); glEnableClientState(GL_VERTEX_ARRAY); if (ob->type == OB_MBALL) { /* mball always smooth shaded */ @@ -4553,8 +4519,6 @@ static void drawDispListsolid(ListBase *lb, Object *ob, const short dflag, if (ob->type == OB_SURF) { int nr; - glDisable(GL_LIGHTING); - if ((dflag & DRAW_CONSTCOLOR) == 0) glColor3ubv(ob_wire_col); @@ -4565,16 +4529,12 @@ static void drawDispListsolid(ListBase *lb, Object *ob, const short dflag, for (nr = dl->nr; nr; nr--, data += 3) glVertex3fv(data); glEnd(); - - glEnable(GL_LIGHTING); } break; case DL_POLY: if (ob->type == OB_SURF) { int nr; - glDisable(GL_LIGHTING); - /* for some reason glDrawArrays crashes here in half of the platforms (not osx) */ //glVertexPointer(3, GL_FLOAT, 0, dl->verts); //glDrawArrays(GL_LINE_LOOP, 0, dl->nr); @@ -4583,14 +4543,12 @@ static void drawDispListsolid(ListBase *lb, Object *ob, const short dflag, for (nr = dl->nr; nr; nr--, data += 3) glVertex3fv(data); glEnd(); - - glEnable(GL_LIGHTING); } break; case DL_SURF: if (dl->index) { - GPU_enable_material(dl->col + 1, (use_glsl) ? &gattribs : NULL); + GPU_object_material_bind(dl->col + 1, (use_glsl) ? &gattribs : NULL); if (dl->rt & CU_SMOOTH) glShadeModel(GL_SMOOTH); else glShadeModel(GL_FLAT); @@ -4604,7 +4562,7 @@ static void drawDispListsolid(ListBase *lb, Object *ob, const short dflag, break; case DL_INDEX3: - GPU_enable_material(dl->col + 1, (use_glsl) ? &gattribs : NULL); + GPU_object_material_bind(dl->col + 1, (use_glsl) ? &gattribs : NULL); glVertexPointer(3, GL_FLOAT, 0, dl->verts); @@ -4624,7 +4582,7 @@ static void drawDispListsolid(ListBase *lb, Object *ob, const short dflag, break; case DL_INDEX4: - GPU_enable_material(dl->col + 1, (use_glsl) ? &gattribs : NULL); + GPU_object_material_bind(dl->col + 1, (use_glsl) ? &gattribs : NULL); glEnableClientState(GL_NORMAL_ARRAY); glVertexPointer(3, GL_FLOAT, 0, dl->verts); @@ -4639,8 +4597,9 @@ static void drawDispListsolid(ListBase *lb, Object *ob, const short dflag, glDisableClientState(GL_VERTEX_ARRAY); glShadeModel(GL_FLAT); - glDisable(GL_LIGHTING); glFrontFace(GL_CCW); + + GPU_object_material_unbind(); } static void drawCurveDMWired(Object *ob) @@ -4667,13 +4626,10 @@ static bool drawCurveDerivedMesh(Scene *scene, View3D *v3d, RegionView3D *rv3d, int glsl = draw_glsl_material(scene, ob, v3d, dt); GPU_begin_object_materials(v3d, rv3d, scene, ob, glsl, NULL); - if (!glsl) { - glEnable(GL_LIGHTING); - dm->drawFacesSolid(dm, NULL, 0, GPU_enable_material); - glDisable(GL_LIGHTING); - } + if (!glsl) + dm->drawFacesSolid(dm, NULL, 0, GPU_object_material_bind); else - dm->drawFacesGLSL(dm, GPU_enable_material); + dm->drawFacesGLSL(dm, GPU_object_material_bind); GPU_end_object_materials(); } @@ -5505,19 +5461,10 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv glEnableClientState(GL_COLOR_ARRAY); } - glEnable(GL_LIGHTING); - glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE); - glEnable(GL_COLOR_MATERIAL); - } -#if 0 - else { - glDisableClientState(GL_NORMAL_ARRAY); - - glDisable(GL_COLOR_MATERIAL); - glDisable(GL_LIGHTING); - UI_ThemeColor(TH_WIRE); + // XXX test + GPU_basic_shader_colors(NULL, NULL, 0.0f, 1.0f); + GPU_basic_shader_bind(GPU_SHADER_LIGHTING | GPU_SHADER_USE_COLOR); } -#endif if (totchild && (part->draw & PART_DRAW_PARENT) == 0) totpart = 0; @@ -5548,8 +5495,6 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv if (part->draw & PART_DRAW_GUIDE_HAIRS) { DerivedMesh *hair_dm = psys->hair_out_dm; - glDisable(GL_LIGHTING); - glDisable(GL_COLOR_MATERIAL); glDisableClientState(GL_NORMAL_ARRAY); glDisableClientState(GL_COLOR_ARRAY); @@ -5593,8 +5538,6 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv glEnd(); } - glEnable(GL_LIGHTING); - glEnable(GL_COLOR_MATERIAL); glEnableClientState(GL_NORMAL_ARRAY); if ((dflag & DRAW_CONSTCOLOR) == 0) if (part->draw_col == PART_DRAW_COL_MAT) @@ -5609,8 +5552,6 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv int *res = clmd->hair_grid_res; int i; - glDisable(GL_LIGHTING); - glDisable(GL_COLOR_MATERIAL); glDisableClientState(GL_NORMAL_ARRAY); glDisableClientState(GL_COLOR_ARRAY); @@ -5665,8 +5606,6 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv glEnd(); glDisable(GL_BLEND); - glEnable(GL_LIGHTING); - glEnable(GL_COLOR_MATERIAL); glEnableClientState(GL_NORMAL_ARRAY); if ((dflag & DRAW_CONSTCOLOR) == 0) if (part->draw_col == PART_DRAW_COL_MAT) @@ -5697,7 +5636,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv if (1) { //ob_dt > OB_WIRE) { if (part->draw_col == PART_DRAW_COL_MAT) glDisableClientState(GL_COLOR_ARRAY); - glDisable(GL_COLOR_MATERIAL); + GPU_basic_shader_bind(GPU_SHADER_USE_COLOR); } if (cdata2) { @@ -5758,11 +5697,8 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv if (pdd->ndata && ob_dt > OB_WIRE) { glEnableClientState(GL_NORMAL_ARRAY); glNormalPointer(GL_FLOAT, 0, pdd->ndata); - glEnable(GL_LIGHTING); - } - else { - glDisableClientState(GL_NORMAL_ARRAY); - glDisable(GL_LIGHTING); + GPU_basic_shader_colors(NULL, NULL, 0.0f, 1.0f); + GPU_basic_shader_bind(GPU_SHADER_LIGHTING | GPU_SHADER_USE_COLOR); } if ((dflag & DRAW_CONSTCOLOR) == 0) { @@ -5794,7 +5730,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv /* 7. */ - glDisable(GL_LIGHTING); + GPU_basic_shader_bind(GPU_SHADER_USE_COLOR); glDisableClientState(GL_COLOR_ARRAY); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_NORMAL_ARRAY); @@ -5869,14 +5805,10 @@ static void draw_ptcache_edit(Scene *scene, View3D *v3d, PTCacheEdit *edit) glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_COLOR_ARRAY); - glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE); - glEnable(GL_COLOR_MATERIAL); glShadeModel(GL_SMOOTH); - if (pset->brushtype == PE_BRUSH_WEIGHT) { + if (pset->brushtype == PE_BRUSH_WEIGHT) glLineWidth(2.0f); - glDisable(GL_LIGHTING); - } cache = edit->pathcache; for (i = 0, point = edit->points; i < totpoint; i++, point++) { @@ -5989,8 +5921,6 @@ static void draw_ptcache_edit(Scene *scene, View3D *v3d, PTCacheEdit *edit) } glDisable(GL_BLEND); - glDisable(GL_LIGHTING); - glDisable(GL_COLOR_MATERIAL); glDisableClientState(GL_COLOR_ARRAY); glDisableClientState(GL_NORMAL_ARRAY); glDisableClientState(GL_VERTEX_ARRAY); @@ -7939,11 +7869,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, const short draw_bounding_volume(ob, ob->boundtype); } else { - if (dt > OB_WIRE) - GPU_enable_material(0, NULL); /* we use default material */ empty_object = draw_armature(scene, v3d, ar, base, dt, dflag, ob_wire_col, false); - if (dt > OB_WIRE) - GPU_disable_material(); } } break; @@ -8113,13 +8039,13 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, const short if (!sds->wt || !(sds->viewsettings & MOD_SMOKE_VIEW_SHOWBIG)) { sds->tex = NULL; GPU_create_smoke(smd, 0); - draw_smoke_volume(sds, ob, p0, p1, sds->res, viewnormal); + draw_smoke_volume(sds, ob, p0, p1, viewnormal); GPU_free_smoke(smd); } else if (sds->wt && (sds->viewsettings & MOD_SMOKE_VIEW_SHOWBIG)) { sds->tex = NULL; GPU_create_smoke(smd, 1); - draw_smoke_volume(sds, ob, p0, p1, sds->res_wt, viewnormal); + draw_smoke_volume(sds, ob, p0, p1, viewnormal); GPU_free_smoke(smd); } @@ -8542,7 +8468,7 @@ static void bbs_mesh_solid_verts(Scene *scene, Object *ob) DM_update_materials(dm, ob); - dm->drawMappedFaces(dm, bbs_mesh_solid_hide2__setDrawOpts, GPU_enable_material, NULL, me, DM_DRAW_SKIP_HIDDEN); + dm->drawMappedFaces(dm, bbs_mesh_solid_hide2__setDrawOpts, GPU_object_material_bind, NULL, me, DM_DRAW_SKIP_HIDDEN); bbs_obmode_mesh_verts(ob, dm, 1); bm_vertoffs = me->totvert + 1; @@ -8668,23 +8594,17 @@ static void draw_object_mesh_instance(Scene *scene, View3D *v3d, RegionView3D *r glsl = draw_glsl_material(scene, ob, v3d, dt); GPU_begin_object_materials(v3d, rv3d, scene, ob, glsl, NULL); } - else { - glEnable(GL_COLOR_MATERIAL); - UI_ThemeColor(TH_BONE_SOLID); - glDisable(GL_COLOR_MATERIAL); - } glFrontFace((ob->transflag & OB_NEG_SCALE) ? GL_CW : GL_CCW); - glEnable(GL_LIGHTING); if (dm) { - dm->drawFacesSolid(dm, NULL, 0, GPU_enable_material); + dm->drawFacesSolid(dm, NULL, 0, GPU_object_material_bind); GPU_end_object_materials(); } else if (edm) - edm->drawMappedFaces(edm, NULL, GPU_enable_material, NULL, NULL, 0); - - glDisable(GL_LIGHTING); + edm->drawMappedFaces(edm, NULL, GPU_object_material_bind, NULL, NULL, DM_DRAW_NEED_NORMALS); + + GPU_object_material_unbind(); } if (edm) edm->release(edm); |