Fix T58251: Cycles ignores linked meshes when rendering
authorSergey Sharybin <sergey.vfx@gmail.com>
Mon, 27 May 2019 09:45:33 +0000 (11:45 +0200)
committerSergey Sharybin <sergey.vfx@gmail.com>
Wed, 29 May 2019 08:44:11 +0000 (10:44 +0200)
commit2f7711962a69de8192d048514e5927e49a1a63a2
tree7a91196fc710ec8e47bda75cd763d09386e43d8d
parentda7e5e861f54ae0ca9b7ec1c71432fb08f7a53fa
Fix T58251: Cycles ignores linked meshes when rendering

The idea is to share a mesh data-block as a result across all objects
which are sharing same original mesh and have no effective modifiers.
This mesh is owned by an original copy-on-written version of object data.

Tricky part is to make sure it is only initialized once, and currently a
silly mutex lock is used. In practice it only locks if the mesh is not
already there.

As an extra bonus, even viewport memory is also lower after this change.

Reviewers: brecht, mont29

Reviewed By: brecht, mont29

Differential Revision: https://developer.blender.org/D4954
source/blender/blenkernel/intern/DerivedMesh.c
source/blender/blenkernel/intern/mesh.c
source/blender/blenkernel/intern/mesh_runtime.c
source/blender/blenkernel/intern/object.c
source/blender/makesdna/DNA_mesh_types.h
source/blender/makesdna/DNA_object_types.h