From c6d9b11b70d33ff31f505abc2277880710ce85dc Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Mon, 19 May 2014 14:45:52 +0200 Subject: [PATCH] Fix T40195: cycles smoke + persistent images animation render not working correct. --- intern/cycles/render/image.cpp | 11 +++++++++++ intern/cycles/render/image.h | 1 + intern/cycles/render/scene.cpp | 2 ++ 3 files changed, 14 insertions(+) diff --git a/intern/cycles/render/image.cpp b/intern/cycles/render/image.cpp index 86755badc42..4e61464920d 100644 --- a/intern/cycles/render/image.cpp +++ b/intern/cycles/render/image.cpp @@ -744,6 +744,17 @@ void ImageManager::device_pack_images(Device *device, DeviceScene *dscene, Progr } } +void ImageManager::device_free_builtin(Device *device, DeviceScene *dscene) +{ + for(size_t slot = 0; slot < images.size(); slot++) + if(images[slot] && images[slot]->builtin_data) + device_free_image(device, dscene, slot + tex_image_byte_start); + + for(size_t slot = 0; slot < float_images.size(); slot++) + if(float_images[slot] && float_images[slot]->builtin_data) + device_free_image(device, dscene, slot); +} + void ImageManager::device_free(Device *device, DeviceScene *dscene) { for(size_t slot = 0; slot < images.size(); slot++) diff --git a/intern/cycles/render/image.h b/intern/cycles/render/image.h index 561550fe0d2..8abf2a33d74 100644 --- a/intern/cycles/render/image.h +++ b/intern/cycles/render/image.h @@ -62,6 +62,7 @@ public: void device_update(Device *device, DeviceScene *dscene, Progress& progress); void device_free(Device *device, DeviceScene *dscene); + void device_free_builtin(Device *device, DeviceScene *dscene); void set_osl_texture_system(void *texture_system); void set_pack_images(bool pack_images_); diff --git a/intern/cycles/render/scene.cpp b/intern/cycles/render/scene.cpp index 1192824626a..5a5e01f811d 100644 --- a/intern/cycles/render/scene.cpp +++ b/intern/cycles/render/scene.cpp @@ -109,6 +109,8 @@ void Scene::free_memory(bool final) if(!params.persistent_data || final) image_manager->device_free(device, &dscene); + else + image_manager->device_free_builtin(device, &dscene); lookup_tables->device_free(device, &dscene); }