[Bf-blender-cvs] [da5662cd0fc] temp-T96710-pbvh-pixels: Remove sorting and barycentric encoding.
Jeroen Bakker
noreply at git.blender.org
Mon Apr 11 09:40:17 CEST 2022
Commit: da5662cd0fcc48c5c08561622c3b59e7ba6decad
Author: Jeroen Bakker
Date: Mon Apr 11 09:07:04 2022 +0200
Branches: temp-T96710-pbvh-pixels
https://developer.blender.org/rBda5662cd0fcc48c5c08561622c3b59e7ba6decad
Remove sorting and barycentric encoding.
===================================================================
M source/blender/blenkernel/BKE_pbvh.hh
M source/blender/blenkernel/intern/pbvh_pixels.cc
M source/blender/blenkernel/intern/pbvh_pixels_seams.cc
M source/blender/editors/sculpt_paint/sculpt_paint_image.cc
===================================================================
diff --git a/source/blender/blenkernel/BKE_pbvh.hh b/source/blender/blenkernel/BKE_pbvh.hh
index 42f745890bd..7dc511e68cc 100644
--- a/source/blender/blenkernel/BKE_pbvh.hh
+++ b/source/blender/blenkernel/BKE_pbvh.hh
@@ -17,15 +17,13 @@
namespace blender::bke::pbvh::pixels {
-/* TODO(jbakker): move encoders to blenlib. */
-class EncodedBarycentricWeights;
-
/** Barycentric weights. */
class BarycentricWeights {
private:
float3 weights;
public:
+ explicit BarycentricWeights() noexcept = default;
explicit BarycentricWeights(const float2 v1, const float2 v2, const float2 v3, const float2 co)
{
barycentric_weights_v2(v1, v2, v3, co, weights);
@@ -66,40 +64,6 @@ class BarycentricWeights {
{
return weights;
}
-
- friend class EncodedBarycentricWeights;
-};
-
-/**
- * Barycentric weights encoded into 2 floats.
- *
- * The third coordinate can be extracted as all 3 coordinates should sum up to 1.
- *
- * \code{.cc}
- * co[2] = 1.0 - co[0] - co[1]
- * \endcode
- */
-class EncodedBarycentricWeights {
- private:
- float2 encoded;
-
- public:
- EncodedBarycentricWeights &operator=(const BarycentricWeights decoded)
- {
- encoded = float2(decoded.weights.x, decoded.weights.y);
- return *this;
- }
-
- const BarycentricWeights decode() const
- {
- return BarycentricWeights(float3(encoded.x, encoded.y, 1.0 - encoded.x - encoded.y));
- }
-
- EncodedBarycentricWeights &operator-=(const float2 &other)
- {
- encoded -= other;
- return *this;
- }
};
/**
@@ -207,21 +171,17 @@ struct Triangles {
* Encode multiple sequential pixels to reduce memory footprint.
*/
struct PixelsPackage {
- /** Barycentric coordinate of the first encoded pixel. */
- EncodedBarycentricWeights start_barycentric_coord;
- /** Image coordinate starting of the first encoded pixel. */
+ /** Barycentric coordinate of the first pixel. */
+ BarycentricWeights start_barycentric_coord;
+ /** Image coordinate starting of the first pixel. */
ushort2 start_image_coordinate;
- /** Number of sequetial pixels encoded in this package. */
+ /** Number of sequential pixels encoded in this package. */
ushort num_pixels;
/** Reference to the pbvh triangle index. */
ushort triangle_index;
};
-class PixelPackages : public Vector<PixelsPackage> {
- public:
- /* Sort the packages to improve CPU cache utilization during painting. */
- void sort();
-};
+using PixelPackages = Vector<PixelsPackage>;
struct TileData {
short tile_number;
diff --git a/source/blender/blenkernel/intern/pbvh_pixels.cc b/source/blender/blenkernel/intern/pbvh_pixels.cc
index 35d72cf1741..f8afbdbd6f9 100644
--- a/source/blender/blenkernel/intern/pbvh_pixels.cc
+++ b/source/blender/blenkernel/intern/pbvh_pixels.cc
@@ -210,7 +210,6 @@ static void do_encode_pixels(void *__restrict userdata,
}
tile_data.tile_number = image_tile.get_tile_number();
- tile_data.packages.sort();
node_data->tiles.append(tile_data);
}
}
@@ -477,19 +476,6 @@ void BKE_pbvh_pixels_mark_image_dirty(PBVHNode &node, Image &image, ImageUser &i
}
}
-void PixelPackages::sort()
-{
- /* This fails when using GCC. (read out of bounds.) */
- #if 0
- std::sort(this->begin(), this->end(), [](const PixelsPackage &a, const PixelsPackage &b) {
- if (a.start_image_coordinate[1] < b.start_image_coordinate[1]) {
- return true;
- }
- return a.start_image_coordinate[0] < b.start_image_coordinate[0];
- });
- #endif
-}
-
} // namespace blender::bke::pbvh::pixels
extern "C" {
diff --git a/source/blender/blenkernel/intern/pbvh_pixels_seams.cc b/source/blender/blenkernel/intern/pbvh_pixels_seams.cc
index 7345306876c..18deb632f2a 100644
--- a/source/blender/blenkernel/intern/pbvh_pixels_seams.cc
+++ b/source/blender/blenkernel/intern/pbvh_pixels_seams.cc
@@ -18,8 +18,8 @@ struct ExtendUVContext {
};
static bool intersect_uv_pixel(const ushort2 &pixel_coordinate,
- const ImBuf &image_buffer,
- const float2 triangle_uvs[3])
+ const ImBuf &image_buffer,
+ const float2 triangle_uvs[3])
{
float2 uv_bottom_left = float2(pixel_coordinate.x / float(image_buffer.x),
@@ -79,7 +79,7 @@ struct UVSeamExtenderRowPackage {
BLI_assert(extend_xmin_len != 0);
package->num_pixels += 1;
package->start_image_coordinate[0] -= 1;
- package->start_barycentric_coord -= float2(triangle_paint_data->add_barycentric_coord_x);
+ package->start_barycentric_coord -= triangle_paint_data->add_barycentric_coord_x;
extend_xmin_len--;
}
diff --git a/source/blender/editors/sculpt_paint/sculpt_paint_image.cc b/source/blender/editors/sculpt_paint/sculpt_paint_image.cc
index 759339ced17..60d0e2827a9 100644
--- a/source/blender/editors/sculpt_paint/sculpt_paint_image.cc
+++ b/source/blender/editors/sculpt_paint/sculpt_paint_image.cc
@@ -245,7 +245,7 @@ template<typename ImagePixelAccessor> class PaintingKernel {
Pixel get_start_pixel(const TrianglePaintInput &triangle,
const PixelsPackage &encoded_pixels) const
{
- return init_pixel(triangle, encoded_pixels.start_barycentric_coord.decode());
+ return init_pixel(triangle, encoded_pixels.start_barycentric_coord);
}
/**
@@ -254,9 +254,8 @@ template<typename ImagePixelAccessor> class PaintingKernel {
const PixelsPackage &encoded_pixels,
const Pixel &start_pixel) const
{
- Pixel result = init_pixel(triangle,
- encoded_pixels.start_barycentric_coord.decode() +
- triangle.add_barycentric_coord_x);
+ Pixel result = init_pixel(
+ triangle, encoded_pixels.start_barycentric_coord + triangle.add_barycentric_coord_x);
return result - start_pixel;
}
More information about the Bf-blender-cvs
mailing list