[Bf-blender-cvs] [beeeb6da305] master: Cleanup: Integer types, references in geometry node image texture node

Iliya Katueshenock noreply at git.blender.org
Sun Nov 27 01:12:37 CET 2022


Commit: beeeb6da3050441881c43c7a46a16557c60da797
Author: Iliya Katueshenock
Date:   Sat Nov 26 18:00:47 2022 -0600
Branches: master
https://developer.blender.org/rBbeeeb6da3050441881c43c7a46a16557c60da797

Cleanup: Integer types, references in geometry node image texture node

While implementing T102289, I noticed that this node has
several solutions that are different from other, newer nodes.
 - Explicitly set default values
 - Use references
 - Reduce the size of the node settings structure

Differential Revision: https://developer.blender.org/D16548

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

M	source/blender/makesdna/DNA_node_types.h
M	source/blender/nodes/geometry/nodes/node_geo_image_texture.cc

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

diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h
index f014db3a127..fce5f4d5be6 100644
--- a/source/blender/makesdna/DNA_node_types.h
+++ b/source/blender/makesdna/DNA_node_types.h
@@ -1521,8 +1521,8 @@ typedef struct NodeGeometrySeparateGeometry {
 } NodeGeometrySeparateGeometry;
 
 typedef struct NodeGeometryImageTexture {
-  int interpolation;
-  int extension;
+  int8_t interpolation;
+  int8_t extension;
 } NodeGeometryImageTexture;
 
 typedef struct NodeGeometryViewer {
diff --git a/source/blender/nodes/geometry/nodes/node_geo_image_texture.cc b/source/blender/nodes/geometry/nodes/node_geo_image_texture.cc
index 0d339620047..3c0f3af4ed2 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_image_texture.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_image_texture.cc
@@ -40,21 +40,23 @@ static void node_layout(uiLayout *layout, bContext * /*C*/, PointerRNA *ptr)
 static void node_init(bNodeTree * /*tree*/, bNode *node)
 {
   NodeGeometryImageTexture *tex = MEM_cnew<NodeGeometryImageTexture>(__func__);
+  tex->interpolation = SHD_INTERP_LINEAR;
+  tex->extension = SHD_IMAGE_EXTENSION_REPEAT;
   node->storage = tex;
 }
 
 class ImageFieldsFunction : public fn::MultiFunction {
  private:
-  const int interpolation_;
-  const int extension_;
+  const int8_t interpolation_;
+  const int8_t extension_;
   Image &image_;
   ImageUser image_user_;
   void *image_lock_;
   ImBuf *image_buffer_;
 
  public:
-  ImageFieldsFunction(const int interpolation,
-                      const int extension,
+  ImageFieldsFunction(const int8_t interpolation,
+                      const int8_t extension,
                       Image &image,
                       ImageUser image_user)
       : interpolation_(interpolation),
@@ -112,12 +114,12 @@ class ImageFieldsFunction : public fn::MultiFunction {
     return std::clamp(x, 0, width - 1);
   }
 
-  static float4 image_pixel_lookup(const ImBuf *ibuf, const int px, const int py)
+  static float4 image_pixel_lookup(const ImBuf &ibuf, const int px, const int py)
   {
-    if (px < 0 || py < 0 || px >= ibuf->x || py >= ibuf->y) {
+    if (px < 0 || py < 0 || px >= ibuf.x || py >= ibuf.y) {
       return float4(0.0f, 0.0f, 0.0f, 0.0f);
     }
-    return ((const float4 *)ibuf->rect_float)[px + py * ibuf->x];
+    return ((const float4 *)ibuf.rect_float)[px + py * ibuf.x];
   }
 
   static float frac(const float x, int *ix)
@@ -127,13 +129,13 @@ class ImageFieldsFunction : public fn::MultiFunction {
     return x - float(i);
   }
 
-  static float4 image_cubic_texture_lookup(const ImBuf *ibuf,
+  static float4 image_cubic_texture_lookup(const ImBuf &ibuf,
                                            const float px,
                                            const float py,
                                            const int extension)
   {
-    const int width = ibuf->x;
-    const int height = ibuf->y;
+    const int width = ibuf.x;
+    const int height = ibuf.y;
     int pix, piy, nix, niy;
     const float tx = frac(px * float(width) - 0.5f, &pix);
     const float ty = frac(py * float(height) - 0.5f, &piy);
@@ -207,13 +209,13 @@ class ImageFieldsFunction : public fn::MultiFunction {
                     u[3] * image_pixel_lookup(ibuf, xc[3], yc[3])));
   }
 
-  static float4 image_linear_texture_lookup(const ImBuf *ibuf,
+  static float4 image_linear_texture_lookup(const ImBuf &ibuf,
                                             const float px,
                                             const float py,
-                                            const int extension)
+                                            const int8_t extension)
   {
-    const int width = ibuf->x;
-    const int height = ibuf->y;
+    const int width = ibuf.x;
+    const int height = ibuf.y;
     int pix, piy, nix, niy;
     const float nfx = frac(px * float(width) - 0.5f, &pix);
     const float nfy = frac(py * float(height) - 0.5f, &piy);
@@ -249,13 +251,13 @@ class ImageFieldsFunction : public fn::MultiFunction {
            image_pixel_lookup(ibuf, nix, niy) * nfx * nfy;
   }
 
-  static float4 image_closest_texture_lookup(const ImBuf *ibuf,
+  static float4 image_closest_texture_lookup(const ImBuf &ibuf,
                                              const float px,
                                              const float py,
                                              const int extension)
   {
-    const int width = ibuf->x;
-    const int height = ibuf->y;
+    const int width = ibuf.x;
+    const int height = ibuf.y;
     int ix, iy;
     const float tx = frac(px * float(width), &ix);
     const float ty = frac(py * float(height), &iy);
@@ -299,20 +301,20 @@ class ImageFieldsFunction : public fn::MultiFunction {
       case SHD_INTERP_LINEAR:
         for (const int64_t i : mask) {
           const float3 p = vectors[i];
-          color_data[i] = image_linear_texture_lookup(image_buffer_, p.x, p.y, extension_);
+          color_data[i] = image_linear_texture_lookup(*image_buffer_, p.x, p.y, extension_);
         }
         break;
       case SHD_INTERP_CLOSEST:
         for (const int64_t i : mask) {
           const float3 p = vectors[i];
-          color_data[i] = image_closest_texture_lookup(image_buffer_, p.x, p.y, extension_);
+          color_data[i] = image_closest_texture_lookup(*image_buffer_, p.x, p.y, extension_);
         }
         break;
       case SHD_INTERP_CUBIC:
       case SHD_INTERP_SMART:
         for (const int64_t i : mask) {
           const float3 p = vectors[i];
-          color_data[i] = image_cubic_texture_lookup(image_buffer_, p.x, p.y, extension_);
+          color_data[i] = image_cubic_texture_lookup(*image_buffer_, p.x, p.y, extension_);
         }
         break;
     }



More information about the Bf-blender-cvs mailing list