diff options
Diffstat (limited to 'intern/cycles')
-rw-r--r-- | intern/cycles/blender/image.cpp | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/intern/cycles/blender/image.cpp b/intern/cycles/blender/image.cpp index 98ca16fe678..058fe3d46ac 100644 --- a/intern/cycles/blender/image.cpp +++ b/intern/cycles/blender/image.cpp @@ -28,10 +28,33 @@ BlenderImageLoader::BlenderImageLoader(BL::Image b_image, bool BlenderImageLoader::load_metadata(const ImageDeviceFeatures &, ImageMetaData &metadata) { - metadata.width = b_image.size()[0]; - metadata.height = b_image.size()[1]; + if (b_image.source() != BL::Image::source_TILED) { + /* Image sequence might have different dimensions, and hence needs to be handled in a special + * manner. + * NOTE: Currently the sequences are not handled by this image laoder. */ + assert(b_image.source() != BL::Image::source_SEQUENCE); + + metadata.width = b_image.size()[0]; + metadata.height = b_image.size()[1]; + metadata.channels = b_image.channels(); + } + else { + /* Different UDIM tiles might have different resolutions, so get resolution from the actual + * tile. */ + BL::UDIMTile b_udim_tile = b_image.tiles.get(tile_number); + if (b_udim_tile) { + metadata.width = b_udim_tile.size()[0]; + metadata.height = b_udim_tile.size()[1]; + metadata.channels = b_udim_tile.channels(); + } + else { + metadata.width = 0; + metadata.height = 0; + metadata.channels = 0; + } + } + metadata.depth = 1; - metadata.channels = b_image.channels(); if (b_image.is_float()) { if (metadata.channels == 1) { |