From 8504b94a0c813a5f38a33a45f1989594b98a148e Mon Sep 17 00:00:00 2001 From: Ink Open Source Date: Fri, 6 Mar 2026 10:32:52 -0800 Subject: [PATCH] Remove the restriction that all texture layers in a paint must use the same texture mapping mode PiperOrigin-RevId: 879703067 --- ink/brush/brush_paint.cc | 9 --------- ink/brush/brush_paint_test.cc | 10 ---------- ink/brush/fuzz_domains.cc | 17 ++++++----------- 3 files changed, 6 insertions(+), 30 deletions(-) diff --git a/ink/brush/brush_paint.cc b/ink/brush/brush_paint.cc index 4b234e58..fc6cd59e 100644 --- a/ink/brush/brush_paint.cc +++ b/ink/brush/brush_paint.cc @@ -196,7 +196,6 @@ absl::Status ValidateBrushPaintTopLevel(const BrushPaint& paint) { int first_animation_columns = paint.texture_layers[0].animation_columns; absl::Duration first_animation_duration = paint.texture_layers[0].animation_duration; - BrushPaint::TextureMapping first_mapping = paint.texture_layers[0].mapping; for (const BrushPaint::TextureLayer& layer : paint.texture_layers) { if (layer.animation_frames != first_animation_frames) { return absl::InvalidArgumentError(absl::StrCat( @@ -223,14 +222,6 @@ absl::Status ValidateBrushPaintTopLevel(const BrushPaint& paint) { first_animation_duration, "` and `", layer.animation_duration, "`")); } - // TODO: b/375203215 - Remove the below check once we are able to mix - // rendering different mapping modes in a single `BrushPaint`. - if (layer.mapping != first_mapping) { - return absl::InvalidArgumentError( - absl::StrCat("`BrushPaint::TextureLayer::mapping` must be the same " - "for all texture layers. Got `", - first_mapping, "` and `", layer.mapping, "`")); - } } } if (!IsValidBrushPaintSelfOverlap(paint.self_overlap)) { diff --git a/ink/brush/brush_paint_test.cc b/ink/brush/brush_paint_test.cc index f2227646..783d37f0 100644 --- a/ink/brush/brush_paint_test.cc +++ b/ink/brush/brush_paint_test.cc @@ -633,16 +633,6 @@ TEST(BrushPaintTest, InvalidColorFunction) { HasSubstr("OpacityMultiplier"))); } -TEST(BrushPaintTest, MismatchedTextureMappings) { - EXPECT_THAT(brush_internal::ValidateBrushPaint(BrushPaint{ - {{.client_texture_id = std::string(kTestTextureId), - .mapping = BrushPaint::TextureMapping::kTiling}, - {.client_texture_id = std::string(kTestTextureId), - .mapping = BrushPaint::TextureMapping::kStamping}}}), - StatusIs(absl::StatusCode::kInvalidArgument, - HasSubstr("TextureLayer::mapping` must be the same"))); -} - TEST(BrushPaintTest, MismatchedAnimationFrames) { EXPECT_THAT( brush_internal::ValidateBrushPaint( diff --git a/ink/brush/fuzz_domains.cc b/ink/brush/fuzz_domains.cc index 8fbc0956..651a976f 100644 --- a/ink/brush/fuzz_domains.cc +++ b/ink/brush/fuzz_domains.cc @@ -629,9 +629,8 @@ Domain ArbitraryBrushPaintBlendMode() { // LINT.ThenChange(brush_paint.h:blend_mode) Domain -ValidBrushPaintTextureLayerWithMappingAndAnimationFrames( - BrushPaint::TextureMapping mapping, int animation_frames, - int animation_rows, int animation_columns, +ValidBrushPaintTextureLayerWithAnimationParameters( + int animation_frames, int animation_rows, int animation_columns, absl::Duration animation_duration, DomainVariant variant) { auto texture_layer = [=](Vec size) { auto animation_frames_domain = Just(animation_frames); @@ -645,7 +644,7 @@ ValidBrushPaintTextureLayerWithMappingAndAnimationFrames( animation_duration_domain = Just(absl::Seconds(1)); } return StructOf( - Arbitrary(), Just(mapping), + Arbitrary(), ArbitraryBrushPaintTextureMapping(), ArbitraryBrushPaintTextureOrigin(), ArbitraryBrushPaintTextureSizeUnit(), ArbitraryBrushPaintTextureWrap(), ArbitraryBrushPaintTextureWrap(), Just(size), @@ -670,22 +669,18 @@ Domain ArbitraryBrushPaintSelfOverlap() { Domain ValidBrushPaint(DomainVariant variant) { return FlatMap( - [=](BrushPaint::TextureMapping mapping, - std::tuple animation_frames_rows_columns, + [=](std::tuple animation_frames_rows_columns, absl::Duration animation_duration) { return std::apply( [&](int frames, int rows, int columns) { return fuzztest::StructOf( - VectorOf( - ValidBrushPaintTextureLayerWithMappingAndAnimationFrames( - mapping, frames, rows, columns, animation_duration, - variant)), + VectorOf(ValidBrushPaintTextureLayerWithAnimationParameters( + frames, rows, columns, animation_duration, variant)), VectorOf(ValidColorFunction()), ArbitraryBrushPaintSelfOverlap()); }, animation_frames_rows_columns); }, - ArbitraryBrushPaintTextureMapping(), FlatMap( [](int rows, int columns) { return TupleOf(InRange(1, rows * columns), Just(rows),