[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