Commit: c2022d6d3691ddcced42c24488344393249ba631 Author: Miguel Pozo Date: Tue Jan 17 16:13:17 2023 +0100 Branches: tmp-worbench-rewrite2-optimizations https://developer.blender.org/rBc2022d6d3691ddcced42c24488344393249ba631
Skip bbox allocation by retrieving bounds min/max =================================================================== M source/blender/blenkernel/intern/object.cc M source/blender/draw/intern/draw_manager_data.cc M source/blender/draw/intern/draw_resource.hh =================================================================== diff --git a/source/blender/blenkernel/intern/object.cc b/source/blender/blenkernel/intern/object.cc index d33f8fe5de7..817bc50cba4 100644 --- a/source/blender/blenkernel/intern/object.cc +++ b/source/blender/blenkernel/intern/object.cc @@ -3882,8 +3882,12 @@ void BKE_object_minmax(Object *ob, float r_min[3], float r_max[3], const bool us break; } case OB_MESH: { - const BoundBox bb = *BKE_mesh_boundbox_get(ob); - BKE_boundbox_minmax(&bb, ob->object_to_world, r_min, r_max); + Mesh *me = (Mesh *)ob->data; + INIT_MINMAX(r_min, r_max); + if (!BKE_mesh_wrapper_minmax(me, r_min, r_max)) { + r_min[0] = r_min[1] = r_min[2] = -1.0f; + r_max[0] = r_max[1] = r_max[2] = 1.0f; + } changed = true; break; } diff --git a/source/blender/draw/intern/draw_manager_data.cc b/source/blender/draw/intern/draw_manager_data.cc index 5b4e0792577..5c06233054d 100644 --- a/source/blender/draw/intern/draw_manager_data.cc +++ b/source/blender/draw/intern/draw_manager_data.cc @@ -719,12 +719,16 @@ static void drw_call_obinfos_init(DRWObjectInfos *ob_infos, Object *ob) static void drw_call_culling_init(DRWCullingState *cull, Object *ob) { - const BoundBox *bbox; - if (ob != nullptr && (bbox = BKE_object_boundbox_get(ob))) { + if (ob != nullptr) { + float3 min, max; + BKE_object_minmax(ob, min, max, false); + BoundBox bbox; + BKE_boundbox_init_from_minmax(&bbox, min, max); + float corner[3]; /* Get BoundSphere center and radius from the BoundBox. */ - mid_v3_v3v3(cull->bsphere.center, bbox->vec[0], bbox->vec[6]); - mul_v3_m4v3(corner, ob->object_to_world, bbox->vec[0]); + mid_v3_v3v3(cull->bsphere.center, bbox.vec[0], bbox.vec[6]); + mul_v3_m4v3(corner, ob->object_to_world, bbox.vec[0]); mul_m4_v3(ob->object_to_world, cull->bsphere.center); cull->bsphere.radius = len_v3v3(cull->bsphere.center, corner); diff --git a/source/blender/draw/intern/draw_resource.hh b/source/blender/draw/intern/draw_resource.hh index a2de084b900..69e7c3a0687 100644 --- a/source/blender/draw/intern/draw_resource.hh +++ b/source/blender/draw/intern/draw_resource.hh @@ -151,15 +151,15 @@ inline void ObjectBounds::sync() inline void ObjectBounds::sync(Object &ob) { - const BoundBox *bbox = BKE_object_boundbox_get(&ob); - if (bbox == nullptr) { - bounding_sphere.w = -1.0f; /* Disable test. */ - return; - } - *reinterpret_cast<float3 *>(&bounding_corners[0]) = bbox->vec[0]; - *reinterpret_cast<float3 *>(&bounding_corners[1]) = bbox->vec[4]; - *reinterpret_cast<float3 *>(&bounding_corners[2]) = bbox->vec[3]; - *reinterpret_cast<float3 *>(&bounding_corners[3]) = bbox->vec[1]; + float3 min, max; + BKE_object_minmax(&ob, min, max, false); + BoundBox bbox; + BKE_boundbox_init_from_minmax(&bbox, min, max); + + *reinterpret_cast<float3 *>(&bounding_corners[0]) = bbox.vec[0]; + *reinterpret_cast<float3 *>(&bounding_corners[1]) = bbox.vec[4]; + *reinterpret_cast<float3 *>(&bounding_corners[2]) = bbox.vec[3]; + *reinterpret_cast<float3 *>(&bounding_corners[3]) = bbox.vec[1]; bounding_sphere.w = 0.0f; /* Enable test. */ } _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs