diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2017-05-04 17:27:31 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2017-05-04 17:28:22 +0300 |
commit | a523dfd2fd8c19ca0fbf9891a3be0988945d585f (patch) | |
tree | d2031a29a8422202c2bc55b1965e9f99c8dd5a10 /intern/cycles/render/image.cpp | |
parent | b180900e52a5e662faf354d6343cb2ad620d9866 (diff) |
Fix T51412: Instant crash with texture plugged into the Displacement output
The issue was caused by unlimited textures commit, root of the issue is that
displacement code updates some of the image slots directly, so it needs to
ensure device vectors are all proper size.
Diffstat (limited to 'intern/cycles/render/image.cpp')
-rw-r--r-- | intern/cycles/render/image.cpp | 27 |
1 files changed, 18 insertions, 9 deletions
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; |