diff --git a/intern/cycles/render/image.cpp b/intern/cycles/render/image.cpp index d26ea3e14e0..b66d694c82a 100644 --- a/intern/cycles/render/image.cpp +++ b/intern/cycles/render/image.cpp @@ -949,16 +949,8 @@ void ImageManager::device_free_image(Device *device, DeviceScene *dscene, ImageD } } -void ImageManager::device_update(Device *device, - DeviceScene *dscene, - Scene *scene, - Progress& progress) +void ImageManager::device_prepare_update(DeviceScene *dscene) { - if(!need_update) - return; - - TaskPool pool; - for(int type = 0; type < IMAGE_DATA_NUM_TYPES; type++) { switch(type) { case IMAGE_DATA_TYPE_FLOAT4: @@ -986,6 +978,23 @@ void ImageManager::device_update(Device *device, dscene->tex_half_image.resize(tex_num_images[IMAGE_DATA_TYPE_HALF]); break; } + } +} + +void ImageManager::device_update(Device *device, + DeviceScene *dscene, + Scene *scene, + Progress& progress) +{ + if(!need_update) { + return; + } + + /* Make sure arrays are proper size. */ + device_prepare_update(dscene); + + TaskPool pool; + for(int type = 0; type < IMAGE_DATA_NUM_TYPES; type++) { for(size_t slot = 0; slot < images[type].size(); slot++) { if(!images[type][slot]) continue; diff --git a/intern/cycles/render/image.h b/intern/cycles/render/image.h index 5550d019868..77214bf25bc 100644 --- a/intern/cycles/render/image.h +++ b/intern/cycles/render/image.h @@ -59,6 +59,7 @@ public: bool use_alpha); ImageDataType get_image_metadata(const string& filename, void *builtin_data, bool& is_linear); + void device_prepare_update(DeviceScene *dscene); void device_update(Device *device, DeviceScene *dscene, Scene *scene, diff --git a/intern/cycles/render/mesh.cpp b/intern/cycles/render/mesh.cpp index a4dc06c4345..33d1936659b 100644 --- a/intern/cycles/render/mesh.cpp +++ b/intern/cycles/render/mesh.cpp @@ -1944,6 +1944,7 @@ void MeshManager::device_update_displacement_images(Device *device, } } } + image_manager->device_prepare_update(dscene); foreach(int slot, bump_images) { pool.push(function_bind(&ImageManager::device_update_slot, image_manager,