5 #include "flutter/testing/testing.h"
6 #include "gmock/gmock.h"
12 #include "impeller/renderer/testing/mocks.h"
17 using ::testing::Return;
42 .size =
ISize(100, 100),
44 Scalar sigma_radius_1 = CalculateSigmaForBlurRadius(1.0);
45 auto contents = std::make_unique<DirectionalGaussianBlurFilterContents>();
46 contents->SetSigma(
Sigma{sigma_radius_1});
47 contents->SetDirection({1.0, 0.0});
48 std::shared_ptr<Texture> texture =
49 GetContentContext()->GetContext()->GetResourceAllocator()->CreateTexture(
54 std::optional<Rect> coverage = contents->GetFilterCoverage(
56 EXPECT_TRUE(coverage.has_value());
57 if (coverage.has_value()) {
58 EXPECT_NEAR(coverage->GetLeft(), 100 - 2,
60 EXPECT_NEAR(coverage->GetTop(), 100, 0.01);
61 EXPECT_NEAR(coverage->GetRight(), 200 + 2,
63 EXPECT_NEAR(coverage->GetBottom(), 200, 0.01);
68 Scalar sigma_radius_1 = CalculateSigmaForBlurRadius(1.0);
69 auto contents = std::make_unique<DirectionalGaussianBlurFilterContents>();
70 contents->SetSigma(
Sigma{sigma_radius_1});
71 contents->SetDirection({1.0, 0.0});
72 std::optional<Rect> coverage = contents->GetFilterSourceCoverage(
79 Scalar sigma_radius_1 = CalculateSigmaForBlurRadius(1.0);
80 auto contents = std::make_unique<DirectionalGaussianBlurFilterContents>();
81 contents->SetSigma(
Sigma{sigma_radius_1});
82 contents->SetDirection({1.0, 0.0});
83 std::shared_ptr<ContentContext> renderer = GetContentContext();
86 std::optional<Entity> result =
87 contents->GetEntity(*renderer, entity, coverage_hint);
88 ASSERT_FALSE(result.has_value());
92 RenderCoverageMatchesGetCoverage) {
96 .size =
ISize(100, 100),
98 std::shared_ptr<Texture> texture =
99 GetContentContext()->GetContext()->GetResourceAllocator()->CreateTexture(
101 Scalar sigma_radius_1 = CalculateSigmaForBlurRadius(1.0);
102 auto contents = std::make_unique<DirectionalGaussianBlurFilterContents>();
103 contents->SetSigma(
Sigma{sigma_radius_1});
104 contents->SetDirection({1.0, 0.0});
106 std::shared_ptr<ContentContext> renderer = GetContentContext();
109 std::optional<Entity> result =
110 contents->GetEntity(*renderer, entity, {});
111 EXPECT_TRUE(result.has_value());
112 if (result.has_value()) {
114 std::optional<Rect> result_coverage = result.value().GetCoverage();
115 std::optional<Rect> contents_coverage = contents->GetCoverage(entity);
116 EXPECT_TRUE(result_coverage.has_value());
117 EXPECT_TRUE(contents_coverage.has_value());
118 if (result_coverage.has_value() && contents_coverage.has_value()) {
119 EXPECT_TRUE(
RectNear(result_coverage.value(), contents_coverage.value()));
121 EXPECT_NEAR(result_coverage.value().GetLeft(), -1.f, 0.1f);
122 EXPECT_NEAR(result_coverage.value().GetTop(), 0.f, 0.001f);
123 EXPECT_NEAR(result_coverage.value().GetRight(), 101.f, 0.1f);
124 EXPECT_NEAR(result_coverage.value().GetBottom(), 100.f, 0.001f);
130 TextureContentsWithDestinationRect) {
134 .size =
ISize(100, 100),
137 std::shared_ptr<Texture> texture =
138 GetContentContext()->GetContext()->GetResourceAllocator()->CreateTexture(
140 auto texture_contents = std::make_shared<TextureContents>();
141 texture_contents->SetSourceRect(
Rect::MakeSize(texture->GetSize()));
142 texture_contents->SetTexture(texture);
144 50, 40, texture->GetSize().width, texture->GetSize().height));
146 Scalar sigma_radius_1 = CalculateSigmaForBlurRadius(1.0);
147 auto contents = std::make_unique<DirectionalGaussianBlurFilterContents>();
148 contents->SetSigma(
Sigma{sigma_radius_1});
149 contents->SetDirection({1.0, 0.0});
151 std::shared_ptr<ContentContext> renderer = GetContentContext();
154 std::optional<Entity> result =
155 contents->GetEntity(*renderer, entity, {});
156 EXPECT_TRUE(result.has_value());
157 if (result.has_value()) {
159 std::optional<Rect> result_coverage = result.value().GetCoverage();
160 std::optional<Rect> contents_coverage = contents->GetCoverage(entity);
161 EXPECT_TRUE(result_coverage.has_value());
162 EXPECT_TRUE(contents_coverage.has_value());
163 if (result_coverage.has_value() && contents_coverage.has_value()) {
164 EXPECT_TRUE(
RectNear(result_coverage.value(), contents_coverage.value()));
166 EXPECT_NEAR(result_coverage.value().GetLeft(), 49.f, 0.1f);
167 EXPECT_NEAR(result_coverage.value().GetTop(), 40.f, 0.001f);
168 EXPECT_NEAR(result_coverage.value().GetRight(), 151.f, 0.1f);
169 EXPECT_NEAR(result_coverage.value().GetBottom(), 140.f, 0.001f);
175 TextureContentsWithDestinationRectScaled) {
179 .size =
ISize(100, 100),
182 std::shared_ptr<Texture> texture =
183 GetContentContext()->GetContext()->GetResourceAllocator()->CreateTexture(
185 auto texture_contents = std::make_shared<TextureContents>();
186 texture_contents->SetSourceRect(
Rect::MakeSize(texture->GetSize()));
187 texture_contents->SetTexture(texture);
189 50, 40, texture->GetSize().width, texture->GetSize().height));
191 Scalar sigma_radius_1 = CalculateSigmaForBlurRadius(1.0);
192 auto contents = std::make_unique<DirectionalGaussianBlurFilterContents>();
193 contents->SetSigma(
Sigma{sigma_radius_1});
194 contents->SetDirection({1.0, 0.0});
196 std::shared_ptr<ContentContext> renderer = GetContentContext();
200 std::optional<Entity> result =
201 contents->GetEntity(*renderer, entity, {});
202 EXPECT_TRUE(result.has_value());
203 if (result.has_value()) {
205 std::optional<Rect> result_coverage = result.value().GetCoverage();
206 std::optional<Rect> contents_coverage = contents->GetCoverage(entity);
207 EXPECT_TRUE(result_coverage.has_value());
208 EXPECT_TRUE(contents_coverage.has_value());
209 if (result_coverage.has_value() && contents_coverage.has_value()) {
212 EXPECT_NEAR(result_coverage.value().GetLeft(), 98.f, 0.1f);
213 EXPECT_NEAR(result_coverage.value().GetTop(), 80.f, 0.001f);
214 EXPECT_NEAR(result_coverage.value().GetRight(), 302.f, 0.1f);
215 EXPECT_NEAR(result_coverage.value().GetBottom(), 280.f, 0.001f);
217 EXPECT_NEAR(contents_coverage.value().GetLeft(), 98.f, 0.1f);
218 EXPECT_NEAR(contents_coverage.value().GetTop(), 80.f, 0.001f);
219 EXPECT_NEAR(contents_coverage.value().GetRight(), 302.f, 0.1f);
220 EXPECT_NEAR(contents_coverage.value().GetBottom(), 280.f, 0.001f);