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; } _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs