Merge branch 'blender-v3.0-release'
This commit is contained in:
@@ -209,6 +209,7 @@ struct Mesh *BKE_mesh_create_derived_for_modifier(struct Depsgraph *depsgraph,
|
|||||||
struct Scene *scene,
|
struct Scene *scene,
|
||||||
struct Object *ob_eval,
|
struct Object *ob_eval,
|
||||||
struct ModifierData *md_eval,
|
struct ModifierData *md_eval,
|
||||||
|
const bool use_virtual_modifiers,
|
||||||
const bool build_shapekey_layers);
|
const bool build_shapekey_layers);
|
||||||
|
|
||||||
/* Copies a nomain-Mesh into an existing Mesh. */
|
/* Copies a nomain-Mesh into an existing Mesh. */
|
||||||
|
|||||||
@@ -1277,10 +1277,16 @@ static void add_shapekey_layers(Mesh *mesh_dest, Mesh *mesh_src)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \param use_virtual_modifiers: When enabled calculate virtual-modifiers before applying `md_eval`
|
||||||
|
* support this since virtual-modieirs are not modifiers from auser perspective,
|
||||||
|
* allowing shape keys to be included with the modifier being applied, see: T91923.
|
||||||
|
*/
|
||||||
Mesh *BKE_mesh_create_derived_for_modifier(struct Depsgraph *depsgraph,
|
Mesh *BKE_mesh_create_derived_for_modifier(struct Depsgraph *depsgraph,
|
||||||
Scene *scene,
|
Scene *scene,
|
||||||
Object *ob_eval,
|
Object *ob_eval,
|
||||||
ModifierData *md_eval,
|
ModifierData *md_eval,
|
||||||
|
const bool use_virtual_modifiers,
|
||||||
const bool build_shapekey_layers)
|
const bool build_shapekey_layers)
|
||||||
{
|
{
|
||||||
Mesh *me = ob_eval->runtime.data_orig ? (Mesh *)ob_eval->runtime.data_orig :
|
Mesh *me = ob_eval->runtime.data_orig ? (Mesh *)ob_eval->runtime.data_orig :
|
||||||
@@ -1303,22 +1309,49 @@ Mesh *BKE_mesh_create_derived_for_modifier(struct Depsgraph *depsgraph,
|
|||||||
BKE_keyblock_convert_to_mesh(kb, me);
|
BKE_keyblock_convert_to_mesh(kb, me);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mti->type == eModifierTypeType_OnlyDeform) {
|
Mesh *mesh_temp = (Mesh *)BKE_id_copy_ex(nullptr, &me->id, nullptr, LIB_ID_COPY_LOCALIZE);
|
||||||
int numVerts;
|
int numVerts = 0;
|
||||||
float(*deformedVerts)[3] = BKE_mesh_vert_coords_alloc(me, &numVerts);
|
float(*deformedVerts)[3] = nullptr;
|
||||||
|
|
||||||
result = (Mesh *)BKE_id_copy_ex(nullptr, &me->id, nullptr, LIB_ID_COPY_LOCALIZE);
|
if (use_virtual_modifiers) {
|
||||||
|
VirtualModifierData virtualModifierData;
|
||||||
|
for (ModifierData *md_eval_virt =
|
||||||
|
BKE_modifiers_get_virtual_modifierlist(ob_eval, &virtualModifierData);
|
||||||
|
md_eval_virt && (md_eval_virt != ob_eval->modifiers.first);
|
||||||
|
md_eval_virt = md_eval_virt->next) {
|
||||||
|
if (!BKE_modifier_is_enabled(scene, md_eval_virt, eModifierMode_Realtime)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
/* All virtual modifiers are deform modifiers. */
|
||||||
|
const ModifierTypeInfo *mti_virt = BKE_modifier_get_info((ModifierType)md_eval_virt->type);
|
||||||
|
BLI_assert(mti_virt->type == eModifierTypeType_OnlyDeform);
|
||||||
|
if (mti_virt->type != eModifierTypeType_OnlyDeform) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (deformedVerts == nullptr) {
|
||||||
|
deformedVerts = BKE_mesh_vert_coords_alloc(me, &numVerts);
|
||||||
|
}
|
||||||
|
mti_virt->deformVerts(md_eval_virt, &mectx, mesh_temp, deformedVerts, numVerts);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mti->type == eModifierTypeType_OnlyDeform) {
|
||||||
|
if (deformedVerts == nullptr) {
|
||||||
|
deformedVerts = BKE_mesh_vert_coords_alloc(me, &numVerts);
|
||||||
|
}
|
||||||
|
result = mesh_temp;
|
||||||
mti->deformVerts(md_eval, &mectx, result, deformedVerts, numVerts);
|
mti->deformVerts(md_eval, &mectx, result, deformedVerts, numVerts);
|
||||||
BKE_mesh_vert_coords_apply(result, deformedVerts);
|
BKE_mesh_vert_coords_apply(result, deformedVerts);
|
||||||
|
|
||||||
if (build_shapekey_layers) {
|
if (build_shapekey_layers) {
|
||||||
add_shapekey_layers(result, me);
|
add_shapekey_layers(result, me);
|
||||||
}
|
}
|
||||||
|
|
||||||
MEM_freeN(deformedVerts);
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Mesh *mesh_temp = (Mesh *)BKE_id_copy_ex(nullptr, &me->id, nullptr, LIB_ID_COPY_LOCALIZE);
|
if (deformedVerts != nullptr) {
|
||||||
|
BKE_mesh_vert_coords_apply(mesh_temp, deformedVerts);
|
||||||
|
}
|
||||||
|
|
||||||
if (build_shapekey_layers) {
|
if (build_shapekey_layers) {
|
||||||
add_shapekey_layers(mesh_temp, me);
|
add_shapekey_layers(mesh_temp, me);
|
||||||
@@ -1332,6 +1365,10 @@ Mesh *BKE_mesh_create_derived_for_modifier(struct Depsgraph *depsgraph,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (deformedVerts != nullptr) {
|
||||||
|
MEM_freeN(deformedVerts);
|
||||||
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -666,12 +666,13 @@ bool ED_object_modifier_convert(ReportList *UNUSED(reports),
|
|||||||
static Mesh *modifier_apply_create_mesh_for_modifier(Depsgraph *depsgraph,
|
static Mesh *modifier_apply_create_mesh_for_modifier(Depsgraph *depsgraph,
|
||||||
Object *object,
|
Object *object,
|
||||||
ModifierData *md_eval,
|
ModifierData *md_eval,
|
||||||
|
bool use_virtual_modifiers,
|
||||||
bool build_shapekey_layers)
|
bool build_shapekey_layers)
|
||||||
{
|
{
|
||||||
Scene *scene_eval = DEG_get_evaluated_scene(depsgraph);
|
Scene *scene_eval = DEG_get_evaluated_scene(depsgraph);
|
||||||
Object *object_eval = DEG_get_evaluated_object(depsgraph, object);
|
Object *object_eval = DEG_get_evaluated_object(depsgraph, object);
|
||||||
Mesh *mesh_applied = BKE_mesh_create_derived_for_modifier(
|
Mesh *mesh_applied = BKE_mesh_create_derived_for_modifier(
|
||||||
depsgraph, scene_eval, object_eval, md_eval, build_shapekey_layers);
|
depsgraph, scene_eval, object_eval, md_eval, use_virtual_modifiers, build_shapekey_layers);
|
||||||
return mesh_applied;
|
return mesh_applied;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -708,7 +709,8 @@ static bool modifier_apply_shape(Main *bmain,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Mesh *mesh_applied = modifier_apply_create_mesh_for_modifier(depsgraph, ob, md_eval, false);
|
Mesh *mesh_applied = modifier_apply_create_mesh_for_modifier(
|
||||||
|
depsgraph, ob, md_eval, true, false);
|
||||||
if (!mesh_applied) {
|
if (!mesh_applied) {
|
||||||
BKE_report(reports, RPT_ERROR, "Modifier is disabled or returned error, skipping apply");
|
BKE_report(reports, RPT_ERROR, "Modifier is disabled or returned error, skipping apply");
|
||||||
return false;
|
return false;
|
||||||
@@ -767,7 +769,8 @@ static bool modifier_apply_obdata(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Mesh *mesh_applied = modifier_apply_create_mesh_for_modifier(depsgraph, ob, md_eval, true);
|
Mesh *mesh_applied = modifier_apply_create_mesh_for_modifier(
|
||||||
|
depsgraph, ob, md_eval, true, true);
|
||||||
if (!mesh_applied) {
|
if (!mesh_applied) {
|
||||||
BKE_report(reports, RPT_ERROR, "Modifier returned error, skipping apply");
|
BKE_report(reports, RPT_ERROR, "Modifier returned error, skipping apply");
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -630,14 +630,16 @@ endif()
|
|||||||
|
|
||||||
if(WITH_CYCLES OR WITH_OPENGL_RENDER_TESTS)
|
if(WITH_CYCLES OR WITH_OPENGL_RENDER_TESTS)
|
||||||
if(NOT OPENIMAGEIO_IDIFF)
|
if(NOT OPENIMAGEIO_IDIFF)
|
||||||
MESSAGE(STATUS "Disabling render tests because OIIO idiff does not exist")
|
MESSAGE(STATUS "Disabling Cycles tests because OIIO idiff does not exist")
|
||||||
elseif(NOT EXISTS "${TEST_SRC_DIR}/render/shader")
|
elseif(NOT EXISTS "${TEST_SRC_DIR}/render/shader")
|
||||||
MESSAGE(STATUS "Disabling render tests because tests folder does not exist at ${TEST_SRC_DIR}")
|
MESSAGE(STATUS "Disabling Cycles tests because tests folder does not exist at ${TEST_SRC_DIR}")
|
||||||
|
elseif(NOT WITH_COMPOSITOR)
|
||||||
|
MESSAGE(STATUS "Disabling Cycles tests because WITH_COMPOSITOR is disabled")
|
||||||
|
elseif(NOT WITH_OPENCOLORIO)
|
||||||
|
MESSAGE(STATUS "Disabling Cycles tests because WITH_OPENCOLORIO is disabled")
|
||||||
else()
|
else()
|
||||||
set(render_tests
|
set(render_tests
|
||||||
bsdf
|
bsdf
|
||||||
denoise
|
|
||||||
displacement
|
|
||||||
hair
|
hair
|
||||||
image_colorspace
|
image_colorspace
|
||||||
image_data_types
|
image_data_types
|
||||||
@@ -646,20 +648,38 @@ if(WITH_CYCLES OR WITH_OPENGL_RENDER_TESTS)
|
|||||||
integrator
|
integrator
|
||||||
light
|
light
|
||||||
mesh
|
mesh
|
||||||
motion_blur
|
|
||||||
openvdb
|
|
||||||
render_layer
|
|
||||||
reports
|
|
||||||
shader
|
shader
|
||||||
shadow_catcher
|
shadow_catcher
|
||||||
sss
|
sss
|
||||||
volume
|
volume
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if(WITH_OPENSUBDIV)
|
||||||
|
list(APPEND render_tests displacement)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(WITH_FREESTYLE)
|
||||||
|
list(APPEND render_tests render_layer)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(WITH_MOD_FLUID)
|
||||||
|
list(APPEND render_tests motion_blur reports)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(WITH_OPENVDB)
|
||||||
|
list(APPEND render_tests openvdb)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(WITH_OPENIMAGEDENOISE)
|
||||||
|
list(APPEND render_tests denoise)
|
||||||
|
endif()
|
||||||
|
|
||||||
if(WITH_OPENGL_RENDER_TESTS)
|
if(WITH_OPENGL_RENDER_TESTS)
|
||||||
list(APPEND render_tests grease_pencil)
|
list(APPEND render_tests grease_pencil)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
list(SORT render_tests)
|
||||||
|
|
||||||
# Cycles
|
# Cycles
|
||||||
if(WITH_CYCLES)
|
if(WITH_CYCLES)
|
||||||
if(NOT WITH_CYCLES_OSL)
|
if(NOT WITH_CYCLES_OSL)
|
||||||
|
|||||||
Reference in New Issue
Block a user