All compile errors fixed, basic viewport works
This commit is contained in:
parent
c51550c6eb
commit
a0991a1a9f
|
@ -820,6 +820,23 @@ static void attr_create_pointiness(Scene *scene, Mesh *mesh, BL::Mesh &b_mesh, b
|
|||
}
|
||||
}
|
||||
|
||||
static std::optional<BL::IntAttribute> find_corner_vert_attribute(BL::Mesh b_mesh)
|
||||
{
|
||||
for (BL::Attribute &b_attribute : b_mesh.attributes) {
|
||||
if (b_attribute.domain() != BL::Attribute::domain_CORNER) {
|
||||
continue;
|
||||
}
|
||||
if (b_attribute.data_type() != BL::Attribute::data_type_INT) {
|
||||
continue;
|
||||
}
|
||||
if (b_attribute.name() != ".corner_vert") {
|
||||
continue;
|
||||
}
|
||||
return BL::IntAttribute{b_attribute};
|
||||
}
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
/* The Random Per Island attribute is a random float associated with each
|
||||
* connected component (island) of the mesh. The attribute is computed by
|
||||
* first classifying the vertices into different sets using a Disjoint Set
|
||||
|
@ -866,11 +883,11 @@ static void attr_create_random_per_island(Scene *scene,
|
|||
else {
|
||||
if (polys_num != 0) {
|
||||
const MPoly *polys = static_cast<const MPoly *>(b_mesh.polygons[0].ptr.data);
|
||||
const int *corner_verts = b_mesh.corner_verts[0].ptr.data;
|
||||
std::optional<BL::IntAttribute> corner_verts = find_corner_vert_attribute(b_mesh);
|
||||
for (int i = 0; i < polys_num; i++) {
|
||||
const MPoly &b_poly = polys[i];
|
||||
const int vert = corner_verts[b_poly.loopstart];
|
||||
data[i] = hash_uint_to_float(vertices_sets.find(b_loop.v));
|
||||
const int vert = corner_verts->data[b_poly.loopstart].value();
|
||||
data[i] = hash_uint_to_float(vertices_sets.find(vert));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1014,7 +1031,7 @@ static void create_mesh(Scene *scene,
|
|||
else {
|
||||
vector<int> vi;
|
||||
|
||||
const int *corner_verts = b_mesh.corner_verts[0].ptr.data;
|
||||
std::optional<BL::IntAttribute> corner_verts = find_corner_vert_attribute(b_mesh);
|
||||
|
||||
for (int i = 0; i < numfaces; i++) {
|
||||
const MPoly &b_poly = polys[i];
|
||||
|
@ -1025,7 +1042,7 @@ static void create_mesh(Scene *scene,
|
|||
vi.resize(n);
|
||||
for (int i = 0; i < n; i++) {
|
||||
/* NOTE: Autosmooth is already taken care about. */
|
||||
vi[i] = corner_verts[b_poly.loopstart + i];
|
||||
vi[i] = corner_verts->data[b_poly.loopstart + i].value();
|
||||
}
|
||||
|
||||
/* create subd faces */
|
||||
|
|
|
@ -1047,23 +1047,21 @@ BLI_INLINE MPoly *BKE_mesh_polys_for_write(Mesh *mesh)
|
|||
|
||||
BLI_INLINE const int *BKE_mesh_corner_verts(const Mesh *mesh)
|
||||
{
|
||||
return (const float(*)[3])CustomData_get_layer_named(
|
||||
&mesh->ldata, CD_PROP_INT32, ".corner_vert");
|
||||
return (const int *)CustomData_get_layer_named(&mesh->ldata, CD_PROP_INT32, ".corner_vert");
|
||||
}
|
||||
BLI_INLINE int *BKE_mesh_corner_verts_for_write(Mesh *mesh)
|
||||
{
|
||||
return (float(*)[3])CustomData_duplicate_referenced_layer_named(
|
||||
return (int *)CustomData_duplicate_referenced_layer_named(
|
||||
&mesh->ldata, CD_PROP_INT32, ".corner_vert", mesh->totloop);
|
||||
}
|
||||
|
||||
BLI_INLINE const int *BKE_mesh_corner_edges(const Mesh *mesh)
|
||||
{
|
||||
return (const float(*)[3])CustomData_get_layer_named(
|
||||
&mesh->ldata, CD_PROP_INT32, ".corner_edge");
|
||||
return (const int *)CustomData_get_layer_named(&mesh->ldata, CD_PROP_INT32, ".corner_edge");
|
||||
}
|
||||
BLI_INLINE int *BKE_mesh_corner_edges_for_write(Mesh *mesh)
|
||||
{
|
||||
return (float(*)[3])CustomData_duplicate_referenced_layer_named(
|
||||
return (int *)CustomData_duplicate_referenced_layer_named(
|
||||
&mesh->ldata, CD_PROP_INT32, ".corner_edge", mesh->totloop);
|
||||
}
|
||||
|
||||
|
@ -1120,20 +1118,20 @@ inline blender::MutableSpan<MPoly> Mesh::polys_for_write()
|
|||
|
||||
inline blender::Span<int> Mesh::corner_verts() const
|
||||
{
|
||||
return {BKE_mesh_corner_verts(this), mesh->totloop};
|
||||
return {BKE_mesh_corner_verts(this), this->totloop};
|
||||
}
|
||||
inline blender::MutableSpan<int> Mesh::corner_verts_for_write()
|
||||
{
|
||||
return {BKE_mesh_corner_verts_for_write(this), mesh->totloop};
|
||||
return {BKE_mesh_corner_verts_for_write(this), this->totloop};
|
||||
}
|
||||
|
||||
inline blender::Span<int> Mesh::corner_edges() const
|
||||
{
|
||||
return {BKE_mesh_corner_edges(this), mesh->totloop};
|
||||
return {BKE_mesh_corner_edges(this), this->totloop};
|
||||
}
|
||||
inline blender::MutableSpan<int> Mesh::corner_edges_for_write()
|
||||
{
|
||||
return {BKE_mesh_corner_edges_for_write(this), mesh->totloop};
|
||||
return {BKE_mesh_corner_edges_for_write(this), this->totloop};
|
||||
}
|
||||
|
||||
inline blender::Span<MDeformVert> Mesh::deform_verts() const
|
||||
|
|
|
@ -101,10 +101,10 @@ struct MLoop *BKE_mesh_legacy_convert_corners_to_loops(
|
|||
blender::ResourceScope &temp_arrays_for_convert,
|
||||
blender::Vector<CustomDataLayer, 16> &loop_layers_to_write);
|
||||
|
||||
void BKE_mesh_legacy_convert_loops_to_corners(Mesh *mesh);
|
||||
|
||||
#endif
|
||||
|
||||
void BKE_mesh_legacy_convert_loops_to_corners(struct Mesh *mesh);
|
||||
|
||||
/**
|
||||
* Recreate #MFace Tessellation.
|
||||
*
|
||||
|
|
|
@ -1616,7 +1616,6 @@ bool BKE_object_data_transfer_ex(struct Depsgraph *depsgraph,
|
|||
const MPoly *polys_dst = BKE_mesh_polys(me_dst);
|
||||
const int num_polys_dst = me_dst->totpoly;
|
||||
const int *corner_verts_dst = BKE_mesh_corner_verts(me_dst);
|
||||
const int *corner_edges_dst = BKE_mesh_corner_edges(me_dst);
|
||||
const int num_loops_dst = me_dst->totloop;
|
||||
|
||||
if (!geom_map_init[PDATA]) {
|
||||
|
|
|
@ -2237,6 +2237,7 @@ void BKE_keyblock_mesh_calc_normals(const KeyBlock *kb,
|
|||
const MEdge *edges = BKE_mesh_edges(mesh);
|
||||
const MPoly *polys = BKE_mesh_polys(mesh);
|
||||
const int *corner_verts = BKE_mesh_corner_verts(mesh);
|
||||
const int *corner_edges = BKE_mesh_corner_edges(mesh);
|
||||
|
||||
const bool loop_normals_needed = r_loopnors != nullptr;
|
||||
const bool vert_normals_needed = r_vertnors != nullptr || loop_normals_needed;
|
||||
|
@ -2281,6 +2282,7 @@ void BKE_keyblock_mesh_calc_normals(const KeyBlock *kb,
|
|||
edges,
|
||||
mesh->totedge,
|
||||
corner_verts,
|
||||
corner_edges,
|
||||
r_loopnors,
|
||||
mesh->totloop,
|
||||
polys,
|
||||
|
|
|
@ -1482,11 +1482,11 @@ Mesh *BKE_mball_polygonize(Depsgraph *depsgraph, Scene *scene, Object *ob)
|
|||
mpoly[i].totloop = count;
|
||||
mpoly[i].flag = ME_SMOOTH;
|
||||
|
||||
corner_verts[loop_offset] = uint32_t(indices[0]);
|
||||
corner_verts[loop_offset + 1] = uint32_t(indices[1]);
|
||||
corner_verts[loop_offset + 2] = uint32_t(indices[2]);
|
||||
corner_verts[loop_offset] = indices[0];
|
||||
corner_verts[loop_offset + 1] = indices[1];
|
||||
corner_verts[loop_offset + 2] = indices[2];
|
||||
if (count == 4) {
|
||||
corner_verts[loop_offset + 3] = uint32_t(indices[3]);
|
||||
corner_verts[loop_offset + 3] = indices[3];
|
||||
}
|
||||
|
||||
loop_offset += count;
|
||||
|
|
|
@ -471,7 +471,7 @@ static const char *cmpcode_to_str(int code)
|
|||
|
||||
/** Thresh is threshold for comparing vertices, UV's, vertex colors, weights, etc. */
|
||||
static int customdata_compare(
|
||||
CustomData *c1, CustomData *c2, const int total_length, Mesh *m1, Mesh *m2, const float thresh)
|
||||
CustomData *c1, CustomData *c2, const int total_length, Mesh *m1, const float thresh)
|
||||
{
|
||||
const float thresh_sq = thresh * thresh;
|
||||
CustomDataLayer *l1, *l2;
|
||||
|
@ -715,19 +715,19 @@ const char *BKE_mesh_cmp(Mesh *me1, Mesh *me2, float thresh)
|
|||
return "Number of loops don't match";
|
||||
}
|
||||
|
||||
if ((c = customdata_compare(&me1->vdata, &me2->vdata, me1->totvert, me1, me2, thresh))) {
|
||||
if ((c = customdata_compare(&me1->vdata, &me2->vdata, me1->totvert, me1, thresh))) {
|
||||
return cmpcode_to_str(c);
|
||||
}
|
||||
|
||||
if ((c = customdata_compare(&me1->edata, &me2->edata, me1->totedge, me1, me2, thresh))) {
|
||||
if ((c = customdata_compare(&me1->edata, &me2->edata, me1->totedge, me1, thresh))) {
|
||||
return cmpcode_to_str(c);
|
||||
}
|
||||
|
||||
if ((c = customdata_compare(&me1->ldata, &me2->ldata, me1->totloop, me1, me2, thresh))) {
|
||||
if ((c = customdata_compare(&me1->ldata, &me2->ldata, me1->totloop, me1, thresh))) {
|
||||
return cmpcode_to_str(c);
|
||||
}
|
||||
|
||||
if ((c = customdata_compare(&me1->pdata, &me2->pdata, me1->totpoly, me1, me2, thresh))) {
|
||||
if ((c = customdata_compare(&me1->pdata, &me2->pdata, me1->totpoly, me1, thresh))) {
|
||||
return cmpcode_to_str(c);
|
||||
}
|
||||
|
||||
|
@ -1481,14 +1481,13 @@ void BKE_mesh_looptri_get_real_edges(const MEdge *edges,
|
|||
const int corner_1 = tri->tri[i];
|
||||
const int corner_2 = tri->tri[i_next];
|
||||
const int vert_1 = corner_verts[corner_1];
|
||||
const int vert_2 = corner_verts[corner_1];
|
||||
const int edge_1 = corner_edges[corner_1];
|
||||
const int edge_2 = corner_edges[corner_1];
|
||||
const MEdge *e = &edges[edge_1];
|
||||
const int vert_2 = corner_verts[corner_2];
|
||||
const int edge = corner_edges[corner_1];
|
||||
const MEdge *e = &edges[edge];
|
||||
|
||||
bool is_real = (vert_1 == e->v1 && vert_2 == e->v2) || (vert_1 == e->v2 && vert_2 == e->v1);
|
||||
|
||||
r_edges[i] = is_real ? edge_1 : -1;
|
||||
r_edges[i] = is_real ? edge : -1;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -309,7 +309,7 @@ void BKE_mesh_foreach_mapped_subdiv_face_center(
|
|||
{
|
||||
const float(*positions)[3] = BKE_mesh_positions(mesh);
|
||||
const MPoly *mp = BKE_mesh_polys(mesh);
|
||||
const Span<int> corner_verts = mesh->corner_verts();
|
||||
const blender::Span<int> corner_verts = mesh->corner_verts();
|
||||
const float(*vert_normals)[3] = (flag & MESH_FOREACH_USE_NORMAL) ?
|
||||
BKE_mesh_vertex_normals_ensure(mesh) :
|
||||
nullptr;
|
||||
|
|
|
@ -1657,6 +1657,10 @@ MLoop *BKE_mesh_legacy_convert_corners_to_loops(
|
|||
void BKE_mesh_legacy_convert_loops_to_corners(Mesh *mesh)
|
||||
{
|
||||
using namespace blender;
|
||||
if (CustomData_get_layer_named(&mesh->ldata, CD_PROP_INT32, ".corner_vert") &&
|
||||
CustomData_get_layer_named(&mesh->ldata, CD_PROP_INT32, ".corner_edge")) {
|
||||
return;
|
||||
}
|
||||
const Span<MLoop> loops(static_cast<MLoop *>(CustomData_get_layer(&mesh->ldata, CD_MLOOP)),
|
||||
mesh->totloop);
|
||||
MutableSpan<int> corner_verts(
|
||||
|
|
|
@ -397,16 +397,15 @@ void BKE_mesh_edge_loop_map_create(MeshElemMap **r_map,
|
|||
int *indices = static_cast<int *>(MEM_mallocN(sizeof(int) * size_t(totloop) * 2, __func__));
|
||||
int *index_step;
|
||||
const MPoly *mp;
|
||||
int i;
|
||||
|
||||
/* count face users */
|
||||
for (const int i : IndexRange(totloop)) {
|
||||
for (const int64_t i : IndexRange(totloop)) {
|
||||
map[corner_edges[i]].count += 2;
|
||||
}
|
||||
|
||||
/* create offsets */
|
||||
index_step = indices;
|
||||
for (i = 0; i < totedge; i++) {
|
||||
for (int i = 0; i < totedge; i++) {
|
||||
map[i].indices = index_step;
|
||||
index_step += map[i].count;
|
||||
|
||||
|
@ -414,11 +413,12 @@ void BKE_mesh_edge_loop_map_create(MeshElemMap **r_map,
|
|||
map[i].count = 0;
|
||||
}
|
||||
|
||||
int i;
|
||||
|
||||
/* assign loop-edge users */
|
||||
for (i = 0, mp = mpoly; i < totpoly; mp++, i++) {
|
||||
MeshElemMap *map_ele;
|
||||
const int max_loop = mp->loopstart + mp->totloop;
|
||||
int j = mp->loopstart;
|
||||
for (int j = mp->loopstart; j < max_loop; j++) {
|
||||
map_ele = &map[corner_edges[j]];
|
||||
map_ele->indices[map_ele->count++] = j;
|
||||
|
@ -1020,8 +1020,8 @@ static bool mesh_check_island_boundary_uv(const MPoly * /*mp*/,
|
|||
|
||||
BLI_assert(edge_to_loops->count >= 2 && (edge_to_loops->count % 2) == 0);
|
||||
|
||||
const uint v1 = corner_verts[edge_to_loops->indices[0]];
|
||||
const uint v2 = corner_verts[edge_to_loops->indices[1]];
|
||||
const int v1 = corner_verts[edge_to_loops->indices[0]];
|
||||
const int v2 = corner_verts[edge_to_loops->indices[1]];
|
||||
const float *uvco_v1 = luvs[edge_to_loops->indices[0]].uv;
|
||||
const float *uvco_v2 = luvs[edge_to_loops->indices[1]].uv;
|
||||
for (int i = 2; i < edge_to_loops->count; i += 2) {
|
||||
|
|
|
@ -464,7 +464,7 @@ Mesh *BKE_mesh_merge_verts(Mesh *mesh,
|
|||
uint v2 = mlv;
|
||||
BLI_assert(v1 != v2);
|
||||
if (BLI_edgehash_ensure_p(ehash, v1, v2, &val_p)) {
|
||||
last_valid_corner_edge = POINTER_AS_INT(*val_p);
|
||||
*last_valid_corner_edge = POINTER_AS_INT(*val_p);
|
||||
}
|
||||
else {
|
||||
const int new_eidx = STACK_SIZE(medge);
|
||||
|
@ -525,7 +525,7 @@ Mesh *BKE_mesh_merge_verts(Mesh *mesh,
|
|||
*first_valid_corner_vert;
|
||||
BLI_assert(v1 != v2);
|
||||
if (BLI_edgehash_ensure_p(ehash, v1, v2, &val_p)) {
|
||||
last_valid_corner_edge = POINTER_AS_INT(*val_p);
|
||||
*last_valid_corner_edge = POINTER_AS_INT(*val_p);
|
||||
}
|
||||
else {
|
||||
const int new_eidx = STACK_SIZE(medge);
|
||||
|
|
|
@ -346,7 +346,6 @@ Mesh *BKE_mesh_mirror_apply_mirror_on_axis_for_modifier(MirrorModifierData *mmd,
|
|||
|
||||
/* adjust mirrored loop vertex and edge indices */
|
||||
int *corner_verts = BKE_mesh_corner_verts_for_write(result) + maxLoops;
|
||||
int *corner_edges = BKE_mesh_corner_edges_for_write(result) + maxLoops;
|
||||
for (i = 0; i < maxLoops; i++) {
|
||||
corner_verts[i] += maxVerts;
|
||||
corner_edges[i] += maxEdges;
|
||||
|
|
|
@ -234,7 +234,7 @@ void BKE_mesh_calc_normals_poly(const float (*positions)[3],
|
|||
int mpoly_len,
|
||||
float (*r_poly_normals)[3])
|
||||
{
|
||||
calculate_normals_poly({reinterpret_cast<const float3 *>(positions), mpoly_len},
|
||||
calculate_normals_poly({reinterpret_cast<const float3 *>(positions), verts_num},
|
||||
{mpoly, mpoly_len},
|
||||
{corner_verts, mloop_len},
|
||||
{reinterpret_cast<float3 *>(r_poly_normals), mpoly_len});
|
||||
|
|
|
@ -133,10 +133,10 @@ static Mesh *remesh_quadriflow(const Mesh *input_mesh,
|
|||
const int loopstart = i * 4;
|
||||
poly.loopstart = loopstart;
|
||||
poly.totloop = 4;
|
||||
corner_verts[loopstart] = = qrd.out_faces[loopstart];
|
||||
corner_verts[loopstart + 1] = = qrd.out_faces[loopstart + 1];
|
||||
corner_verts[loopstart + 2] = = qrd.out_faces[loopstart + 2];
|
||||
corner_verts[loopstart + 3] = = qrd.out_faces[loopstart + 3];
|
||||
corner_verts[loopstart] = qrd.out_faces[loopstart];
|
||||
corner_verts[loopstart + 1] = qrd.out_faces[loopstart + 1];
|
||||
corner_verts[loopstart + 2] = qrd.out_faces[loopstart + 2];
|
||||
corner_verts[loopstart + 3] = qrd.out_faces[loopstart + 3];
|
||||
}
|
||||
|
||||
BKE_mesh_calc_edges(mesh, false, false);
|
||||
|
|
|
@ -52,22 +52,22 @@ BLI_INLINE void mesh_calc_tessellation_for_face_impl(const int *corner_verts,
|
|||
const uint mp_loopstart = uint(mpoly[poly_index].loopstart);
|
||||
const uint mp_totloop = uint(mpoly[poly_index].totloop);
|
||||
|
||||
#define ML_TO_MLT(i1, i2, i3) \
|
||||
{ \
|
||||
ARRAY_SET_ITEMS(mlt->tri, mp_loopstart + i1, mp_loopstart + i2, mp_loopstart + i3); \
|
||||
mlt->poly = poly_index; \
|
||||
} \
|
||||
((void)0)
|
||||
auto create_tri = [&](uint i1, uint i2, uint i3) {
|
||||
mlt->tri[0] = mp_loopstart + i1;
|
||||
mlt->tri[1] = mp_loopstart + i2;
|
||||
mlt->tri[2] = mp_loopstart + i3;
|
||||
mlt->poly = poly_index;
|
||||
};
|
||||
|
||||
switch (mp_totloop) {
|
||||
case 3: {
|
||||
ML_TO_MLT(0, 1, 2);
|
||||
create_tri(0, 1, 2);
|
||||
break;
|
||||
}
|
||||
case 4: {
|
||||
ML_TO_MLT(0, 1, 2);
|
||||
create_tri(0, 1, 2);
|
||||
MLoopTri *mlt_a = mlt++;
|
||||
ML_TO_MLT(0, 2, 3);
|
||||
create_tri(0, 2, 3);
|
||||
MLoopTri *mlt_b = mlt;
|
||||
|
||||
if (UNLIKELY(face_normal ? is_quad_flip_v3_first_third_fast_with_normal(
|
||||
|
@ -100,10 +100,9 @@ BLI_INLINE void mesh_calc_tessellation_for_face_impl(const int *corner_verts,
|
|||
zero_v3(normal);
|
||||
|
||||
/* Calc normal, flipped: to get a positive 2D cross product. */
|
||||
int corner_i = mp_loopstart;
|
||||
co_prev = positions[corner_verts[mp_totloop - 1]];
|
||||
for (uint j = 0; j < mp_totloop; j++, corner_i++) {
|
||||
co_curr = positions[corner_verts[corner_i]];
|
||||
for (uint j = 0; j < mp_totloop; j++) {
|
||||
co_curr = positions[corner_verts[mp_loopstart + j]];
|
||||
add_newell_cross_v3_v3v3(normal, co_prev, co_curr);
|
||||
co_prev = co_curr;
|
||||
}
|
||||
|
@ -128,9 +127,8 @@ BLI_INLINE void mesh_calc_tessellation_for_face_impl(const int *corner_verts,
|
|||
float(*projverts)[2] = static_cast<float(*)[2]>(
|
||||
BLI_memarena_alloc(pf_arena, sizeof(*projverts) * size_t(mp_totloop)));
|
||||
|
||||
int corner_i = mp_loopstart;
|
||||
for (uint j = 0; j < mp_totloop; j++, corner_i++) {
|
||||
mul_v2_m3v3(projverts[j], axis_mat, positions[corner_verts[corner_i]]);
|
||||
for (uint j = 0; j < mp_totloop; j++) {
|
||||
mul_v2_m3v3(projverts[j], axis_mat, positions[corner_verts[mp_loopstart + j]]);
|
||||
}
|
||||
|
||||
BLI_polyfill_calc_arena(projverts, mp_totloop, 1, tris, pf_arena);
|
||||
|
@ -138,7 +136,7 @@ BLI_INLINE void mesh_calc_tessellation_for_face_impl(const int *corner_verts,
|
|||
/* Apply fill. */
|
||||
for (uint j = 0; j < totfilltri; j++, mlt++) {
|
||||
const uint *tri = tris[j];
|
||||
ML_TO_MLT(tri[0], tri[1], tri[2]);
|
||||
create_tri(tri[0], tri[1], tri[2]);
|
||||
}
|
||||
|
||||
BLI_memarena_clear(pf_arena);
|
||||
|
|
|
@ -615,11 +615,11 @@ bool BKE_mesh_validate_arrays(Mesh *mesh,
|
|||
const int vert_i = corner_verts[sp->loopstart + j];
|
||||
if (vert_i >= totvert) {
|
||||
/* Invalid vert idx. */
|
||||
PRINT_ERR("\tLoop %u has invalid vert reference (%u)", sp->loopstart + j, vert_i);
|
||||
PRINT_ERR("\tLoop %d has invalid vert reference (%d)", sp->loopstart + j, vert_i);
|
||||
sp->invalid = true;
|
||||
}
|
||||
else if (BLI_BITMAP_TEST(vert_tag, vert_i)) {
|
||||
PRINT_ERR("\tPoly %u has duplicated vert reference at corner (%u)", i, j);
|
||||
PRINT_ERR("\tPoly %d has duplicated vert reference at corner (%d)", i, j);
|
||||
sp->invalid = true;
|
||||
}
|
||||
else {
|
||||
|
@ -656,7 +656,7 @@ bool BKE_mesh_validate_arrays(Mesh *mesh,
|
|||
int prev_e = edge_i;
|
||||
corner_edges[corner_i] = POINTER_AS_INT(BLI_edgehash_lookup(edge_hash, v1, v2));
|
||||
fix_flag.loops_edge = true;
|
||||
PRINT_ERR("\tLoop %u has invalid edge reference (%d), fixed using edge %u",
|
||||
PRINT_ERR("\tLoop %u has invalid edge reference (%d), fixed using edge %d",
|
||||
corner_i,
|
||||
prev_e,
|
||||
corner_edges[corner_i]);
|
||||
|
@ -679,14 +679,14 @@ bool BKE_mesh_validate_arrays(Mesh *mesh,
|
|||
fix_flag.loops_edge = true;
|
||||
PRINT_ERR(
|
||||
"\tPoly %u has invalid edge reference (%d, is_removed: %d), fixed using edge "
|
||||
"%u",
|
||||
"%d",
|
||||
sp->index,
|
||||
prev_e,
|
||||
IS_REMOVED_EDGE(me),
|
||||
corner_edges[corner_i]);
|
||||
}
|
||||
else {
|
||||
PRINT_ERR("\tPoly %u has invalid edge reference (%u)", sp->index, edge_i);
|
||||
PRINT_ERR("\tPoly %u has invalid edge reference (%d)", sp->index, edge_i);
|
||||
sp->invalid = true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -48,9 +48,9 @@ static void multires_subdivide_create_object_space_linear_grids(Mesh *mesh)
|
|||
int prev_loop_index = l - 1 >= 0 ? loop_index - 1 : loop_index + poly->totloop - 1;
|
||||
int next_loop_index = l + 1 < poly->totloop ? loop_index + 1 : poly->loopstart;
|
||||
|
||||
const int vert = &corner_verts[loop_index];
|
||||
const int vert_next = &corner_verts[next_loop_index];
|
||||
const int vert_prev = &corner_verts[prev_loop_index];
|
||||
const int vert = corner_verts[loop_index];
|
||||
const int vert_next = corner_verts[next_loop_index];
|
||||
const int vert_prev = corner_verts[prev_loop_index];
|
||||
|
||||
copy_v3_v3(disps[0], poly_center);
|
||||
mid_v3_v3v3(disps[1], positions[vert], positions[vert_next]);
|
||||
|
|
|
@ -667,6 +667,7 @@ static void pbvh_draw_args_init(PBVH *pbvh, PBVH_GPU_Args *args, PBVHNode *node)
|
|||
args->face_sets_color_seed = pbvh->face_sets_color_seed;
|
||||
args->mesh_positions = pbvh->mesh_positions;
|
||||
args->corner_verts = pbvh->corner_verts;
|
||||
args->corner_edges = pbvh->mesh ? BKE_mesh_corner_edges(pbvh->mesh) : NULL;
|
||||
args->mpoly = pbvh->mpoly;
|
||||
args->mlooptri = pbvh->looptri;
|
||||
|
||||
|
|
|
@ -162,8 +162,6 @@ static void subdiv_foreach_ctx_count(SubdivForeachTaskContext *ctx)
|
|||
const int num_inner_vertices_per_noquad_patch = (no_quad_patch_resolution - 2) *
|
||||
(no_quad_patch_resolution - 2);
|
||||
const Mesh *coarse_mesh = ctx->coarse_mesh;
|
||||
const MPoly *coarse_mpoly = BKE_mesh_polys(coarse_mesh);
|
||||
const int *coarse_corner_edges = BKE_mesh_corner_edges(coarse_mesh);
|
||||
ctx->num_subdiv_vertices = coarse_mesh->totvert;
|
||||
ctx->num_subdiv_edges = coarse_mesh->totedge * (num_subdiv_vertices_per_coarse_edge + 1);
|
||||
/* Calculate extra vertices and edges created by non-loose geometry. */
|
||||
|
@ -171,7 +169,7 @@ static void subdiv_foreach_ctx_count(SubdivForeachTaskContext *ctx)
|
|||
const MPoly *coarse_poly = &ctx->coarse_polys[poly_index];
|
||||
const int num_ptex_faces_per_poly = num_ptex_faces_per_poly_get(coarse_poly);
|
||||
for (int corner = 0; corner < coarse_poly->totloop; corner++) {
|
||||
const int coarse_edge_i = coarse_corner_edges[coarse_poly->loopstart + corner];
|
||||
const int coarse_edge_i = ctx->coarse_corner_edges[coarse_poly->loopstart + corner];
|
||||
const bool is_edge_used = BLI_BITMAP_TEST_BOOL(ctx->coarse_edges_used_map, coarse_edge_i);
|
||||
/* Edges which aren't counted yet. */
|
||||
if (!is_edge_used) {
|
||||
|
|
|
@ -50,6 +50,7 @@
|
|||
#include "BKE_lib_id.h"
|
||||
#include "BKE_main.h"
|
||||
#include "BKE_mesh.h"
|
||||
#include "BKE_mesh_legacy_convert.h"
|
||||
#include "BKE_multires.h"
|
||||
#include "BKE_node.h"
|
||||
|
||||
|
@ -821,6 +822,7 @@ void blo_do_versions_290(FileData *fd, Library *UNUSED(lib), Main *bmain)
|
|||
for (const MPoly *mp = BKE_mesh_polys(me), *mp_end = mp + me->totpoly; mp < mp_end; mp++) {
|
||||
if (mp->totloop == 2) {
|
||||
bool changed;
|
||||
BKE_mesh_legacy_convert_loops_to_corners(me);
|
||||
BKE_mesh_validate_arrays(me,
|
||||
BKE_mesh_positions_for_write(me),
|
||||
me->totvert,
|
||||
|
@ -828,7 +830,8 @@ void blo_do_versions_290(FileData *fd, Library *UNUSED(lib), Main *bmain)
|
|||
me->totedge,
|
||||
(MFace *)CustomData_get_layer(&me->fdata, CD_MFACE),
|
||||
me->totface,
|
||||
BKE_mesh_loops_for_write(me),
|
||||
BKE_mesh_corner_verts_for_write(me),
|
||||
BKE_mesh_corner_edges_for_write(me),
|
||||
me->totloop,
|
||||
BKE_mesh_polys_for_write(me),
|
||||
me->totpoly,
|
||||
|
|
|
@ -41,6 +41,7 @@ typedef struct PBVH_GPU_Args {
|
|||
const struct Mesh *me;
|
||||
const float (*mesh_positions)[3];
|
||||
const int *corner_verts;
|
||||
const int *corner_edges;
|
||||
const struct MPoly *mpoly;
|
||||
int mesh_verts_num, mesh_faces_num, mesh_grids_num;
|
||||
struct CustomData *vdata, *ldata, *pdata;
|
||||
|
|
|
@ -39,7 +39,6 @@ static void extract_sculpt_data_init(const MeshRenderData *mr,
|
|||
GPUVertBuf *vbo = static_cast<GPUVertBuf *>(buf);
|
||||
GPUVertFormat *format = get_sculpt_data_format();
|
||||
|
||||
CustomData *cd_ldata = (mr->extract_type == MR_EXTRACT_BMESH) ? &mr->bm->ldata : &mr->me->ldata;
|
||||
CustomData *cd_vdata = (mr->extract_type == MR_EXTRACT_BMESH) ? &mr->bm->vdata : &mr->me->vdata;
|
||||
CustomData *cd_pdata = (mr->extract_type == MR_EXTRACT_BMESH) ? &mr->bm->pdata : &mr->me->pdata;
|
||||
|
||||
|
|
|
@ -71,7 +71,7 @@ struct PuffOperationExecutor {
|
|||
Object *surface_ob_ = nullptr;
|
||||
Mesh *surface_ = nullptr;
|
||||
Span<float3> surface_positions_;
|
||||
Span<int> surface_loops_;
|
||||
Span<int> surface_corner_verts_;
|
||||
Span<MLoopTri> surface_looptris_;
|
||||
Span<float3> corner_normals_su_;
|
||||
BVHTreeFromMesh surface_bvh_;
|
||||
|
@ -120,7 +120,7 @@ struct PuffOperationExecutor {
|
|||
surface_->totloop};
|
||||
|
||||
surface_positions_ = surface_->positions();
|
||||
surface_loops_ = surface_->loops();
|
||||
surface_corner_verts_ = surface_->corner_verts();
|
||||
surface_looptris_ = surface_->looptris();
|
||||
BKE_bvhtree_from_mesh_get(&surface_bvh_, surface_, BVHTREE_FROM_LOOPTRI, 2);
|
||||
BLI_SCOPED_DEFER([&]() { free_bvhtree_from_mesh(&surface_bvh_); });
|
||||
|
@ -291,9 +291,9 @@ struct PuffOperationExecutor {
|
|||
|
||||
const MLoopTri &looptri = surface_looptris_[nearest.index];
|
||||
const float3 closest_pos_su = nearest.co;
|
||||
const float3 &v0_su = surface_positions_[surface_loops_[looptri.tri[0]].v];
|
||||
const float3 &v1_su = surface_positions_[surface_loops_[looptri.tri[1]].v];
|
||||
const float3 &v2_su = surface_positions_[surface_loops_[looptri.tri[2]].v];
|
||||
const float3 &v0_su = surface_positions_[surface_corner_verts_[looptri.tri[0]]];
|
||||
const float3 &v1_su = surface_positions_[surface_corner_verts_[looptri.tri[1]]];
|
||||
const float3 &v2_su = surface_positions_[surface_corner_verts_[looptri.tri[2]]];
|
||||
float3 bary_coords;
|
||||
interp_weights_tri_v3(bary_coords, v0_su, v1_su, v2_su, closest_pos_su);
|
||||
const float3 normal_su = geometry::compute_surface_point_normal(
|
||||
|
|
|
@ -3341,7 +3341,7 @@ static void do_vpaint_brush_smear(bContext *C,
|
|||
UNUSED_VARS_NDEBUG(l_index);
|
||||
const MPoly *mp = &ss->mpoly[p_index];
|
||||
if (!use_face_sel || select_poly[p_index]) {
|
||||
for (int k = 0; k < mp->totloop; k++, ml_other++) {
|
||||
for (int k = 0; k < mp->totloop; k++) {
|
||||
const int other_corner_i = mp->loopstart + k;
|
||||
const int v_other_index = ss->corner_verts[other_corner_i];
|
||||
if (v_other_index != v_index) {
|
||||
|
@ -3359,7 +3359,7 @@ static void do_vpaint_brush_smear(bContext *C,
|
|||
int elem_index;
|
||||
|
||||
if constexpr (domain == ATTR_DOMAIN_POINT) {
|
||||
elem_index = ml_other->v;
|
||||
elem_index = v_other_index;
|
||||
}
|
||||
else {
|
||||
elem_index = mp->loopstart + k;
|
||||
|
|
|
@ -150,7 +150,7 @@ static bool sculpt_expand_is_face_in_active_component(SculptSession *ss,
|
|||
ExpandCache *expand_cache,
|
||||
const int f)
|
||||
{
|
||||
const int vert_i = &ss->corner_verts[ss->mpoly[f].loopstart];
|
||||
const int vert_i = ss->corner_verts[ss->mpoly[f].loopstart];
|
||||
return sculpt_expand_is_vert_in_active_component(ss, expand_cache, BKE_pbvh_make_vref(vert_i));
|
||||
}
|
||||
|
||||
|
@ -1090,7 +1090,7 @@ static void sculpt_expand_snap_initialize_from_enabled(SculptSession *ss,
|
|||
const MPoly *poly = &ss->mpoly[p];
|
||||
bool any_disabled = false;
|
||||
for (int l = 0; l < poly->totloop; l++) {
|
||||
const int vert_i = &ss->corner_verts[l + poly->loopstart];
|
||||
const int vert_i = ss->corner_verts[l + poly->loopstart];
|
||||
if (!BLI_BITMAP_TEST(enabled_verts, vert_i)) {
|
||||
any_disabled = true;
|
||||
break;
|
||||
|
@ -1976,7 +1976,7 @@ static void sculpt_expand_delete_face_set_id(int *r_face_sets,
|
|||
int other_id = delete_id;
|
||||
const MPoly *c_poly = &polys[f_index];
|
||||
for (int l = 0; l < c_poly->totloop; l++) {
|
||||
const int vert_i = &corner_verts[c_poly->loopstart + l];
|
||||
const int vert_i = corner_verts[c_poly->loopstart + l];
|
||||
const MeshElemMap *vert_map = &pmap[vert_i];
|
||||
for (int i = 0; i < vert_map->count; i++) {
|
||||
|
||||
|
|
|
@ -210,8 +210,8 @@ std::unique_ptr<ColumnValues> GeometryDataSource::get_column_values(
|
|||
VArray<int>::ForSpan(mesh->corner_verts()));
|
||||
}
|
||||
if (STREQ(column_id.name, "Edge")) {
|
||||
return std::make_unique<ColumnValues>(
|
||||
column_id.name, VArray<int>::ForSpan(mesh->corner_edges());
|
||||
return std::make_unique<ColumnValues>(column_id.name,
|
||||
VArray<int>::ForSpan(mesh->corner_edges()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -429,7 +429,7 @@ void USDGenericMeshWriter::write_normals(const Mesh *mesh, pxr::UsdGeomMesh usd_
|
|||
else {
|
||||
/* Smooth shaded, use individual vert normals. */
|
||||
for (const int vert_i : corner_verts.slice(poly.loopstart, poly.totloop)) {
|
||||
loop_normals.push_back(pxr::GfVec3f(vert_normals[corner_verts]));
|
||||
loop_normals.push_back(pxr::GfVec3f(vert_normals[vert_i]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -579,7 +579,7 @@ static int rna_MeshLoop_edge_index_get(PointerRNA *ptr)
|
|||
|
||||
static void rna_MeshLoop_edge_index_set(PointerRNA *ptr, int value)
|
||||
{
|
||||
const Mesh *me = rna_mesh(ptr);
|
||||
Mesh *me = rna_mesh(ptr);
|
||||
const int index = rna_MeshLoop_index_get(ptr);
|
||||
BKE_mesh_corner_edges_for_write(me)[index] = value;
|
||||
}
|
||||
|
|
|
@ -240,8 +240,6 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *
|
|||
uint edge_offset;
|
||||
|
||||
MPoly *mp_new;
|
||||
int *corner_verts_new;
|
||||
int *corner_edges_new;
|
||||
MEdge *med_new, *med_new_firstloop;
|
||||
Object *ob_axis = ltmd->ob_axis;
|
||||
|
||||
|
@ -391,8 +389,8 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *
|
|||
float(*positions_new)[3] = BKE_mesh_positions_for_write(result);
|
||||
MEdge *medge_new = BKE_mesh_edges_for_write(result);
|
||||
MPoly *mpoly_new = BKE_mesh_polys_for_write(result);
|
||||
int *corner_verts_orig = BKE_mesh_corner_verts_for_write(result);
|
||||
int *corner_edges_orig = BKE_mesh_corner_edges_for_write(result);
|
||||
int *corner_verts_new = BKE_mesh_corner_verts_for_write(result);
|
||||
int *corner_edges_new = BKE_mesh_corner_edges_for_write(result);
|
||||
|
||||
if (!CustomData_has_layer(&result->pdata, CD_ORIGINDEX)) {
|
||||
CustomData_add_layer(&result->pdata, CD_ORIGINDEX, CD_SET_DEFAULT, NULL, (int)maxPolys);
|
||||
|
@ -454,8 +452,8 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *
|
|||
|
||||
uint k;
|
||||
for (k = loopstart; k < loopend; k++) {
|
||||
const int vert_i = corner_verts_orig[loopstart + k];
|
||||
const int edge_i = corner_edges_orig[loopstart + k];
|
||||
const uint vert_i = (uint)corner_verts_orig[loopstart + k];
|
||||
const uint edge_i = (uint)corner_edges_orig[loopstart + k];
|
||||
edge_poly_map[edge_i] = i;
|
||||
vert_loop_map[vert_i] = k;
|
||||
|
||||
|
@ -930,18 +928,18 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *
|
|||
/* Loop-Data */
|
||||
if (!(close && step == step_last)) {
|
||||
/* regular segments */
|
||||
corner_verts_new[dst_corner_i + quad_ord[0]] = i1;
|
||||
corner_verts_new[dst_corner_i + quad_ord[0]] = i1;
|
||||
corner_verts_new[dst_corner_i + quad_ord[1]] = i2;
|
||||
corner_verts_new[dst_corner_i + quad_ord[2]] = i2 + totvert;
|
||||
corner_verts_new[dst_corner_i + quad_ord[3]] = i1 + totvert;
|
||||
corner_verts_new[dst_corner_i + quad_ord[0]] = (int)i1;
|
||||
corner_verts_new[dst_corner_i + quad_ord[0]] = (int)i1;
|
||||
corner_verts_new[dst_corner_i + quad_ord[1]] = (int)i2;
|
||||
corner_verts_new[dst_corner_i + quad_ord[2]] = (int)(i2 + totvert);
|
||||
corner_verts_new[dst_corner_i + quad_ord[3]] = (int)(i1 + totvert);
|
||||
|
||||
corner_edges_new[dst_corner_i + quad_ord_ofs[0]] =
|
||||
step == 0 ? i : (edge_offset + step + (i * (step_tot - 1))) - 1;
|
||||
corner_edges_new[dst_corner_i + quad_ord_ofs[1]] = totedge + i2;
|
||||
corner_edges_new[dst_corner_i + quad_ord_ofs[2]] = edge_offset + step +
|
||||
(i * (step_tot - 1));
|
||||
corner_edges_new[dst_corner_i + quad_ord_ofs[3]] = totedge + i1;
|
||||
(int)(step == 0 ? i : (edge_offset + step + (i * (step_tot - 1))) - 1);
|
||||
corner_edges_new[dst_corner_i + quad_ord_ofs[1]] = (int)(totedge + i2);
|
||||
corner_edges_new[dst_corner_i + quad_ord_ofs[2]] = (int)(edge_offset + step +
|
||||
(i * (step_tot - 1)));
|
||||
corner_edges_new[dst_corner_i + quad_ord_ofs[3]] = (int)(totedge + i1);
|
||||
|
||||
/* new vertical edge */
|
||||
if (step) { /* The first set is already done */
|
||||
|
@ -955,17 +953,16 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *
|
|||
}
|
||||
else {
|
||||
/* last segment */
|
||||
corner_verts_new[dst_corner_i + quad_ord[0]] = i1;
|
||||
corner_verts_new[dst_corner_i + quad_ord[1]] = i2;
|
||||
corner_verts_new[dst_corner_i + quad_ord[2]] = med_new_firstloop->v2;
|
||||
corner_verts_new[dst_corner_i + quad_ord[3]] = med_new_firstloop->v1;
|
||||
corner_verts_new[dst_corner_i + quad_ord[0]] = (int)i1;
|
||||
corner_verts_new[dst_corner_i + quad_ord[1]] = (int)i2;
|
||||
corner_verts_new[dst_corner_i + quad_ord[2]] = (int)med_new_firstloop->v2;
|
||||
corner_verts_new[dst_corner_i + quad_ord[3]] = (int)med_new_firstloop->v1;
|
||||
|
||||
corner_edges_new[dst_corner_i + quad_ord_ofs[0]] = (edge_offset + step +
|
||||
(i * (step_tot - 1))) -
|
||||
1;
|
||||
corner_edges_new[dst_corner_i + quad_ord_ofs[1]] = totedge + i2;
|
||||
corner_edges_new[dst_corner_i + quad_ord_ofs[2]] = i;
|
||||
corner_edges_new[dst_corner_i + quad_ord_ofs[3]] = totedge + i1;
|
||||
corner_edges_new[dst_corner_i + quad_ord_ofs[0]] =
|
||||
(int)((edge_offset + step + (i * (step_tot - 1))) - 1);
|
||||
corner_edges_new[dst_corner_i + quad_ord_ofs[1]] = (int)(totedge + i2);
|
||||
corner_edges_new[dst_corner_i + quad_ord_ofs[2]] = (int)i;
|
||||
corner_edges_new[dst_corner_i + quad_ord_ofs[3]] = (int)(totedge + i1);
|
||||
}
|
||||
|
||||
mp_new++;
|
||||
|
|
|
@ -24,10 +24,6 @@
|
|||
#include "MOD_solidify_util.h" /* own include */
|
||||
#include "MOD_util.h"
|
||||
|
||||
#ifdef __GNUC__
|
||||
# pragma GCC diagnostic error "-Wsign-conversion"
|
||||
#endif
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
/** \name High Quality Normal Calculation Function
|
||||
* \{ */
|
||||
|
@ -265,7 +261,7 @@ Mesh *MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContex
|
|||
const int vert_i = orig_corner_verts[corner_i];
|
||||
const int prev_vert_i = orig_corner_verts[corner_i_prev];
|
||||
/* add edge user */
|
||||
eidx = orig_corner_edges[corner_i_prev];
|
||||
eidx = (int)(orig_corner_edges[corner_i_prev]);
|
||||
if (edge_users[eidx] == INVALID_UNUSED) {
|
||||
ed = orig_medge + eidx;
|
||||
BLI_assert(ELEM(prev_vert_i, ed->v1, ed->v2) && ELEM(vert_i, ed->v1, ed->v2));
|
||||
|
@ -530,7 +526,7 @@ Mesh *MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContex
|
|||
const int vert_i = orig_corner_verts[corner_i];
|
||||
const int prev_vert_i = orig_corner_verts[prev_corner_i];
|
||||
/* add edge user */
|
||||
eidx = orig_corner_edges[prev_corner_i];
|
||||
eidx = (int)orig_corner_edges[prev_corner_i];
|
||||
const MEdge *ed = orig_medge + eidx;
|
||||
BLI_assert(ELEM(prev_vert_i, ed->v1, ed->v2) && ELEM(vert_i, ed->v1, ed->v2));
|
||||
char flip = (char)((prev_vert_i > vert_i) == (ed->v1 < ed->v2));
|
||||
|
|
|
@ -22,10 +22,6 @@
|
|||
#include "MOD_solidify_util.h" /* Own include. */
|
||||
#include "MOD_util.h"
|
||||
|
||||
#ifdef __GNUC__
|
||||
# pragma GCC diagnostic error "-Wsign-conversion"
|
||||
#endif
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
/** \name Local Utilities
|
||||
* \{ */
|
||||
|
@ -2531,8 +2527,8 @@ Mesh *MOD_solidify_nonmanifold_modifyMesh(ModifierData *md,
|
|||
valid_edges++;
|
||||
const uint flip = (uint)(vm[orig_medge[new_edge->old_edge].v2] ==
|
||||
vm[orig_corner_verts[loopstart + j]]);
|
||||
BLI_assert(flip ||
|
||||
vm[orig_medge[new_edge->old_edge].v1] == vm[orig_corner_verts[loopstart + j]]);
|
||||
BLI_assert(flip || vm[orig_medge[new_edge->old_edge].v1] ==
|
||||
vm[orig_corner_verts[loopstart + j]]);
|
||||
/* The vert that's in the current loop. */
|
||||
const uint new_v1 = new_edge->link_edge_groups[flip]->new_vert;
|
||||
/* The vert that's in the next loop. */
|
||||
|
|
|
@ -290,15 +290,15 @@ static int buildAdjacencyMap(const MPoly *poly,
|
|||
/* Find polygons adjacent to edges. */
|
||||
for (int i = 0; i < polys_num; i++, poly++) {
|
||||
for (int j = 0; j < poly->totloop; j++) {
|
||||
const int edge = corner_edges[poly->loopstart + j];
|
||||
if (edge_polys[edge].num == 0) {
|
||||
edge_polys[edge].polys[0] = i;
|
||||
edge_polys[edge].polys[1] = -1;
|
||||
edge_polys[edge].num++;
|
||||
const int edge_i = corner_edges[poly->loopstart + j];
|
||||
if (edge_polys[edge_i].num == 0) {
|
||||
edge_polys[edge_i].polys[0] = i;
|
||||
edge_polys[edge_i].polys[1] = -1;
|
||||
edge_polys[edge_i].num++;
|
||||
}
|
||||
else if (edge_polys[edge].num == 1) {
|
||||
edge_polys[edge].polys[1] = i;
|
||||
edge_polys[edge].num++;
|
||||
else if (edge_polys[edge_i].num == 1) {
|
||||
edge_polys[edge_i].polys[1] = i;
|
||||
edge_polys[edge_i].num++;
|
||||
}
|
||||
else {
|
||||
return MOD_SDEF_BIND_RESULT_NONMANY_ERR;
|
||||
|
|
|
@ -125,8 +125,8 @@ static Mesh *hull_from_bullet(const Mesh *mesh, Span<float3> coords)
|
|||
face.loopstart = j;
|
||||
face.totloop = len;
|
||||
for (const int k : IndexRange(len)) {
|
||||
mesh_corner_verts[dst_corner_i] = src_corner_verts[loops[k]];
|
||||
mesh_corner_edges[dst_corner_i] = src_corner_edges[loops[k]];
|
||||
mesh_corner_verts[dst_corner_i] = mesh_corner_verts[loops[k]];
|
||||
mesh_corner_edges[dst_corner_i] = mesh_corner_edges[loops[k]];
|
||||
dst_corner_i++;
|
||||
}
|
||||
j += len;
|
||||
|
|
|
@ -222,7 +222,7 @@ static void copy_masked_polys_to_new_mesh(const Mesh &src_mesh,
|
|||
dst_poly_verts.copy_from(src_poly_verts);
|
||||
|
||||
for (const int i : IndexRange(size)) {
|
||||
dst_poly_edges[i] = edge_map[dst_poly_edges[i]];
|
||||
dst_poly_edges[i] = edge_map[src_poly_edges[i]];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -286,10 +286,10 @@ static void copy_masked_polys_to_new_mesh(const Mesh &src_mesh,
|
|||
MutableSpan<int> dst_poly_edges = dst_corner_edges.slice(mp_dst.loopstart, size);
|
||||
|
||||
for (const int i : IndexRange(size)) {
|
||||
dst_poly_verts[i] = vertex_map[dst_poly_verts[i]];
|
||||
dst_poly_verts[i] = vertex_map[src_poly_verts[i]];
|
||||
}
|
||||
for (const int i : IndexRange(size)) {
|
||||
dst_poly_edges[i] = edge_map[dst_poly_edges[i]];
|
||||
dst_poly_edges[i] = edge_map[src_poly_edges[i]];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -781,8 +781,8 @@ static void compute_selected_mesh_data_from_poly_selection(const Mesh &mesh,
|
|||
|
||||
/* Add the vertices and the edges. */
|
||||
for (const int corner : IndexRange(poly_src.loopstart, poly_src.totloop)) {
|
||||
const int vert_i= corner_verts[corner];
|
||||
const int edge_i= corner_edges[corner];
|
||||
const int vert_i = corner_verts[corner];
|
||||
const int edge_i = corner_edges[corner];
|
||||
/* Check first if it has not yet been added. */
|
||||
if (r_vertex_map[vert_i] == -1) {
|
||||
r_vertex_map[vert_i] = selected_verts_num;
|
||||
|
|
|
@ -559,13 +559,14 @@ static void extrude_mesh_edges(Mesh &mesh,
|
|||
* polygons that share an edge with the extruded edge. */
|
||||
for (const int i_connected_poly : connected_polys.index_range()) {
|
||||
const MPoly &connected_poly = polys[connected_polys[i_connected_poly]];
|
||||
for (const int vert_i :
|
||||
corner_verts.slice(connected_poly.loopstart, connected_poly.totloop)) {
|
||||
for (const int corner_i :
|
||||
IndexRange(connected_poly.loopstart, connected_poly.totloop)) {
|
||||
const int vert_i = corner_verts[corner_i];
|
||||
if (vert_i == orig_vert_1) {
|
||||
mixer.mix_in(0, data[i_loop]);
|
||||
mixer.mix_in(0, data[corner_i]);
|
||||
}
|
||||
if (vert_i == orig_vert_2) {
|
||||
mixer.mix_in(1, data[i_loop]);
|
||||
mixer.mix_in(1, data[corner_i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -576,10 +577,10 @@ static void extrude_mesh_edges(Mesh &mesh,
|
|||
* simpler (though probably slower) to just match the corner data based on the vertex
|
||||
* indices. */
|
||||
for (const int i : IndexRange(4 * i_edge_selection, 4)) {
|
||||
if (ELEM(new_loops[i].v, new_vert_1, orig_vert_1)) {
|
||||
if (ELEM(new_corner_verts[i], new_vert_1, orig_vert_1)) {
|
||||
new_data[i] = side_poly_corner_data.first();
|
||||
}
|
||||
else if (ELEM(new_loops[i].v, new_vert_2, orig_vert_2)) {
|
||||
else if (ELEM(new_corner_verts[i], new_vert_2, orig_vert_2)) {
|
||||
new_data[i] = side_poly_corner_data.last();
|
||||
}
|
||||
}
|
||||
|
@ -943,10 +944,10 @@ static void extrude_mesh_face_regions(Mesh &mesh,
|
|||
T data_1;
|
||||
T data_2;
|
||||
for (const int i_loop : IndexRange(poly.loopstart, poly.totloop)) {
|
||||
if (loops[i_loop].v == new_vert_1) {
|
||||
if (corner_verts[i_loop] == new_vert_1) {
|
||||
data_1 = data[i_loop];
|
||||
}
|
||||
if (loops[i_loop].v == new_vert_2) {
|
||||
if (corner_verts[i_loop] == new_vert_2) {
|
||||
data_2 = data[i_loop];
|
||||
}
|
||||
}
|
||||
|
@ -955,10 +956,10 @@ static void extrude_mesh_face_regions(Mesh &mesh,
|
|||
* simpler (though probably slower) to just match the corner data based on the
|
||||
* vertex indices. */
|
||||
for (const int i : IndexRange(4 * i_boundary_edge, 4)) {
|
||||
if (ELEM(new_loops[i].v, new_vert_1, orig_vert_1)) {
|
||||
if (ELEM(new_corner_verts[i], new_vert_1, orig_vert_1)) {
|
||||
new_data[i] = data_1;
|
||||
}
|
||||
else if (ELEM(new_loops[i].v, new_vert_2, orig_vert_2)) {
|
||||
else if (ELEM(new_corner_verts[i], new_vert_2, orig_vert_2)) {
|
||||
new_data[i] = data_2;
|
||||
}
|
||||
}
|
||||
|
@ -1295,7 +1296,6 @@ static void extrude_individual_mesh_faces(Mesh &mesh,
|
|||
MutableSpan<int> poly_edges = corner_edges.slice(poly.loopstart, poly.totloop);
|
||||
|
||||
for (const int i : IndexRange(poly.totloop)) {
|
||||
const int corner_i = poly.loopstart + i;
|
||||
poly_verts[i] = new_vert_range[poly_corner_range[i]];
|
||||
poly_edges[i] = duplicate_edge_range[poly_corner_range[i]];
|
||||
}
|
||||
|
|
|
@ -82,7 +82,7 @@ static VArray<float3> construct_uv_gvarray(const Mesh &mesh,
|
|||
edge_evaluator.evaluate();
|
||||
const IndexMask seam = edge_evaluator.get_evaluated_as_mask(0);
|
||||
|
||||
Array<float3> uv(loops.size(), float3(0));
|
||||
Array<float3> uv(corner_verts.size(), float3(0));
|
||||
|
||||
ParamHandle *handle = GEO_uv_parametrizer_construct_begin();
|
||||
for (const int mp_index : selection) {
|
||||
|
|
|
@ -1173,9 +1173,9 @@ static PyObject *C_BVHTree_FromObject(PyObject *UNUSED(cls), PyObject *args, PyO
|
|||
for (i = 0; i < tris_len; i++, lt++) {
|
||||
float co[3][3];
|
||||
|
||||
tris[i][0] = corner_verts[lt->tri[0]];
|
||||
tris[i][1] = corner_verts[lt->tri[1]];
|
||||
tris[i][2] = corner_verts[lt->tri[2]];
|
||||
tris[i][0] = (uint)corner_verts[lt->tri[0]];
|
||||
tris[i][1] = (uint)corner_verts[lt->tri[1]];
|
||||
tris[i][2] = (uint)corner_verts[lt->tri[2]];
|
||||
|
||||
copy_v3_v3(co[0], coords[tris[i][0]]);
|
||||
copy_v3_v3(co[1], coords[tris[i][1]]);
|
||||
|
|
Loading…
Reference in New Issue