forked from blender/blender
main sync #3
@ -1585,6 +1585,11 @@ bool BKE_mesh_minmax(const Mesh *me, float r_min[3], float r_max[3])
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Mesh::bounds_set_eager(const blender::Bounds<float3> &bounds)
|
||||||
|
{
|
||||||
|
this->runtime->bounds_cache.ensure([&](blender::Bounds<float3> &r_data) { r_data = bounds; });
|
||||||
|
}
|
||||||
|
|
||||||
void BKE_mesh_transform(Mesh *me, const float mat[4][4], bool do_keys)
|
void BKE_mesh_transform(Mesh *me, const float mat[4][4], bool do_keys)
|
||||||
{
|
{
|
||||||
MutableSpan<float3> positions = me->vert_positions_for_write();
|
MutableSpan<float3> positions = me->vert_positions_for_write();
|
||||||
|
@ -5549,9 +5549,9 @@ void SCULPT_flush_update_step(bContext *C, SculptUpdateType update_flags)
|
|||||||
/* When sculpting and changing the positions of a mesh, tag them as changed and update. */
|
/* When sculpting and changing the positions of a mesh, tag them as changed and update. */
|
||||||
BKE_mesh_tag_positions_changed(mesh);
|
BKE_mesh_tag_positions_changed(mesh);
|
||||||
/* Update the mesh's bounds eagerly since the PBVH already has that information. */
|
/* Update the mesh's bounds eagerly since the PBVH already has that information. */
|
||||||
mesh->runtime->bounds_cache.ensure([&](Bounds<float3> &r_bounds) {
|
Bounds<float3> bounds;
|
||||||
BKE_pbvh_bounding_box(ob->sculpt->pbvh, r_bounds.min, r_bounds.max);
|
BKE_pbvh_bounding_box(ob->sculpt->pbvh, bounds.min, bounds.max);
|
||||||
});
|
mesh->bounds_set_eager(bounds);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -418,6 +418,9 @@ Mesh *create_cuboid_mesh(const float3 &size,
|
|||||||
calculate_uvs(config, mesh, uv_id);
|
calculate_uvs(config, mesh, uv_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const float3 bounds = size * 0.5f;
|
||||||
|
mesh->bounds_set_eager({-bounds, bounds});
|
||||||
|
|
||||||
return mesh;
|
return mesh;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
/** Workaround to forward-declare C++ type in C header. */
|
/** Workaround to forward-declare C++ type in C header. */
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
||||||
|
# include "BLI_bounds_types.hh"
|
||||||
# include "BLI_math_vector_types.hh"
|
# include "BLI_math_vector_types.hh"
|
||||||
|
|
||||||
namespace blender {
|
namespace blender {
|
||||||
@ -261,6 +262,9 @@ typedef struct Mesh {
|
|||||||
*/
|
*/
|
||||||
blender::Span<MLoopTri> looptris() const;
|
blender::Span<MLoopTri> looptris() const;
|
||||||
|
|
||||||
|
/** Set cached mesh bounds to a known-correct value to avoid their lazy calculation later on. */
|
||||||
|
void bounds_set_eager(const blender::Bounds<blender::float3> &bounds);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Cached information about loose edges, calculated lazily when necessary.
|
* Cached information about loose edges, calculated lazily when necessary.
|
||||||
*/
|
*/
|
||||||
|
@ -148,6 +148,9 @@ Mesh *create_grid_mesh(const int verts_x,
|
|||||||
|
|
||||||
mesh->loose_edges_tag_none();
|
mesh->loose_edges_tag_none();
|
||||||
|
|
||||||
|
const float3 bounds = float3(size_x * 0.5f, size_y * 0.5f, 0.0f);
|
||||||
|
mesh->bounds_set_eager({-bounds, bounds});
|
||||||
|
|
||||||
return mesh;
|
return mesh;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user