Add perspective matrix equality to GrTextBlob::Key
This will allow text blobs to be removed from GrTextBlobRedrawCoordinator when they have perspective transformations. Bug: skia:12966 Change-Id: I53d2a7f5ea1ba0560b49c2f6bb4c62ffa564dcc8 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/540737 Reviewed-by: Herb Derby <herb@google.com> Commit-Queue: Herb Derby <herb@google.com>
This commit is contained in:
parent
48cc723716
commit
b647498072
1
AUTHORS
1
AUTHORS
@ -17,6 +17,7 @@ Amazon, Inc <*@amazon.com>
|
|||||||
Anthony Catel <paraboul@gmail.com>
|
Anthony Catel <paraboul@gmail.com>
|
||||||
ARM <*@arm.com>
|
ARM <*@arm.com>
|
||||||
Bharat Ahuja <ahujabharat93@gmail.com>
|
Bharat Ahuja <ahujabharat93@gmail.com>
|
||||||
|
Callum Moffat <smartercallum@gmail.com>
|
||||||
Casey Banner <kcbanner@gmail.com>
|
Casey Banner <kcbanner@gmail.com>
|
||||||
Dawson Coleman <dawsonmcoleman@gmail.com>
|
Dawson Coleman <dawsonmcoleman@gmail.com>
|
||||||
Deepak Mohan <hop2deep@gmail.com>
|
Deepak Mohan <hop2deep@gmail.com>
|
||||||
|
@ -2149,9 +2149,12 @@ bool GrTextBlob::Key::operator==(const GrTextBlob::Key& that) const {
|
|||||||
}
|
}
|
||||||
if (fScalerContextFlags != that.fScalerContextFlags) { return false; }
|
if (fScalerContextFlags != that.fScalerContextFlags) { return false; }
|
||||||
|
|
||||||
// Just punt on perspective.
|
|
||||||
if (fPositionMatrix.hasPerspective()) {
|
if (fPositionMatrix.hasPerspective()) {
|
||||||
return false;
|
if (fPositionMatrix[SkMatrix::kMPersp0] != that.fPositionMatrix[SkMatrix::kMPersp0] ||
|
||||||
|
fPositionMatrix[SkMatrix::kMPersp1] != that.fPositionMatrix[SkMatrix::kMPersp1] ||
|
||||||
|
fPositionMatrix[SkMatrix::kMPersp2] != that.fPositionMatrix[SkMatrix::kMPersp2]) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fHasSomeDirectSubRuns != that.fHasSomeDirectSubRuns) {
|
if (fHasSomeDirectSubRuns != that.fHasSomeDirectSubRuns) {
|
||||||
|
@ -2675,9 +2675,11 @@ generated_cc_atom(
|
|||||||
":Test_hdr",
|
":Test_hdr",
|
||||||
"//include/core:SkBitmap_hdr",
|
"//include/core:SkBitmap_hdr",
|
||||||
"//include/core:SkCanvas_hdr",
|
"//include/core:SkCanvas_hdr",
|
||||||
|
"//include/core:SkColorSpace_hdr",
|
||||||
"//include/core:SkSurface_hdr",
|
"//include/core:SkSurface_hdr",
|
||||||
"//include/core:SkTextBlob_hdr",
|
"//include/core:SkTextBlob_hdr",
|
||||||
"//src/core:SkSurfacePriv_hdr",
|
"//src/core:SkSurfacePriv_hdr",
|
||||||
|
"//src/gpu/ganesh:GrColorInfo_hdr",
|
||||||
"//src/gpu/ganesh/text:GrTextBlob_hdr",
|
"//src/gpu/ganesh/text:GrTextBlob_hdr",
|
||||||
"//tools:ToolUtils_hdr",
|
"//tools:ToolUtils_hdr",
|
||||||
],
|
],
|
||||||
|
@ -7,9 +7,11 @@
|
|||||||
|
|
||||||
#include "include/core/SkBitmap.h"
|
#include "include/core/SkBitmap.h"
|
||||||
#include "include/core/SkCanvas.h"
|
#include "include/core/SkCanvas.h"
|
||||||
|
#include "include/core/SkColorSpace.h"
|
||||||
#include "include/core/SkSurface.h"
|
#include "include/core/SkSurface.h"
|
||||||
#include "include/core/SkTextBlob.h"
|
#include "include/core/SkTextBlob.h"
|
||||||
#include "src/core/SkSurfacePriv.h"
|
#include "src/core/SkSurfacePriv.h"
|
||||||
|
#include "src/gpu/ganesh/GrColorInfo.h"
|
||||||
#include "src/gpu/ganesh/text/GrTextBlob.h"
|
#include "src/gpu/ganesh/text/GrTextBlob.h"
|
||||||
#include "tests/Test.h"
|
#include "tests/Test.h"
|
||||||
#include "tools/ToolUtils.h"
|
#include "tools/ToolUtils.h"
|
||||||
@ -323,3 +325,28 @@ DEF_TEST(SubRunAllocator, r) {
|
|||||||
REPORTER_ASSERT(r, ((intptr_t)ptr & 7) == 0);
|
REPORTER_ASSERT(r, ((intptr_t)ptr & 7) == 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DEF_TEST(KeyEqualityOnPerspective, r) {
|
||||||
|
SkTextBlobBuilder builder;
|
||||||
|
SkFont font(SkTypeface::MakeDefault(), 16);
|
||||||
|
builder.allocRun(font, 1, 0.0f, 0.0f);
|
||||||
|
auto blob = builder.make();
|
||||||
|
SkGlyphRunBuilder grBuilder;
|
||||||
|
auto glyphRunList = grBuilder.blobToGlyphRunList(*blob, {100, 100});
|
||||||
|
SkPaint paint;
|
||||||
|
SkSurfaceProps props;
|
||||||
|
GrColorInfo colorInfo(GrColorType::kRGBA_8888, kPremul_SkAlphaType, nullptr);
|
||||||
|
SkMatrix matrix1;
|
||||||
|
matrix1.setAll(1, 0, 0, 0, 1, 0, 1, 1, 1);
|
||||||
|
SkMatrix matrix2;
|
||||||
|
matrix2.setAll(1, 0, 0, 0, 1, 0, 2, 2, 1);
|
||||||
|
GrSDFTControl control(false, false, 1, 100);
|
||||||
|
auto key1 = std::get<1>(
|
||||||
|
GrTextBlob::Key::Make(glyphRunList, paint, props, colorInfo, matrix1, control));
|
||||||
|
auto key2 = std::get<1>(
|
||||||
|
GrTextBlob::Key::Make(glyphRunList, paint, props, colorInfo, matrix1, control));
|
||||||
|
auto key3 = std::get<1>(
|
||||||
|
GrTextBlob::Key::Make(glyphRunList, paint, props, colorInfo, matrix2, control));
|
||||||
|
REPORTER_ASSERT(r, key1 == key2);
|
||||||
|
REPORTER_ASSERT(r, !(key1 == key3));
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user