[Bf-blender-cvs] [cd724f7bd52] new-object-types: Cleanup: add ImageKey to avoid longer argument lists and duplicated code

Brecht Van Lommel noreply at git.blender.org
Thu Feb 20 13:27:00 CET 2020


Commit: cd724f7bd52f15ac9a336f0705b6231ef439184a
Author: Brecht Van Lommel
Date:   Thu Feb 20 00:52:50 2020 +0100
Branches: new-object-types
https://developer.blender.org/rBcd724f7bd52f15ac9a336f0705b6231ef439184a

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 635405e42c7..aed46425423 100644
--- a/intern/cycles/blender/blender_shader.cpp
+++ b/intern/cycles/blender/blender_shader.cpp
@@ -634,6 +634,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
@@ -676,21 +684,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)) {
@@ -698,6 +695,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 ||
@@ -725,19 +728,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)) {
@@ -888,12 +882,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 bdcd25d08f2..c296ce187a3 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.
@@ -123,19 +118,14 @@ static void sync_volume_object(BL::BlendData &b_data, BL::Object &b_ob, Scene *s
                             mesh->attributes.add(name, TypeDesc::TypeFloat, ATTR_ELEMENT_VOXEL);
       VoxelAttribute *volume_data = attr->data_voxel();
       ImageMetaData metadata;
-      const bool animated = false;
       const float frame = b_volume.grids.frame();
 
+      ImageKey key;
+      key.filename = name.c_str();
+      key.builtin_data = b_volume.ptr.data;
+
       volume_data->manager = scene->image_manager;
-      volume_data->slot = scene->image_manager->add_image(name.c_str(),
-                                                          b_volume.ptr.data,
-                                                          animated,
-                                                          frame,
-                                                          INTERPOLATION_LINEAR,
-                                                          EXTENSION_CLIP,
-                                                          IMAGE_ALPHA_AUTO,
-                                                          u_colorspace_raw,
-                                                          metadata);
+      volume_data->slot = scene->image_manager->add_image(key, frame, metadata);
 
       /* TODO: support each grid having own transform. */
       /* TODO: support full transform instead of only using boundbox. */
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

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list