[Bf-blender-cvs] [062ee07b7ff] blender2.8: Fix some Cycles modifier stack issues with copy-on-write.
Brecht Van Lommel
noreply at git.blender.org
Tue May 22 20:01:33 CEST 2018
Commit: 062ee07b7ffa810729cfeaad585925ec960627b8
Author: Brecht Van Lommel
Date: Tue May 22 19:42:41 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB062ee07b7ffa810729cfeaad585925ec960627b8
Fix some Cycles modifier stack issues with copy-on-write.
There's still many problems, but this avoids modifiers being applied twice,
subsurf render levels not being respected and hair render crashing.
===================================================================
M intern/cycles/blender/blender_mesh.cpp
M intern/cycles/blender/blender_util.h
M source/blender/blenkernel/intern/DerivedMesh.c
M source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp
===================================================================
diff --git a/intern/cycles/blender/blender_mesh.cpp b/intern/cycles/blender/blender_mesh.cpp
index 1e1e0db6c62..03d24c04e2a 100644
--- a/intern/cycles/blender/blender_mesh.cpp
+++ b/intern/cycles/blender/blender_mesh.cpp
@@ -1189,7 +1189,7 @@ Mesh *BlenderSync::sync_mesh(BL::Depsgraph& b_depsgraph,
BL::Mesh b_mesh = object_to_mesh(b_data,
b_ob,
b_depsgraph,
- true,
+ false,
need_undeformed,
mesh->subdivision_type);
@@ -1277,7 +1277,7 @@ void BlenderSync::sync_mesh_motion(BL::Depsgraph& b_depsgraph,
b_mesh = object_to_mesh(b_data,
b_ob,
b_depsgraph,
- true,
+ false,
false,
Mesh::SUBDIVISION_NONE);
}
diff --git a/intern/cycles/blender/blender_util.h b/intern/cycles/blender/blender_util.h
index 3eb09cbe3c0..a8379914b83 100644
--- a/intern/cycles/blender/blender_util.h
+++ b/intern/cycles/blender/blender_util.h
@@ -53,6 +53,7 @@ static inline BL::Mesh object_to_mesh(BL::BlendData& data,
bool subsurf_mod_show_render = false;
bool subsurf_mod_show_viewport = false;
+ /* TODO: make this work with copy-on-write, modifiers are already evaluated. */
if(subdivision_type != Mesh::SUBDIVISION_NONE) {
BL::Modifier subsurf_mod = object.modifiers[object.modifiers.length()-1];
diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c
index cdd877bcfcc..8bf7ac3f6a2 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.c
+++ b/source/blender/blenkernel/intern/DerivedMesh.c
@@ -2003,7 +2003,7 @@ static void mesh_ensure_display_normals(Mesh *mesh)
static void mesh_calc_modifiers(
struct Depsgraph *depsgraph, Scene *scene, Object *ob, float (*inputVertexCos)[3],
- const bool useRenderParams, int useDeform,
+ int useDeform,
const bool need_mapping, CustomDataMask dataMask,
const int index, const bool useCache, const bool build_shapekey_layers,
const bool allow_gpu,
@@ -2017,6 +2017,7 @@ static void mesh_calc_modifiers(
CustomDataMask mask, nextmask, previewmask = 0, append_mask = CD_MASK_ORIGINDEX;
float (*deformedVerts)[3] = NULL;
int numVerts = me->totvert;
+ const bool useRenderParams = (DEG_get_mode(depsgraph) == DAG_EVAL_RENDER);
const int required_mode = useRenderParams ? eModifierMode_Render : eModifierMode_Realtime;
bool isPrevDeform = false;
MultiresModifierData *mmd = get_multires_modifier(scene, ob, 0);
@@ -2510,7 +2511,7 @@ static void mesh_calc_modifiers(
static void mesh_calc_modifiers_dm(
struct Depsgraph *depsgraph, Scene *scene, Object *ob, float (*inputVertexCos)[3],
- const bool useRenderParams, int useDeform,
+ int useDeform,
const bool need_mapping, CustomDataMask dataMask,
const int index, const bool useCache, const bool build_shapekey_layers,
const bool allow_gpu,
@@ -2520,7 +2521,7 @@ static void mesh_calc_modifiers_dm(
Mesh *deform_mesh = NULL, *final_mesh = NULL;
mesh_calc_modifiers(
- depsgraph, scene, ob, inputVertexCos, useRenderParams, useDeform,
+ depsgraph, scene, ob, inputVertexCos, useDeform,
need_mapping, dataMask, index, useCache, build_shapekey_layers, allow_gpu,
(r_deformdm ? &deform_mesh : NULL), &final_mesh);
@@ -2931,7 +2932,7 @@ static void mesh_build_data(
#endif
mesh_calc_modifiers_dm(
- depsgraph, scene, ob, NULL, false, 1, need_mapping, dataMask, -1, true, build_shapekey_layers,
+ depsgraph, scene, ob, NULL, 1, need_mapping, dataMask, -1, true, build_shapekey_layers,
true,
&ob->derivedDeform, &ob->derivedFinal);
@@ -3080,7 +3081,7 @@ DerivedMesh *mesh_create_derived_render(struct Depsgraph *depsgraph, Scene *scen
DerivedMesh *final;
mesh_calc_modifiers_dm(
- depsgraph, scene, ob, NULL, true, 1, false, dataMask, -1, false, false, false,
+ depsgraph, scene, ob, NULL, 1, false, dataMask, -1, false, false, false,
NULL, &final);
return final;
@@ -3091,7 +3092,7 @@ DerivedMesh *mesh_create_derived_index_render(struct Depsgraph *depsgraph, Scene
DerivedMesh *final;
mesh_calc_modifiers_dm(
- depsgraph, scene, ob, NULL, true, 1, false, dataMask, index, false, false, false,
+ depsgraph, scene, ob, NULL, 1, false, dataMask, index, false, false, false,
NULL, &final);
return final;
@@ -3110,7 +3111,7 @@ DerivedMesh *mesh_create_derived_view(
ob->transflag |= OB_NO_PSYS_UPDATE;
mesh_calc_modifiers_dm(
- depsgraph, scene, ob, NULL, false, 1, false, dataMask, -1, false, false, false,
+ depsgraph, scene, ob, NULL, 1, false, dataMask, -1, false, false, false,
NULL, &final);
ob->transflag &= ~OB_NO_PSYS_UPDATE;
@@ -3125,21 +3126,7 @@ DerivedMesh *mesh_create_derived_no_deform(
DerivedMesh *final;
mesh_calc_modifiers_dm(
- depsgraph, scene, ob, vertCos, false, 0, false, dataMask, -1, false, false, false,
- NULL, &final);
-
- return final;
-}
-
-DerivedMesh *mesh_create_derived_no_deform_render(
- struct Depsgraph *depsgraph, Scene *scene,
- Object *ob, float (*vertCos)[3],
- CustomDataMask dataMask)
-{
- DerivedMesh *final;
-
- mesh_calc_modifiers_dm(
- depsgraph, scene, ob, vertCos, true, 0, false, dataMask, -1, false, false, false,
+ depsgraph, scene, ob, vertCos, 0, false, dataMask, -1, false, false, false,
NULL, &final);
return final;
diff --git a/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp b/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp
index d571ca135a1..9cba1d03bd8 100644
--- a/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp
+++ b/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp
@@ -105,7 +105,7 @@ NodeGroup *BlenderFileLoader::Load()
break;
}
- bool apply_modifiers = true;
+ bool apply_modifiers = false;
bool calc_undeformed = false;
bool calc_tessface = false;
Mesh *mesh = BKE_mesh_new_from_object(depsgraph,
More information about the Bf-blender-cvs
mailing list