diff options
Diffstat (limited to 'source/blender/draw/intern')
12 files changed, 97 insertions, 94 deletions
diff --git a/source/blender/draw/intern/draw_cache_impl_mesh.cc b/source/blender/draw/intern/draw_cache_impl_mesh.cc index d3d9db13005..62a530e2535 100644 --- a/source/blender/draw/intern/draw_cache_impl_mesh.cc +++ b/source/blender/draw/intern/draw_cache_impl_mesh.cc @@ -247,7 +247,7 @@ static void mesh_cd_calc_active_uv_layer(const Object *object, { const Mesh *me_final = editmesh_final_or_this(object, me); const CustomData *cd_ldata = mesh_cd_ldata_get_from_mesh(me_final); - int layer = CustomData_get_active_layer(cd_ldata, CD_MLOOPUV); + int layer = CustomData_get_active_layer(cd_ldata, CD_PROP_FLOAT2); if (layer != -1) { cd_used->uv |= (1 << layer); } @@ -259,7 +259,7 @@ static void mesh_cd_calc_active_mask_uv_layer(const Object *object, { const Mesh *me_final = editmesh_final_or_this(object, me); const CustomData *cd_ldata = mesh_cd_ldata_get_from_mesh(me_final); - int layer = CustomData_get_stencil_layer(cd_ldata, CD_MLOOPUV); + int layer = CustomData_get_stencil_layer(cd_ldata, CD_PROP_FLOAT2); if (layer != -1) { cd_used->uv |= (1 << layer); } @@ -311,7 +311,7 @@ static DRW_MeshCDMask mesh_cd_calc_used_gpu_layers(const Object *object, * We do it based on the specified name. */ if (name[0] != '\0') { - layer = CustomData_get_named_layer(cd_ldata, CD_MLOOPUV, name); + layer = CustomData_get_named_layer(cd_ldata, CD_PROP_FLOAT2, name); type = CD_MTFACE; #if 0 /* Tangents are always from UV's - this will never happen. */ @@ -353,8 +353,9 @@ static DRW_MeshCDMask mesh_cd_calc_used_gpu_layers(const Object *object, switch (type) { case CD_MTFACE: { if (layer == -1) { - layer = (name[0] != '\0') ? CustomData_get_named_layer(cd_ldata, CD_MLOOPUV, name) : - CustomData_get_render_layer(cd_ldata, CD_MLOOPUV); + layer = (name[0] != '\0') ? + CustomData_get_named_layer(cd_ldata, CD_PROP_FLOAT2, name) : + CustomData_get_render_layer(cd_ldata, CD_PROP_FLOAT2); } if (layer != -1) { cd_used.uv |= (1 << layer); @@ -363,12 +364,13 @@ static DRW_MeshCDMask mesh_cd_calc_used_gpu_layers(const Object *object, } case CD_TANGENT: { if (layer == -1) { - layer = (name[0] != '\0') ? CustomData_get_named_layer(cd_ldata, CD_MLOOPUV, name) : - CustomData_get_render_layer(cd_ldata, CD_MLOOPUV); + layer = (name[0] != '\0') ? + CustomData_get_named_layer(cd_ldata, CD_PROP_FLOAT2, name) : + CustomData_get_render_layer(cd_ldata, CD_PROP_FLOAT2); /* Only fallback to orco (below) when we have no UV layers, see: T56545 */ if (layer == -1 && name[0] != '\0') { - layer = CustomData_get_render_layer(cd_ldata, CD_MLOOPUV); + layer = CustomData_get_render_layer(cd_ldata, CD_PROP_FLOAT2); } } if (layer != -1) { diff --git a/source/blender/draw/intern/draw_cache_impl_particles.c b/source/blender/draw/intern/draw_cache_impl_particles.c index dee7a8cec37..26f0490e9ed 100644 --- a/source/blender/draw/intern/draw_cache_impl_particles.c +++ b/source/blender/draw/intern/draw_cache_impl_particles.c @@ -818,10 +818,10 @@ static void particle_batch_cache_ensure_procedural_strand_data(PTCacheEdit *edit ParticleSystemModifierData *psmd = (ParticleSystemModifierData *)md; if (psmd != NULL && psmd->mesh_final != NULL) { - if (CustomData_has_layer(&psmd->mesh_final->ldata, CD_MLOOPUV)) { - cache->num_uv_layers = CustomData_number_of_layers(&psmd->mesh_final->ldata, CD_MLOOPUV); - active_uv = CustomData_get_active_layer(&psmd->mesh_final->ldata, CD_MLOOPUV); - render_uv = CustomData_get_render_layer(&psmd->mesh_final->ldata, CD_MLOOPUV); + if (CustomData_has_layer(&psmd->mesh_final->ldata, CD_PROP_FLOAT2)) { + cache->num_uv_layers = CustomData_number_of_layers(&psmd->mesh_final->ldata, CD_PROP_FLOAT2); + active_uv = CustomData_get_active_layer(&psmd->mesh_final->ldata, CD_PROP_FLOAT2); + render_uv = CustomData_get_render_layer(&psmd->mesh_final->ldata, CD_PROP_FLOAT2); } if (CustomData_has_layer(&psmd->mesh_final->ldata, CD_PROP_BYTE_COLOR)) { cache->num_col_layers = CustomData_number_of_layers(&psmd->mesh_final->ldata, @@ -872,7 +872,7 @@ static void particle_batch_cache_ensure_procedural_strand_data(PTCacheEdit *edit GPU_vertbuf_attr_get_raw_data(cache->proc_uv_buf[i], uv_id, &uv_step[i]); char attr_safe_name[GPU_MAX_SAFE_ATTR_NAME]; - const char *name = CustomData_get_layer_name(&psmd->mesh_final->ldata, CD_MLOOPUV, i); + const char *name = CustomData_get_layer_name(&psmd->mesh_final->ldata, CD_PROP_FLOAT2, i); GPU_vertformat_safe_attr_name(name, attr_safe_name, GPU_MAX_SAFE_ATTR_NAME); int n = 0; @@ -1155,9 +1155,9 @@ static void particle_batch_cache_ensure_pos_and_seg(PTCacheEdit *edit, MCol **parent_mcol = NULL; if (psmd != NULL) { - if (CustomData_has_layer(&psmd->mesh_final->ldata, CD_MLOOPUV)) { - num_uv_layers = CustomData_number_of_layers(&psmd->mesh_final->ldata, CD_MLOOPUV); - active_uv = CustomData_get_active_layer(&psmd->mesh_final->ldata, CD_MLOOPUV); + if (CustomData_has_layer(&psmd->mesh_final->ldata, CD_PROP_FLOAT2)) { + num_uv_layers = CustomData_number_of_layers(&psmd->mesh_final->ldata, CD_PROP_FLOAT2); + active_uv = CustomData_get_active_layer(&psmd->mesh_final->ldata, CD_PROP_FLOAT2); } if (CustomData_has_layer(&psmd->mesh_final->ldata, CD_PROP_BYTE_COLOR)) { num_col_layers = CustomData_number_of_layers(&psmd->mesh_final->ldata, CD_PROP_BYTE_COLOR); @@ -1179,7 +1179,7 @@ static void particle_batch_cache_ensure_pos_and_seg(PTCacheEdit *edit, for (int i = 0; i < num_uv_layers; i++) { char uuid[32], attr_safe_name[GPU_MAX_SAFE_ATTR_NAME]; - const char *name = CustomData_get_layer_name(&psmd->mesh_final->ldata, CD_MLOOPUV, i); + const char *name = CustomData_get_layer_name(&psmd->mesh_final->ldata, CD_PROP_FLOAT2, i); GPU_vertformat_safe_attr_name(name, attr_safe_name, GPU_MAX_SAFE_ATTR_NAME); BLI_snprintf(uuid, sizeof(uuid), "a%s", attr_safe_name); diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh.cc index ec7d3a933b4..d9ef6c34df1 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh.cc @@ -91,7 +91,7 @@ const MeshExtract *mesh_extract_override_get(const MeshExtract *extractor, void mesh_render_data_face_flag(const MeshRenderData *mr, const BMFace *efa, - const int cd_ofs, + const UVMap_Offsets offsets, EditLoopData *eattr) { if (efa == mr->efa_act) { @@ -104,7 +104,7 @@ void mesh_render_data_face_flag(const MeshRenderData *mr, if (efa == mr->efa_act_uv) { eattr->v_flag |= VFLAG_FACE_UV_ACTIVE; } - if ((cd_ofs != -1) && uvedit_face_select_test_ex(mr->toolsettings, (BMFace *)efa, cd_ofs)) { + if ((offsets.uv != -1) && uvedit_face_select_test_ex(mr->toolsettings, (BMFace *)efa, offsets)) { eattr->v_flag |= VFLAG_FACE_UV_SELECT; } @@ -121,30 +121,30 @@ void mesh_render_data_face_flag(const MeshRenderData *mr, void mesh_render_data_loop_flag(const MeshRenderData *mr, BMLoop *l, - const int cd_ofs, + const UVMap_Offsets offsets, EditLoopData *eattr) { - if (cd_ofs == -1) { + if (offsets.uv == -1) { return; } - MLoopUV *luv = (MLoopUV *)BM_ELEM_CD_GET_VOID_P(l, cd_ofs); - if (luv != nullptr && (luv->flag & MLOOPUV_PINNED)) { + if (BM_ELEM_CD_GET_OPT_BOOL(l, offsets.pinned)) { eattr->v_flag |= VFLAG_VERT_UV_PINNED; } - if (uvedit_uv_select_test_ex(mr->toolsettings, l, cd_ofs)) { + if (uvedit_uv_select_test_ex(mr->toolsettings, l, offsets)) { eattr->v_flag |= VFLAG_VERT_UV_SELECT; } } void mesh_render_data_loop_edge_flag(const MeshRenderData *mr, BMLoop *l, - const int cd_ofs, + const UVMap_Offsets offsets, EditLoopData *eattr) { - if (cd_ofs == -1) { + if (offsets.uv == -1) { return; } - if (uvedit_edge_select_test_ex(mr->toolsettings, l, cd_ofs)) { + + if (uvedit_edge_select_test_ex(mr->toolsettings, l, offsets)) { eattr->v_flag |= VFLAG_EDGE_UV_SELECT; eattr->v_flag |= VFLAG_VERT_UV_SELECT; } diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh.hh b/source/blender/draw/intern/mesh_extractors/extract_mesh.hh index a4773736f0c..c7703874266 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh.hh +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh.hh @@ -382,15 +382,15 @@ const MeshExtract *mesh_extract_override_get(const MeshExtract *extractor, bool do_single_mat); void mesh_render_data_face_flag(const MeshRenderData *mr, const BMFace *efa, - int cd_ofs, + UVMap_Offsets offsets, EditLoopData *eattr); void mesh_render_data_loop_flag(const MeshRenderData *mr, BMLoop *l, - int cd_ofs, + UVMap_Offsets offsets, EditLoopData *eattr); void mesh_render_data_loop_edge_flag(const MeshRenderData *mr, BMLoop *l, - int cd_ofs, + UVMap_Offsets offsets, EditLoopData *eattr); extern const MeshExtract extract_tris; diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edit_data.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edit_data.cc index 27fd6546b8c..7e25b1f1528 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edit_data.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edit_data.cc @@ -138,7 +138,7 @@ static void extract_edit_data_iter_poly_bm(const MeshRenderData *mr, EditLoopData *data = vbo_data + l_index; memset(data, 0x0, sizeof(*data)); - mesh_render_data_face_flag(mr, f, -1, data); + mesh_render_data_face_flag(mr, f, {-1, -1, -1, -1}, data); mesh_render_data_edge_flag(mr, l_iter->e, data); mesh_render_data_vert_flag(mr, l_iter->v, data); } while ((l_iter = l_iter->next) != l_first); @@ -161,7 +161,7 @@ static void extract_edit_data_iter_poly_mesh(const MeshRenderData *mr, BMEdge *eed = bm_original_edge_get(mr, ml->e); BMVert *eve = bm_original_vert_get(mr, ml->v); if (efa) { - mesh_render_data_face_flag(mr, efa, -1, data); + mesh_render_data_face_flag(mr, efa, {-1, -1, -1, -1}, data); } if (eed) { mesh_render_data_edge_flag(mr, eed, data); @@ -289,7 +289,7 @@ static void extract_edit_data_iter_subdiv_bm(const DRWSubdivCache *subdiv_cache, /* coarse_quad can be null when called by the mesh iteration below. */ if (coarse_quad) { /* The -1 parameter is for edit_uvs, which we don't do here. */ - mesh_render_data_face_flag(mr, coarse_quad, -1, edit_loop_data); + mesh_render_data_face_flag(mr, coarse_quad, {-1, -1, -1, -1}, edit_loop_data); } } } diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_data.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_data.cc index 0b9043e3289..ec414b9a646 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_data.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_data.cc @@ -19,7 +19,7 @@ namespace blender::draw { struct MeshExtract_EditUVData_Data { EditLoopData *vbo_data; - int cd_ofs; + UVMap_Offsets offsets; }; static void extract_edituv_data_init_common(const MeshRenderData *mr, @@ -39,7 +39,7 @@ static void extract_edituv_data_init_common(const MeshRenderData *mr, CustomData *cd_ldata = (mr->extract_type == MR_EXTRACT_BMESH) ? &mr->bm->ldata : &mr->me->ldata; data->vbo_data = (EditLoopData *)GPU_vertbuf_get_data(vbo); - data->cd_ofs = CustomData_get_offset(cd_ldata, CD_MLOOPUV); + data->offsets = CustomData_get_uvmap_offsets(cd_ldata, NULL); } static void extract_edituv_data_init(const MeshRenderData *mr, @@ -64,9 +64,9 @@ static void extract_edituv_data_iter_poly_bm(const MeshRenderData *mr, MeshExtract_EditUVData_Data *data = static_cast<MeshExtract_EditUVData_Data *>(_data); EditLoopData *eldata = &data->vbo_data[l_index]; memset(eldata, 0x0, sizeof(*eldata)); - mesh_render_data_loop_flag(mr, l_iter, data->cd_ofs, eldata); - mesh_render_data_face_flag(mr, f, data->cd_ofs, eldata); - mesh_render_data_loop_edge_flag(mr, l_iter, data->cd_ofs, eldata); + mesh_render_data_loop_flag(mr, l_iter, data->offsets, eldata); + mesh_render_data_face_flag(mr, f, data->offsets, eldata); + mesh_render_data_loop_edge_flag(mr, l_iter, data->offsets, eldata); } while ((l_iter = l_iter->next) != l_first); } @@ -90,8 +90,8 @@ static void extract_edituv_data_iter_poly_mesh(const MeshRenderData *mr, if (eed && eve) { /* Loop on an edge endpoint. */ BMLoop *l = BM_face_edge_share_loop(efa, eed); - mesh_render_data_loop_flag(mr, l, data->cd_ofs, eldata); - mesh_render_data_loop_edge_flag(mr, l, data->cd_ofs, eldata); + mesh_render_data_loop_flag(mr, l, data->offsets, eldata); + mesh_render_data_loop_edge_flag(mr, l, data->offsets, eldata); } else { if (eed == nullptr) { @@ -105,7 +105,7 @@ static void extract_edituv_data_iter_poly_mesh(const MeshRenderData *mr, if (eed) { /* Mapped points on an edge between two edit verts. */ BMLoop *l = BM_face_edge_share_loop(efa, eed); - mesh_render_data_loop_edge_flag(mr, l, data->cd_ofs, eldata); + mesh_render_data_loop_edge_flag(mr, l, data->offsets, eldata); } } } @@ -146,8 +146,8 @@ static void extract_edituv_data_iter_subdiv_bm(const DRWSubdivCache *subdiv_cach BMEdge *eed = BM_edge_at_index(mr->bm, edge_origindex); /* Loop on an edge endpoint. */ BMLoop *l = BM_face_edge_share_loop(const_cast<BMFace *>(coarse_quad), eed); - mesh_render_data_loop_flag(mr, l, data->cd_ofs, edit_loop_data); - mesh_render_data_loop_edge_flag(mr, l, data->cd_ofs, edit_loop_data); + mesh_render_data_loop_flag(mr, l, data->offsets, edit_loop_data); + mesh_render_data_loop_edge_flag(mr, l, data->offsets, edit_loop_data); } else { if (edge_origindex == -1) { @@ -160,11 +160,11 @@ static void extract_edituv_data_iter_subdiv_bm(const DRWSubdivCache *subdiv_cach /* Mapped points on an edge between two edit verts. */ BMEdge *eed = BM_edge_at_index(mr->bm, edge_origindex); BMLoop *l = BM_face_edge_share_loop(const_cast<BMFace *>(coarse_quad), eed); - mesh_render_data_loop_edge_flag(mr, l, data->cd_ofs, edit_loop_data); + mesh_render_data_loop_edge_flag(mr, l, data->offsets, edit_loop_data); } } - mesh_render_data_face_flag(mr, coarse_quad, data->cd_ofs, edit_loop_data); + mesh_render_data_face_flag(mr, coarse_quad, data->offsets, edit_loop_data); } } diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_stretch_angle.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_stretch_angle.cc index 969ff9f6f09..2273781bd07 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_stretch_angle.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_stretch_angle.cc @@ -9,6 +9,8 @@ #include "BKE_mesh.h" +#include "BLI_math_vec_types.hh" + #include "extract_mesh.hh" #include "draw_subdivision.h" @@ -26,7 +28,7 @@ struct UVStretchAngle { struct MeshExtract_StretchAngle_Data { UVStretchAngle *vbo_data; - const MLoopUV *luv; + const float2 *uv; float auv[2][2], last_auv[2]; float av[2][3], last_av[3]; int cd_ofs; @@ -94,11 +96,11 @@ static void extract_edituv_stretch_angle_init(const MeshRenderData *mr, /* Special iterator needed to save about half of the computing cost. */ if (mr->extract_type == MR_EXTRACT_BMESH) { - data->cd_ofs = CustomData_get_offset(&mr->bm->ldata, CD_MLOOPUV); + data->cd_ofs = CustomData_get_offset(&mr->bm->ldata, CD_PROP_FLOAT2); } else { BLI_assert(ELEM(mr->extract_type, MR_EXTRACT_MAPPED, MR_EXTRACT_MESH)); - data->luv = (const MLoopUV *)CustomData_get_layer(&mr->me->ldata, CD_MLOOPUV); + data->uv = static_cast<const float2 *>(CustomData_get_layer(&mr->me->ldata, CD_PROP_FLOAT2)); } } @@ -115,18 +117,18 @@ static void extract_edituv_stretch_angle_iter_poly_bm(const MeshRenderData *mr, do { const int l_index = BM_elem_index_get(l_iter); - const MLoopUV *luv, *luv_next; + const float(*luv)[2], (*luv_next)[2]; BMLoop *l_next = l_iter->next; if (l_iter == BM_FACE_FIRST_LOOP(f)) { /* First loop in face. */ BMLoop *l_tmp = l_iter->prev; BMLoop *l_next_tmp = l_iter; - luv = (const MLoopUV *)BM_ELEM_CD_GET_VOID_P(l_tmp, data->cd_ofs); - luv_next = (const MLoopUV *)BM_ELEM_CD_GET_VOID_P(l_next_tmp, data->cd_ofs); + luv = BM_ELEM_CD_GET_FLOAT2_P(l_tmp, data->cd_ofs); + luv_next = BM_ELEM_CD_GET_FLOAT2_P(l_next_tmp, data->cd_ofs); compute_normalize_edge_vectors(auv, av, - luv->uv, - luv_next->uv, + *luv, + *luv_next, bm_vert_co_get(mr, l_tmp->v), bm_vert_co_get(mr, l_next_tmp->v)); /* Save last edge. */ @@ -142,14 +144,10 @@ static void extract_edituv_stretch_angle_iter_poly_bm(const MeshRenderData *mr, copy_v3_v3(av[1], last_av); } else { - luv = (const MLoopUV *)BM_ELEM_CD_GET_VOID_P(l_iter, data->cd_ofs); - luv_next = (const MLoopUV *)BM_ELEM_CD_GET_VOID_P(l_next, data->cd_ofs); - compute_normalize_edge_vectors(auv, - av, - luv->uv, - luv_next->uv, - bm_vert_co_get(mr, l_iter->v), - bm_vert_co_get(mr, l_next->v)); + luv = BM_ELEM_CD_GET_FLOAT2_P(l_iter, data->cd_ofs); + luv_next = BM_ELEM_CD_GET_FLOAT2_P(l_next, data->cd_ofs); + compute_normalize_edge_vectors( + auv, av, *luv, *luv_next, bm_vert_co_get(mr, l_iter->v), bm_vert_co_get(mr, l_next->v)); } edituv_get_edituv_stretch_angle(auv, av, &data->vbo_data[l_index]); } while ((l_iter = l_iter->next) != l_first); @@ -175,7 +173,7 @@ static void extract_edituv_stretch_angle_iter_poly_mesh(const MeshRenderData *mr v = &mr->mvert[mr->mloop[ml_index_last].v]; v_next = &mr->mvert[mr->mloop[l_next_tmp].v]; compute_normalize_edge_vectors( - auv, av, data->luv[ml_index_last].uv, data->luv[l_next_tmp].uv, v->co, v_next->co); + auv, av, data->uv[ml_index_last], data->uv[l_next_tmp], v->co, v_next->co); /* Save last edge. */ copy_v2_v2(last_auv, auv[1]); copy_v3_v3(last_av, av[1]); @@ -193,7 +191,7 @@ static void extract_edituv_stretch_angle_iter_poly_mesh(const MeshRenderData *mr v = &mr->mvert[mr->mloop[ml_index].v]; v_next = &mr->mvert[mr->mloop[l_next].v]; compute_normalize_edge_vectors( - auv, av, data->luv[ml_index].uv, data->luv[l_next].uv, v->co, v_next->co); + auv, av, data->uv[ml_index], data->uv[l_next], v->co, v_next->co); } edituv_get_edituv_stretch_angle(auv, av, &data->vbo_data[ml_index]); } @@ -246,7 +244,7 @@ static void extract_edituv_stretch_angle_init_subdiv(const DRWSubdivCache *subdi uint32_t uv_layers = cache->cd_used.uv; /* HACK to fix T68857 */ if (mr->extract_type == MR_EXTRACT_BMESH && cache->cd_used.edit_uv == 1) { - int layer = CustomData_get_active_layer(cd_ldata, CD_MLOOPUV); + int layer = CustomData_get_active_layer(cd_ldata, CD_PROP_FLOAT2); if (layer != -1) { uv_layers |= (1 << layer); } @@ -255,7 +253,7 @@ static void extract_edituv_stretch_angle_init_subdiv(const DRWSubdivCache *subdi int uvs_offset = 0; for (int i = 0; i < MAX_MTFACE; i++) { if (uv_layers & (1 << i)) { - if (i == CustomData_get_active_layer(cd_ldata, CD_MLOOPUV)) { + if (i == CustomData_get_active_layer(cd_ldata, CD_PROP_FLOAT2)) { break; } diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_stretch_area.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_stretch_area.cc index 2bb786303c4..39795023258 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_stretch_area.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_stretch_area.cc @@ -58,7 +58,7 @@ static void compute_area_ratio(const MeshRenderData *mr, if (mr->extract_type == MR_EXTRACT_BMESH) { CustomData *cd_ldata = &mr->bm->ldata; - int uv_ofs = CustomData_get_offset(cd_ldata, CD_MLOOPUV); + int uv_ofs = CustomData_get_offset(cd_ldata, CD_PROP_FLOAT2); BMFace *efa; BMIter f_iter; @@ -73,7 +73,8 @@ static void compute_area_ratio(const MeshRenderData *mr, } else { BLI_assert(ELEM(mr->extract_type, MR_EXTRACT_MAPPED, MR_EXTRACT_MESH)); - const MLoopUV *uv_data = (const MLoopUV *)CustomData_get_layer(&mr->me->ldata, CD_MLOOPUV); + const float(*uv_data)[2] = (const float(*)[2])CustomData_get_layer(&mr->me->ldata, + CD_PROP_FLOAT2); const MPoly *mp = mr->mpoly; for (int mp_index = 0; mp_index < mr->poly_len; mp_index++, mp++) { float area = BKE_mesh_calc_poly_area(mp, &mr->mloop[mp->loopstart], mr->mvert); diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_fdots_edituv_data.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_fdots_edituv_data.cc index 27d1975d67b..7361f2484ae 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_fdots_edituv_data.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_fdots_edituv_data.cc @@ -17,7 +17,7 @@ namespace blender::draw { struct MeshExtract_EditUVFdotData_Data { EditLoopData *vbo_data; - int cd_ofs; + UVMap_Offsets offsets; }; static void extract_fdots_edituv_data_init(const MeshRenderData *mr, @@ -36,7 +36,7 @@ static void extract_fdots_edituv_data_init(const MeshRenderData *mr, MeshExtract_EditUVFdotData_Data *data = static_cast<MeshExtract_EditUVFdotData_Data *>(tls_data); data->vbo_data = (EditLoopData *)GPU_vertbuf_get_data(vbo); - data->cd_ofs = CustomData_get_offset(&mr->bm->ldata, CD_MLOOPUV); + data->offsets = CustomData_get_uvmap_offsets(&mr->bm->ldata, NULL); } static void extract_fdots_edituv_data_iter_poly_bm(const MeshRenderData *mr, @@ -47,7 +47,7 @@ static void extract_fdots_edituv_data_iter_poly_bm(const MeshRenderData *mr, MeshExtract_EditUVFdotData_Data *data = static_cast<MeshExtract_EditUVFdotData_Data *>(_data); EditLoopData *eldata = &data->vbo_data[BM_elem_index_get(f)]; memset(eldata, 0x0, sizeof(*eldata)); - mesh_render_data_face_flag(mr, f, data->cd_ofs, eldata); + mesh_render_data_face_flag(mr, f, data->offsets, eldata); } static void extract_fdots_edituv_data_iter_poly_mesh(const MeshRenderData *mr, @@ -60,7 +60,7 @@ static void extract_fdots_edituv_data_iter_poly_mesh(const MeshRenderData *mr, memset(eldata, 0x0, sizeof(*eldata)); BMFace *efa = bm_original_face_get(mr, mp_index); if (efa) { - mesh_render_data_face_flag(mr, efa, data->cd_ofs, eldata); + mesh_render_data_face_flag(mr, efa, data->offsets, eldata); } } diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_fdots_uv.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_fdots_uv.cc index b0403cf7c4c..b0d95b003a5 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_fdots_uv.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_fdots_uv.cc @@ -17,7 +17,7 @@ namespace blender::draw { struct MeshExtract_FdotUV_Data { float (*vbo_data)[2]; - const MLoopUV *uv_data; + const float (*uv_data)[2]; int cd_ofs; }; @@ -46,10 +46,10 @@ static void extract_fdots_uv_init(const MeshRenderData *mr, data->vbo_data = (float(*)[2])GPU_vertbuf_get_data(vbo); if (mr->extract_type == MR_EXTRACT_BMESH) { - data->cd_ofs = CustomData_get_offset(&mr->bm->ldata, CD_MLOOPUV); + data->cd_ofs = CustomData_get_offset(&mr->bm->ldata, CD_PROP_FLOAT2); } else { - data->uv_data = (const MLoopUV *)CustomData_get_layer(&mr->me->ldata, CD_MLOOPUV); + data->uv_data = (const float(*)[2])CustomData_get_layer(&mr->me->ldata, CD_PROP_FLOAT2); } } @@ -63,8 +63,8 @@ static void extract_fdots_uv_iter_poly_bm(const MeshRenderData *UNUSED(mr), l_iter = l_first = BM_FACE_FIRST_LOOP(f); do { float w = 1.0f / (float)f->len; - const MLoopUV *luv = (const MLoopUV *)BM_ELEM_CD_GET_VOID_P(l_iter, data->cd_ofs); - madd_v2_v2fl(data->vbo_data[BM_elem_index_get(f)], luv->uv, w); + const float *luv = BM_ELEM_CD_GET_FLOAT_P(l_iter, data->cd_ofs); + madd_v2_v2fl(data->vbo_data[BM_elem_index_get(f)], luv, w); } while ((l_iter = l_iter->next) != l_first); } @@ -82,12 +82,12 @@ static void extract_fdots_uv_iter_poly_mesh(const MeshRenderData *mr, const MLoop *ml = &mloop[ml_index]; if (mr->use_subsurf_fdots) { if (BLI_BITMAP_TEST(facedot_tags, ml->v)) { - copy_v2_v2(data->vbo_data[mp_index], data->uv_data[ml_index].uv); + copy_v2_v2(data->vbo_data[mp_index], data->uv_data[ml_index]); } } else { float w = 1.0f / (float)mp->totloop; - madd_v2_v2fl(data->vbo_data[mp_index], data->uv_data[ml_index].uv, w); + madd_v2_v2fl(data->vbo_data[mp_index], data->uv_data[ml_index], w); } } } diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_tan.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_tan.cc index 049fa416523..d0c7e6788ad 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_tan.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_tan.cc @@ -48,7 +48,8 @@ static void extract_tan_init_common(const MeshRenderData *mr, /* FIXME(T91838): This is to avoid a crash when orco tangent was requested but there are valid * uv layers. It would be better to fix the root cause. */ - if (tan_layers == 0 && use_orco_tan && CustomData_get_layer_index(cd_ldata, CD_MLOOPUV) != -1) { + if (tan_layers == 0 && use_orco_tan && + CustomData_get_layer_index(cd_ldata, CD_PROP_FLOAT2) != -1) { tan_layers = 1; use_orco_tan = false; } @@ -56,17 +57,17 @@ static void extract_tan_init_common(const MeshRenderData *mr, for (int i = 0; i < MAX_MTFACE; i++) { if (tan_layers & (1 << i)) { char attr_name[32], attr_safe_name[GPU_MAX_SAFE_ATTR_NAME]; - const char *layer_name = CustomData_get_layer_name(cd_ldata, CD_MLOOPUV, i); + const char *layer_name = CustomData_get_layer_name(cd_ldata, CD_PROP_FLOAT2, i); GPU_vertformat_safe_attr_name(layer_name, attr_safe_name, GPU_MAX_SAFE_ATTR_NAME); /* Tangent layer name. */ BLI_snprintf(attr_name, sizeof(attr_name), "t%s", attr_safe_name); GPU_vertformat_attr_add(format, attr_name, comp_type, 4, fetch_mode); /* Active render layer name. */ - if (i == CustomData_get_render_layer(cd_ldata, CD_MLOOPUV)) { + if (i == CustomData_get_render_layer(cd_ldata, CD_PROP_FLOAT2)) { GPU_vertformat_alias_add(format, "t"); } /* Active display layer name. */ - if (i == CustomData_get_active_layer(cd_ldata, CD_MLOOPUV)) { + if (i == CustomData_get_active_layer(cd_ldata, CD_PROP_FLOAT2)) { GPU_vertformat_alias_add(format, "at"); } diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_uv.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_uv.cc index 6606912850d..80877c35974 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_uv.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_uv.cc @@ -5,6 +5,7 @@ * \ingroup draw */ +#include "BLI_math_vec_types.hh" #include "BLI_string.h" #include "draw_subdivision.h" @@ -29,7 +30,7 @@ static bool mesh_extract_uv_format_init(GPUVertFormat *format, uint32_t uv_layers = cache->cd_used.uv; /* HACK to fix T68857 */ if (extract_type == MR_EXTRACT_BMESH && cache->cd_used.edit_uv == 1) { - int layer = CustomData_get_active_layer(cd_ldata, CD_MLOOPUV); + int layer = CustomData_get_active_layer(cd_ldata, CD_PROP_FLOAT2); if (layer != -1) { uv_layers |= (1 << layer); } @@ -40,24 +41,24 @@ static bool mesh_extract_uv_format_init(GPUVertFormat *format, for (int i = 0; i < MAX_MTFACE; i++) { if (uv_layers & (1 << i)) { char attr_name[32], attr_safe_name[GPU_MAX_SAFE_ATTR_NAME]; - const char *layer_name = CustomData_get_layer_name(cd_ldata, CD_MLOOPUV, i); + const char *layer_name = CustomData_get_layer_name(cd_ldata, CD_PROP_FLOAT2, i); GPU_vertformat_safe_attr_name(layer_name, attr_safe_name, GPU_MAX_SAFE_ATTR_NAME); /* UV layer name. */ BLI_snprintf(attr_name, sizeof(attr_name), "a%s", attr_safe_name); GPU_vertformat_attr_add(format, attr_name, GPU_COMP_F32, 2, GPU_FETCH_FLOAT); /* Active render layer name. */ - if (i == CustomData_get_render_layer(cd_ldata, CD_MLOOPUV)) { + if (i == CustomData_get_render_layer(cd_ldata, CD_PROP_FLOAT2)) { GPU_vertformat_alias_add(format, "a"); } /* Active display layer name. */ - if (i == CustomData_get_active_layer(cd_ldata, CD_MLOOPUV)) { + if (i == CustomData_get_active_layer(cd_ldata, CD_PROP_FLOAT2)) { GPU_vertformat_alias_add(format, "au"); /* Alias to `pos` for edit uvs. */ GPU_vertformat_alias_add(format, "pos"); } /* Stencil mask uv layer name. */ - if (i == CustomData_get_stencil_layer(cd_ldata, CD_MLOOPUV)) { + if (i == CustomData_get_stencil_layer(cd_ldata, CD_PROP_FLOAT2)) { GPU_vertformat_alias_add(format, "mu"); } } @@ -90,28 +91,28 @@ static void extract_uv_init(const MeshRenderData *mr, GPU_vertbuf_init_with_format(vbo, &format); GPU_vertbuf_data_alloc(vbo, v_len); - float(*uv_data)[2] = (float(*)[2])GPU_vertbuf_get_data(vbo); + float2 *uv_data = static_cast<float2 *>(GPU_vertbuf_get_data(vbo)); for (int i = 0; i < MAX_MTFACE; i++) { if (uv_layers & (1 << i)) { if (mr->extract_type == MR_EXTRACT_BMESH) { - int cd_ofs = CustomData_get_n_offset(cd_ldata, CD_MLOOPUV, i); + int cd_ofs = CustomData_get_n_offset(cd_ldata, CD_PROP_FLOAT2, i); BMIter f_iter; BMFace *efa; BM_ITER_MESH (efa, &f_iter, mr->bm, BM_FACES_OF_MESH) { BMLoop *l_iter, *l_first; l_iter = l_first = BM_FACE_FIRST_LOOP(efa); do { - MLoopUV *luv = (MLoopUV *)BM_ELEM_CD_GET_VOID_P(l_iter, cd_ofs); - memcpy(uv_data, luv->uv, sizeof(*uv_data)); + float *luv = BM_ELEM_CD_GET_FLOAT_P(l_iter, cd_ofs); + memcpy(uv_data, luv, sizeof(*uv_data)); uv_data++; } while ((l_iter = l_iter->next) != l_first); } } else { - const MLoopUV *layer_data = (const MLoopUV *)CustomData_get_layer_n( - cd_ldata, CD_MLOOPUV, i); + const float2 *layer_data = static_cast<float2 *>( + CustomData_get_layer_n(cd_ldata, CD_PROP_FLOAT2, i)); for (int ml_index = 0; ml_index < mr->loop_len; ml_index++, uv_data++, layer_data++) { - memcpy(uv_data, layer_data->uv, sizeof(*uv_data)); + memcpy(uv_data, layer_data, sizeof(*uv_data)); } } } |