static void draw_mesh_textured_old(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob, DerivedMesh *dm, const int draw_flags) { Mesh *me = ob->data; /* correct for negative scale */ if (ob->transflag & OB_NEG_SCALE) glFrontFace(GL_CW); else glFrontFace(GL_CCW); /* draw the textured mesh */ draw_textured_begin(scene, v3d, rv3d, ob); glColor4f(1.0f, 1.0f, 1.0f, 1.0f); if (ob->mode & OB_MODE_EDIT) { drawEMTFMapped_userData data; data.em = me->edit_btmesh; data.has_mcol = CustomData_has_layer(&me->edit_btmesh->bm->ldata, CD_MLOOPCOL); data.has_mtface = CustomData_has_layer(&me->edit_btmesh->bm->pdata, CD_MTEXPOLY); data.mf = DM_get_tessface_data_layer(dm, CD_MFACE); data.tf = DM_get_tessface_data_layer(dm, CD_MTFACE); dm->drawMappedFacesTex(dm, draw_em_tf_mapped__set_draw, compareDrawOptionsEm, &data); } 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, DM_DRAW_USE_COLORS | DM_DRAW_ALWAYS_SMOOTH); else { drawTFace_userData userData; userData.mf = DM_get_tessface_data_layer(dm, CD_MFACE); userData.tf = DM_get_tessface_data_layer(dm, CD_MTFACE); userData.me = me; dm->drawMappedFacesTex(dm, me->mpoly ? draw_tface_mapped__set_draw : NULL, compareDrawOptions, &userData); } } else { if (GPU_buffer_legacy(dm)) { if (draw_flags & DRAW_MODIFIERS_PREVIEW) dm->drawFacesTex(dm, draw_mcol__set_draw_legacy, NULL, NULL); else dm->drawFacesTex(dm, draw_tface__set_draw_legacy, NULL, NULL); } else { drawTFace_userData userData; update_tface_color_layer(dm); userData.mf = DM_get_tessface_data_layer(dm, CD_MFACE); userData.tf = DM_get_tessface_data_layer(dm, CD_MTFACE); userData.me = NULL; dm->drawFacesTex(dm, draw_tface__set_draw, compareDrawOptions, &userData); } } /* draw game engine text hack */ if (BKE_bproperty_object_get(ob, "Text")) draw_mesh_text(scene, ob, 0); draw_textured_end(); /* draw edges and selected faces over textured mesh */ if (!(ob == scene->obedit) && (draw_flags & DRAW_FACE_SELECT)) draw_mesh_face_select(rv3d, me, dm); /* reset from negative scale correction */ glFrontFace(GL_CCW); /* in editmode, the blend mode needs to be set in case it was ADD */ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); }
static void draw_mesh_textured_old(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob, DerivedMesh *dm, const int draw_flags) { Mesh *me = ob->data; DMDrawFlag uvflag = DM_DRAW_USE_ACTIVE_UV; /* correct for negative scale */ if (ob->transflag & OB_NEG_SCALE) glFrontFace(GL_CW); else glFrontFace(GL_CCW); /* draw the textured mesh */ draw_textured_begin(scene, v3d, rv3d, ob); glColor4f(1.0f, 1.0f, 1.0f, 1.0f); if (ob->mode & OB_MODE_TEXTURE_PAINT) { uvflag = DM_DRAW_USE_TEXPAINT_UV; } if (ob->mode & OB_MODE_EDIT) { drawEMTFMapped_userData data; data.em = me->edit_btmesh; data.has_mcol = CustomData_has_layer(&me->edit_btmesh->bm->ldata, CD_MLOOPCOL); data.cd_poly_tex_offset = CustomData_get_offset(&me->edit_btmesh->bm->pdata, CD_MTEXPOLY); data.mpoly = DM_get_poly_data_layer(dm, CD_MPOLY); data.mtexpoly = DM_get_poly_data_layer(dm, CD_MTEXPOLY); dm->drawMappedFacesTex(dm, draw_em_tf_mapped__set_draw, compareDrawOptionsEm, &data, 0); } else if (draw_flags & DRAW_FACE_SELECT) { if (ob->mode & OB_MODE_WEIGHT_PAINT) dm->drawMappedFaces(dm, wpaint__setSolidDrawOptions_facemask, GPU_object_material_bind, NULL, me, DM_DRAW_USE_COLORS | DM_DRAW_ALWAYS_SMOOTH | DM_DRAW_SKIP_HIDDEN); else { drawTFace_userData userData; userData.mpoly = DM_get_poly_data_layer(dm, CD_MPOLY); userData.mtexpoly = DM_get_poly_data_layer(dm, CD_MTEXPOLY); userData.me = me; dm->drawMappedFacesTex(dm, me->mpoly ? draw_tface_mapped__set_draw : NULL, compareDrawOptions, &userData, uvflag); } } else { drawTFace_userData userData; update_tface_color_layer(dm, !(ob->mode & OB_MODE_TEXTURE_PAINT)); userData.mpoly = DM_get_poly_data_layer(dm, CD_MPOLY); userData.mtexpoly = DM_get_poly_data_layer(dm, CD_MTEXPOLY); userData.me = NULL; dm->drawFacesTex(dm, draw_tface__set_draw, compareDrawOptions, &userData, uvflag); } /* draw game engine text hack */ if (BKE_bproperty_object_get(ob, "Text")) draw_mesh_text(scene, ob, 0); draw_textured_end(); /* draw edges and selected faces over textured mesh */ if (!(ob == scene->obedit) && (draw_flags & DRAW_FACE_SELECT)) { bool draw_select_edges = (ob->mode & OB_MODE_TEXTURE_PAINT) == 0; draw_mesh_face_select(rv3d, me, dm, draw_select_edges); } /* reset from negative scale correction */ glFrontFace(GL_CCW); /* in editmode, the blend mode needs to be set in case it was ADD */ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); }