Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 2c46f5e

Browse files
committed
[Impeller] Corrected the 'texture_coords' computation in 'Geometry::GetPositionUVBuffer'
1 parent b6586ab commit 2c46f5e

File tree

3 files changed

+20
-13
lines changed

3 files changed

+20
-13
lines changed

impeller/aiks/aiks_unittests.cc

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,9 @@ bool GenerateMipmap(const std::shared_ptr<Context>& context,
147147
return buffer->SubmitCommands();
148148
}
149149

150-
void CanRenderTiledTexture(AiksTest* aiks_test, Entity::TileMode tile_mode) {
150+
void CanRenderTiledTexture(AiksTest* aiks_test,
151+
Entity::TileMode tile_mode,
152+
Matrix local_matrix = {}) {
151153
auto context = aiks_test->GetContext();
152154
ASSERT_TRUE(context);
153155
auto texture = aiks_test->CreateTextureForFixture("table_mountain_nx.png",
@@ -158,7 +160,7 @@ void CanRenderTiledTexture(AiksTest* aiks_test, Entity::TileMode tile_mode) {
158160
canvas.Translate({100.0f, 100.0f, 0});
159161
Paint paint;
160162
paint.color_source =
161-
ColorSource::MakeImage(texture, tile_mode, tile_mode, {}, {});
163+
ColorSource::MakeImage(texture, tile_mode, tile_mode, {}, local_matrix);
162164
paint.color = Color(1, 1, 1, 1);
163165
canvas.DrawRect({0, 0, 600, 600}, paint);
164166

@@ -199,6 +201,11 @@ TEST_P(AiksTest, CanRenderTiledTextureDecal) {
199201
CanRenderTiledTexture(this, Entity::TileMode::kDecal);
200202
}
201203

204+
TEST_P(AiksTest, CanRenderTiledTextureClampWithTranslate) {
205+
CanRenderTiledTexture(this, Entity::TileMode::kClamp,
206+
Matrix::MakeTranslation({172.f, 172.f, 0.f}));
207+
}
208+
202209
TEST_P(AiksTest, CanRenderImageRect) {
203210
Canvas canvas;
204211
Paint paint;

impeller/entity/geometry/fill_path_geometry.cc

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,9 @@ GeometryResult FillPathGeometry::GetPositionUVBuffer(
8484
for (auto i = 0u; i < points.size(); i++) {
8585
VS::PerVertexData data;
8686
data.position = points[i];
87-
auto coverage_coords =
88-
(points[i] - texture_coverage.origin) / texture_coverage.size;
89-
data.texture_coords = effect_transform * coverage_coords;
87+
data.texture_coords = effect_transform *
88+
(points[i] - texture_coverage.origin) /
89+
texture_coverage.size;
9090
vertex_builder.AppendVertex(data);
9191
}
9292
for (auto i = 0u; i < indices.size(); i++) {
@@ -114,9 +114,9 @@ GeometryResult FillPathGeometry::GetPositionUVBuffer(
114114
VS::PerVertexData data;
115115
Point vtx = {vertices[i], vertices[i + 1]};
116116
data.position = vtx;
117-
auto coverage_coords =
118-
(vtx - texture_coverage.origin) / texture_coverage.size;
119-
data.texture_coords = effect_transform * coverage_coords;
117+
data.texture_coords = effect_transform *
118+
(vtx - texture_coverage.origin) /
119+
texture_coverage.size;
120120
vertex_builder.AppendVertex(data);
121121
}
122122
FML_DCHECK(vertex_builder.GetVertexCount() == vertices_count / 2);

impeller/entity/geometry/geometry.cc

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,9 @@ ComputeUVGeometryCPU(
5656
&texture_origin](SolidFillVertexShader::PerVertexData old_vtx) {
5757
TextureFillVertexShader::PerVertexData data;
5858
data.position = old_vtx.position;
59-
auto coverage_coords =
60-
(old_vtx.position - texture_origin) / texture_coverage;
61-
data.texture_coords = effect_transform * coverage_coords;
59+
data.texture_coords = effect_transform *
60+
(old_vtx.position - texture_origin) /
61+
texture_coverage;
6262
vertex_builder.AppendVertex(data);
6363
});
6464
return vertex_builder;
@@ -76,8 +76,8 @@ GeometryResult ComputeUVGeometryForRect(Rect source_rect,
7676
auto points = source_rect.GetPoints();
7777
for (auto i = 0u, j = 0u; i < 8; i += 2, j++) {
7878
data[i] = points[j];
79-
data[i + 1] = effect_transform * ((points[j] - texture_coverage.origin) /
80-
texture_coverage.size);
79+
data[i + 1] = effect_transform * (points[j] - texture_coverage.origin) /
80+
texture_coverage.size;
8181
}
8282

8383
return GeometryResult{

0 commit comments

Comments
 (0)