Fix T46646: Point Cloud Density crashes on real time rendering
authorSergey Sharybin <sergey.vfx@gmail.com>
Wed, 25 Nov 2015 12:38:12 +0000 (17:38 +0500)
committerSergey Sharybin <sergey.vfx@gmail.com>
Wed, 25 Nov 2015 12:43:44 +0000 (17:43 +0500)
commit415b5a43690b3b823506871335281df717309f72
treee3d063ad4a9071a0e44ab3d34423dee7ff66be4d
parent328208a6a646448246f002a2aa144633c67197e7
Fix T46646: Point Cloud Density crashes on real time rendering

The issue was caused by possible use of object->derivedFinal from the render
thread, The patch tries to eliminate (or at least minimize, huh) amount of
access to the derivedFinal of a source object. It's still possible that in
the case of particle source derived mesh will be still unsafely used, but
with the patch applied we can easily change runtime part of the code and
cache derived mesh on the preparation stage.

Some ideas for the future:

- Check whether cache() was called on the point density node when calling
  calc().

- Cache derivedMesh in the runtime part of point density node to avoid
  possible remained thread conflicts.

- NULL the runtime part of the node on .blend load

Reviewers: campbellbarton, plasmasolutions

Reviewed By: plasmasolutions

Differential Revision: https://developer.blender.org/D1614
intern/cycles/blender/blender_shader.cpp
source/blender/makesdna/DNA_node_types.h
source/blender/makesrna/intern/rna_nodetree.c
source/blender/render/extern/include/RE_render_ext.h
source/blender/render/intern/source/pointdensity.c