void ImageManager::device_update_slot(Device *device, DeviceScene *dscene, Scene *scene, int flat_slot, Progress *progress) { ImageDataType type; int slot = flattened_slot_to_type_index(flat_slot, &type); Image *image = images[type][slot]; assert(image != NULL); if(image->users == 0) { device_free_image(device, dscene, type, slot); } else if(image->need_load) { if(!osl_texture_system || image->builtin_data) device_load_image(device, dscene, scene, type, slot, progress); } }
void ImageManager::device_update(Device *device, DeviceScene *dscene, Progress& progress) { if(!need_update) return; for(size_t slot = 0; slot < images.size(); slot++) { if(images[slot]) { if(images[slot]->users == 0) { device_free_image(device, dscene, slot); } else if(images[slot]->need_load) { string name = path_filename(images[slot]->filename); progress.set_status("Updating Images", "Loading " + name); device_load_image(device, dscene, slot); images[slot]->need_load = false; } if(progress.get_cancel()) return; } } for(size_t slot = 0; slot < float_images.size(); slot++) { if(float_images[slot]) { if(float_images[slot]->users == 0) { device_free_image(device, dscene, slot + TEX_IMAGE_FLOAT_START); } else if(float_images[slot]->need_load) { string name = path_filename(float_images[slot]->filename); progress.set_status("Updating Images", "Loading " + name); device_load_image(device, dscene, slot + TEX_IMAGE_FLOAT_START); float_images[slot]->need_load = false; } if(progress.get_cancel()) return; } } need_update = false; }