Fix T53032: Image sequence works bad with Displace modifier
authorSergey Sharybin <sergey.vfx@gmail.com>
Mon, 19 Feb 2018 13:33:48 +0000 (14:33 +0100)
committerSergey Sharybin <sergey.vfx@gmail.com>
Mon, 19 Feb 2018 13:33:48 +0000 (14:33 +0100)
We shouldn't mix image pool acuisition with and without user provided,
the fact that internally image.c uses last frame from Image datablock
confuses the logic.

source/blender/blenkernel/intern/texture.c

index 71b90641e025740a6a175b90dceb6df5a9d95997..0e2ac811a41def3e4322129424774c2f760004a8 100644 (file)
@@ -1207,17 +1207,17 @@ void BKE_texture_get_value(
        BKE_texture_get_value_ex(scene, texture, tex_co, texres, NULL, use_color_management);
 }
 
-static void texture_nodes_fetch_images_for_pool(bNodeTree *ntree, struct ImagePool *pool)
+static void texture_nodes_fetch_images_for_pool(Tex *texture, bNodeTree *ntree, struct ImagePool *pool)
 {
        for (bNode *node = ntree->nodes.first; node; node = node->next) {
                if (node->type == SH_NODE_TEX_IMAGE && node->id != NULL) {
                        Image *image = (Image *)node->id;
-                       BKE_image_pool_acquire_ibuf(image, NULL, pool);
+                       BKE_image_pool_acquire_ibuf(image, &texture->iuser, pool);
                }
                else if (node->type == NODE_GROUP && node->id != NULL) {
                        /* TODO(sergey): Do we need to control recursion here? */
                        bNodeTree *nested_tree = (bNodeTree *)node->id;
-                       texture_nodes_fetch_images_for_pool(nested_tree, pool);
+                       texture_nodes_fetch_images_for_pool(texture, nested_tree, pool);
                }
        }
 }
@@ -1226,12 +1226,12 @@ static void texture_nodes_fetch_images_for_pool(bNodeTree *ntree, struct ImagePo
 void BKE_texture_fetch_images_for_pool(Tex *texture, struct ImagePool *pool)
 {
        if (texture->nodetree != NULL) {
-               texture_nodes_fetch_images_for_pool(texture->nodetree, pool);
+               texture_nodes_fetch_images_for_pool(texture, texture->nodetree, pool);
        }
        else {
                if (texture->type == TEX_IMAGE) {
                        if (texture->ima != NULL) {
-                               BKE_image_pool_acquire_ibuf(texture->ima, NULL, pool);
+                               BKE_image_pool_acquire_ibuf(texture->ima, &texture->iuser, pool);
                        }
                }
        }