Merge branch 'blender-v4.4-release'
This commit is contained in:
@@ -114,6 +114,22 @@ struct BVHMetalBuildThrottler {
|
||||
}
|
||||
} g_bvh_build_throttler;
|
||||
|
||||
/* macOS 15.2 and 15.3 has a bug in the dynamic BVH refitting which leads to missing geometry
|
||||
* during render. The issue is fixed in the macOS 15.4, until then disable refitting even for
|
||||
* the viewport.
|
||||
* Note that dynamic BVH is still used on the scene level to speed up updates of instances and
|
||||
* such. #132782. */
|
||||
static bool support_refit_blas()
|
||||
{
|
||||
if (@available(macos 15.4, *)) {
|
||||
return true;
|
||||
}
|
||||
if (@available(macos 15.2, *)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
BVHMetal::BVHMetal(const BVHParams ¶ms_,
|
||||
const vector<Geometry *> &geometry_,
|
||||
const vector<Object *> &objects_,
|
||||
@@ -167,7 +183,7 @@ bool BVHMetal::build_BLAS_mesh(Progress &progress,
|
||||
"Building mesh BLAS | %7d tris | %s", (int)mesh->num_triangles(), geom->name.c_str());
|
||||
/*------------------------------------------------*/
|
||||
|
||||
const bool use_fast_trace_bvh = (params.bvh_type == BVH_TYPE_STATIC);
|
||||
const bool use_fast_trace_bvh = (params.bvh_type == BVH_TYPE_STATIC) || !support_refit_blas();
|
||||
|
||||
const array<float3> &verts = mesh->get_verts();
|
||||
const array<int> &tris = mesh->get_triangles();
|
||||
@@ -388,7 +404,7 @@ bool BVHMetal::build_BLAS_hair(Progress &progress,
|
||||
"Building hair BLAS | %7d curves | %s", (int)hair->num_curves(), geom->name.c_str());
|
||||
/*------------------------------------------------*/
|
||||
|
||||
const bool use_fast_trace_bvh = (params.bvh_type == BVH_TYPE_STATIC);
|
||||
const bool use_fast_trace_bvh = (params.bvh_type == BVH_TYPE_STATIC) || !support_refit_blas();
|
||||
|
||||
size_t num_motion_steps = 1;
|
||||
Attribute *motion_keys = hair->attributes.find(ATTR_STD_MOTION_VERTEX_POSITION);
|
||||
@@ -732,7 +748,7 @@ bool BVHMetal::build_BLAS_pointcloud(Progress &progress,
|
||||
const float3 *points = pointcloud->get_points().data();
|
||||
const float *radius = pointcloud->get_radius().data();
|
||||
|
||||
const bool use_fast_trace_bvh = (params.bvh_type == BVH_TYPE_STATIC);
|
||||
const bool use_fast_trace_bvh = (params.bvh_type == BVH_TYPE_STATIC) || !support_refit_blas();
|
||||
|
||||
size_t num_motion_steps = 1;
|
||||
Attribute *motion_keys = pointcloud->attributes.find(ATTR_STD_MOTION_VERTEX_POSITION);
|
||||
@@ -1045,7 +1061,7 @@ bool BVHMetal::build_TLAS(Progress &progress,
|
||||
BVH_status("Building TLAS | %7d instances", (int)num_instances);
|
||||
/*------------------------------------------------*/
|
||||
|
||||
const bool use_fast_trace_bvh = (params.bvh_type == BVH_TYPE_STATIC);
|
||||
const bool use_fast_trace_bvh = (params.bvh_type == BVH_TYPE_STATIC) || !support_refit_blas();
|
||||
|
||||
NSMutableArray *all_blas = [NSMutableArray array];
|
||||
unordered_map<const BVHMetal *, int> instance_mapping;
|
||||
@@ -1324,6 +1340,10 @@ bool BVHMetal::build(Progress &progress,
|
||||
}
|
||||
}
|
||||
|
||||
if (!support_refit_blas()) {
|
||||
refit = false;
|
||||
}
|
||||
|
||||
@autoreleasepool {
|
||||
if (!params.top_level) {
|
||||
return build_BLAS(progress, mtl_device, queue, refit);
|
||||
|
||||
@@ -699,13 +699,14 @@ static void rna_Object_closest_point_on_mesh(Object *ob,
|
||||
copy_v3_v3(r_normal, nearest.no);
|
||||
*r_index = mesh_corner_tri_to_face_index(mesh_eval, nearest.index);
|
||||
}
|
||||
else {
|
||||
*r_success = false;
|
||||
|
||||
zero_v3(r_location);
|
||||
zero_v3(r_normal);
|
||||
*r_index = -1;
|
||||
}
|
||||
}
|
||||
|
||||
*r_success = false;
|
||||
|
||||
zero_v3(r_location);
|
||||
zero_v3(r_normal);
|
||||
*r_index = -1;
|
||||
}
|
||||
|
||||
static bool rna_Object_is_modified(Object *ob, Scene *scene, int settings)
|
||||
|
||||
@@ -358,6 +358,11 @@ add_blender_test(
|
||||
--run-all-tests
|
||||
)
|
||||
|
||||
add_blender_test(
|
||||
object_api
|
||||
--python ${TEST_PYTHON_DIR}/bl_object.py
|
||||
)
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# MODIFIERS TESTS
|
||||
add_blender_test(
|
||||
|
||||
21
tests/python/bl_object.py
Normal file
21
tests/python/bl_object.py
Normal file
@@ -0,0 +1,21 @@
|
||||
import unittest
|
||||
|
||||
import bpy
|
||||
from mathutils import Vector
|
||||
|
||||
|
||||
class TestObjectApi(unittest.TestCase):
|
||||
def test_closest_point_on_mesh_of_default_cube(self):
|
||||
bpy.ops.object.select_all(action='SELECT')
|
||||
bpy.ops.object.delete(use_global=False)
|
||||
bpy.ops.outliner.orphans_purge()
|
||||
bpy.ops.mesh.primitive_cube_add()
|
||||
ret_val = bpy.context.scene.objects[0].closest_point_on_mesh(Vector((0.0, 0.0, 2.0)))
|
||||
self.assertTrue(ret_val[0])
|
||||
self.assertEqual(ret_val[1], Vector((0.0, 0.0, 1.0)))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
import sys
|
||||
sys.argv = [__file__] + (sys.argv[sys.argv.index("--") + 1:] if "--" in sys.argv else [])
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user