diff options
Diffstat (limited to 'intern/cycles')
-rw-r--r-- | intern/cycles/blender/image.cpp | 10 | ||||
-rw-r--r-- | intern/cycles/blender/image.h | 2 | ||||
-rw-r--r-- | intern/cycles/blender/shader.cpp | 8 |
3 files changed, 14 insertions, 6 deletions
diff --git a/intern/cycles/blender/image.cpp b/intern/cycles/blender/image.cpp index 3ea3a47c1f4..4f5744d86a8 100644 --- a/intern/cycles/blender/image.cpp +++ b/intern/cycles/blender/image.cpp @@ -24,8 +24,14 @@ CCL_NAMESPACE_BEGIN /* Packed Images */ -BlenderImageLoader::BlenderImageLoader(BL::Image b_image, int frame) - : b_image(b_image), frame(frame), free_cache(!b_image.has_data()) +BlenderImageLoader::BlenderImageLoader(BL::Image b_image, + const int frame, + const bool is_preview_render) + : b_image(b_image), + frame(frame), + /* Don't free cache for preview render to avoid race condition from T93560, to be fixed + properly later as we are close to release. */ + free_cache(!is_preview_render && !b_image.has_data()) { } diff --git a/intern/cycles/blender/image.h b/intern/cycles/blender/image.h index 6f1e72c21af..b4aa4299ed1 100644 --- a/intern/cycles/blender/image.h +++ b/intern/cycles/blender/image.h @@ -25,7 +25,7 @@ CCL_NAMESPACE_BEGIN class BlenderImageLoader : public ImageLoader { public: - BlenderImageLoader(BL::Image b_image, int frame); + BlenderImageLoader(BL::Image b_image, const int frame, const bool is_preview_render); bool load_metadata(const ImageDeviceFeatures &features, ImageMetaData &metadata) override; bool load_pixels(const ImageMetaData &metadata, diff --git a/intern/cycles/blender/shader.cpp b/intern/cycles/blender/shader.cpp index 0cd9052b47a..0f17834906d 100644 --- a/intern/cycles/blender/shader.cpp +++ b/intern/cycles/blender/shader.cpp @@ -762,7 +762,8 @@ static ShaderNode *add_node(Scene *scene, int scene_frame = b_scene.frame_current(); int image_frame = image_user_frame_number(b_image_user, b_image, scene_frame); image->handle = scene->image_manager->add_image( - new BlenderImageLoader(b_image, image_frame), image->image_params()); + new BlenderImageLoader(b_image, image_frame, b_engine.is_preview()), + image->image_params()); } else { ustring filename = ustring( @@ -797,8 +798,9 @@ static ShaderNode *add_node(Scene *scene, if (is_builtin) { int scene_frame = b_scene.frame_current(); int image_frame = image_user_frame_number(b_image_user, b_image, scene_frame); - env->handle = scene->image_manager->add_image(new BlenderImageLoader(b_image, image_frame), - env->image_params()); + env->handle = scene->image_manager->add_image( + new BlenderImageLoader(b_image, image_frame, b_engine.is_preview()), + env->image_params()); } else { env->set_filename( |