[Bf-blender-cvs] [d675cf20a13] master: Cleanup: add ImageKey to avoid longer argument lists and duplicated code

Brecht Van Lommel noreply at git.blender.org
Wed Feb 26 18:13:54 CET 2020


Commit: d675cf20a13ac09a55ce04d6a30105eaf87f5ebe
Author: Brecht Van Lommel
Date:   Thu Feb 20 00:52:50 2020 +0100
Branches: master
https://developer.blender.org/rBd675cf20a13ac09a55ce04d6a30105eaf87f5ebe

Cleanup: add ImageKey to avoid longer argument lists and duplicated code

===================================================================

M	intern/cycles/blender/blender_shader.cpp
M	intern/cycles/blender/blender_volume.cpp
M	intern/cycles/render/image.cpp
M	intern/cycles/render/image.h
M	intern/cycles/render/nodes.cpp
M	intern/cycles/render/nodes.h

===================================================================

diff --git a/intern/cycles/blender/blender_shader.cpp b/intern/cycles/blender/blender_shader.cpp
index 5a70126e012..6709e90c3d3 100644
--- a/intern/cycles/blender/blender_shader.cpp
+++ b/intern/cycles/blender/blender_shader.cpp
@@ -640,6 +640,14 @@ static ShaderNode *add_node(Scene *scene,
     BL::Image b_image(b_image_node.image());
     BL::ImageUser b_image_user(b_image_node.image_user());
     ImageTextureNode *image = new ImageTextureNode();
+
+    image->interpolation = get_image_interpolation(b_image_node);
+    image->extension = get_image_extension(b_image_node);
+    image->projection = (NodeImageProjection)b_image_node.projection();
+    image->projection_blend = b_image_node.projection_blend();
+    BL::TexMapping b_texture_mapping(b_image_node.texture_mapping());
+    get_tex_mapping(&image->tex_mapping, b_texture_mapping);
+
     if (b_image) {
       /* builtin images will use callback-based reading because
        * they could only be loaded correct from blender side
@@ -682,21 +690,10 @@ static ShaderNode *add_node(Scene *scene,
       /* TODO(sergey): Does not work properly when we change builtin type. */
 #if 0
       if (b_image.is_updated()) {
-        scene->image_manager->tag_reload_image(image->filename.string(),
-                                               image->builtin_data,
-                                               get_image_interpolation(b_image_node),
-                                               get_image_extension(b_image_node),
-                                               image->use_alpha,
-                                               image->colorspace);
+        scene->image_manager->tag_reload_image(image->image_key());
       }
 #endif
     }
-    image->projection = (NodeImageProjection)b_image_node.projection();
-    image->interpolation = get_image_interpolation(b_image_node);
-    image->extension = get_image_extension(b_image_node);
-    image->projection_blend = b_image_node.projection_blend();
-    BL::TexMapping b_texture_mapping(b_image_node.texture_mapping());
-    get_tex_mapping(&image->tex_mapping, b_texture_mapping);
     node = image;
   }
   else if (b_node.is_a(&RNA_ShaderNodeTexEnvironment)) {
@@ -704,6 +701,12 @@ static ShaderNode *add_node(Scene *scene,
     BL::Image b_image(b_env_node.image());
     BL::ImageUser b_image_user(b_env_node.image_user());
     EnvironmentTextureNode *env = new EnvironmentTextureNode();
+
+    env->interpolation = get_image_interpolation(b_env_node);
+    env->projection = (NodeEnvironmentProjection)b_env_node.projection();
+    BL::TexMapping b_texture_mapping(b_env_node.texture_mapping());
+    get_tex_mapping(&env->tex_mapping, b_texture_mapping);
+
     if (b_image) {
       bool is_builtin = b_image.packed_file() || b_image.source() == BL::Image::source_GENERATED ||
                         b_image.source() == BL::Image::source_MOVIE ||
@@ -731,19 +734,10 @@ static ShaderNode *add_node(Scene *scene,
       /* TODO(sergey): Does not work properly when we change builtin type. */
 #if 0
       if (b_image.is_updated()) {
-        scene->image_manager->tag_reload_image(env->filename.string(),
-                                               env->builtin_data,
-                                               get_image_interpolation(b_env_node),
-                                               EXTENSION_REPEAT,
-                                               env->use_alpha,
-                                               env->colorspace);
+        scene->image_manager->tag_reload_image(env->image_key());
       }
 #endif
     }
-    env->interpolation = get_image_interpolation(b_env_node);
-    env->projection = (NodeEnvironmentProjection)b_env_node.projection();
-    BL::TexMapping b_texture_mapping(b_env_node.texture_mapping());
-    get_tex_mapping(&env->tex_mapping, b_texture_mapping);
     node = env;
   }
   else if (b_node.is_a(&RNA_ShaderNodeTexGradient)) {
@@ -896,12 +890,7 @@ static ShaderNode *add_node(Scene *scene,
     if (true) {
       point_density->add_image();
       b_point_density_node.cache_point_density(b_depsgraph);
-      scene->image_manager->tag_reload_image(point_density->filename.string(),
-                                             point_density->builtin_data,
-                                             point_density->interpolation,
-                                             EXTENSION_CLIP,
-                                             IMAGE_ALPHA_AUTO,
-                                             u_colorspace_raw);
+      scene->image_manager->tag_reload_image(point_density->image_key());
     }
     node = point_density;
 
diff --git a/intern/cycles/blender/blender_volume.cpp b/intern/cycles/blender/blender_volume.cpp
index ae70e60d60e..47259d4945c 100644
--- a/intern/cycles/blender/blender_volume.cpp
+++ b/intern/cycles/blender/blender_volume.cpp
@@ -51,18 +51,13 @@ static void sync_smoke_volume(Scene *scene, BL::Object &b_ob, Mesh *mesh, float
     Attribute *attr = mesh->attributes.add(std);
     VoxelAttribute *volume_data = attr->data_voxel();
     ImageMetaData metadata;
-    bool animated = false;
+
+    ImageKey key;
+    key.filename = Attribute::standard_name(std);
+    key.builtin_data = b_ob.ptr.data;
 
     volume_data->manager = image_manager;
-    volume_data->slot = image_manager->add_image(Attribute::standard_name(std),
-                                                 b_ob.ptr.data,
-                                                 animated,
-                                                 frame,
-                                                 INTERPOLATION_LINEAR,
-                                                 EXTENSION_CLIP,
-                                                 IMAGE_ALPHA_AUTO,
-                                                 u_colorspace_raw,
-                                                 metadata);
+    volume_data->slot = image_manager->add_image(key, frame, metadata);
   }
 
   /* Create a matrix to transform from object space to mesh texture space.
diff --git a/intern/cycles/render/image.cpp b/intern/cycles/render/image.cpp
index 212a867f9cd..e5fb2fcaf3d 100644
--- a/intern/cycles/render/image.cpp
+++ b/intern/cycles/render/image.cpp
@@ -129,7 +129,7 @@ bool ImageManager::set_animation_frame_update(int frame)
 
     for (size_t type = 0; type < IMAGE_DATA_NUM_TYPES; type++) {
       for (size_t slot = 0; slot < images[type].size(); slot++) {
-        if (images[type][slot] && images[type][slot]->animated)
+        if (images[type][slot] && images[type][slot]->key.animated)
           return true;
       }
     }
@@ -198,17 +198,14 @@ void ImageManager::metadata_detect_colorspace(ImageMetaData &metadata, const cha
   }
 }
 
-bool ImageManager::get_image_metadata(const string &filename,
-                                      void *builtin_data,
-                                      ustring colorspace,
-                                      ImageMetaData &metadata)
+bool ImageManager::get_image_metadata(const ImageKey &key, ImageMetaData &metadata)
 {
   metadata = ImageMetaData();
-  metadata.colorspace = colorspace;
+  metadata.colorspace = key.colorspace;
 
-  if (builtin_data) {
+  if (key.builtin_data) {
     if (builtin_image_info_cb) {
-      builtin_image_info_cb(filename, builtin_data, metadata);
+      builtin_image_info_cb(key.filename, key.builtin_data, metadata);
     }
     else {
       return false;
@@ -227,23 +224,23 @@ bool ImageManager::get_image_metadata(const string &filename,
   }
 
   /* Perform preliminary checks, with meaningful logging. */
-  if (!path_exists(filename)) {
-    VLOG(1) << "File '" << filename << "' does not exist.";
+  if (!path_exists(key.filename)) {
+    VLOG(1) << "File '" << key.filename << "' does not exist.";
     return false;
   }
-  if (path_is_directory(filename)) {
-    VLOG(1) << "File '" << filename << "' is a directory, can't use as image.";
+  if (path_is_directory(key.filename)) {
+    VLOG(1) << "File '" << key.filename << "' is a directory, can't use as image.";
     return false;
   }
 
-  unique_ptr<ImageInput> in(ImageInput::create(filename));
+  unique_ptr<ImageInput> in(ImageInput::create(key.filename));
 
   if (!in) {
     return false;
   }
 
   ImageSpec spec;
-  if (!in->open(filename, spec)) {
+  if (!in->open(key.filename, spec)) {
     return false;
   }
 
@@ -294,33 +291,12 @@ bool ImageManager::get_image_metadata(const string &filename,
   return true;
 }
 
-static bool image_equals(ImageManager::Image *image,
-                         const string &filename,
-                         void *builtin_data,
-                         InterpolationType interpolation,
-                         ExtensionType extension,
-                         ImageAlphaType alpha_type,
-                         ustring colorspace)
-{
-  return image->filename == filename && image->builtin_data == builtin_data &&
-         image->interpolation == interpolation && image->extension == extension &&
-         image->alpha_type == alpha_type && image->colorspace == colorspace;
-}
-
-int ImageManager::add_image(const string &filename,
-                            void *builtin_data,
-                            bool animated,
-                            float frame,
-                            InterpolationType interpolation,
-                            ExtensionType extension,
-                            ImageAlphaType alpha_type,
-                            ustring colorspace,
-                            ImageMetaData &metadata)
+int ImageManager::add_image(const ImageKey &key, float frame, ImageMetaData &metadata)
 {
   Image *img;
   size_t slot;
 
-  get_image_metadata(filename, builtin_data, colorspace, metadata);
+  get_image_metadata(key, metadata);
   ImageDataType type = metadata.type;
 
   thread_scoped_lock device_lock(device_mutex);
@@ -338,21 +314,11 @@ int ImageManager::add_image(const string &filename,
   /* Fnd existing image. */
   for (slot = 0; slot < images[type].size(); slot++) {
     img = images[type][slot];
-    if (img &&
-        image_equals(
-            img, filename, builtin_data, interpolation, extension, alpha_type, colorspace)) {
+    if (img && img->key == key) {
       if (

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list