aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkColorSpace_ICC.cpp
diff options
context:
space:
mode:
authorGravatar brianosman <brianosman@google.com>2016-09-09 10:36:17 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-09-09 10:36:17 -0700
commitde68d6c4616d86621373d88100002ddfdb9c08e3 (patch)
treec3020d0d2ab8a4157beeab02fc32efc1518bb1e6 /src/core/SkColorSpace_ICC.cpp
parent81a478ca6c36aac3e53ce0373a281ac8940f4780 (diff)
Fix storage of gamut transform matrices in SkColorSpace
We were effectively storing the transpose, which made all of our operations on individual colors, and our concatenation of matrices awkward and backwards. I'm planning to push this further into Ganesh, where I had incorrectly adjusted to the previous layout, treating colors as row vectors in the shaders. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2324843003 Review-Url: https://codereview.chromium.org/2324843003
Diffstat (limited to 'src/core/SkColorSpace_ICC.cpp')
-rwxr-xr-xsrc/core/SkColorSpace_ICC.cpp14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/core/SkColorSpace_ICC.cpp b/src/core/SkColorSpace_ICC.cpp
index 27d947b54b..4ef9f2b0a8 100755
--- a/src/core/SkColorSpace_ICC.cpp
+++ b/src/core/SkColorSpace_ICC.cpp
@@ -714,7 +714,7 @@ static bool load_matrix(SkMatrix44* toXYZ, const uint8_t* src, size_t len) {
array[13] = 0.0f;
array[14] = 0.0f;
array[15] = 1.0f;
- toXYZ->setColMajorf(array);
+ toXYZ->setRowMajorf(array);
return true;
}
@@ -962,7 +962,9 @@ sk_sp<SkColorSpace> SkColorSpace::NewICC(const void* input, size_t len) {
return_null("Need valid rgb tags for XYZ space");
}
SkMatrix44 mat(SkMatrix44::kUninitialized_Constructor);
- mat.set3x3RowMajorf(toXYZ);
+ mat.set3x3(toXYZ[0], toXYZ[1], toXYZ[2],
+ toXYZ[3], toXYZ[4], toXYZ[5],
+ toXYZ[6], toXYZ[7], toXYZ[8]);
r = ICCTag::Find(tags.get(), tagCount, kTAG_rTRC);
g = ICCTag::Find(tags.get(), tagCount, kTAG_gTRC);
@@ -1213,12 +1215,12 @@ static constexpr uint32_t gEmptyTextTag[3] {
0, // Zero records
};
-static void write_xyz_tag(uint32_t* ptr, const SkMatrix44& toXYZ, int row) {
+static void write_xyz_tag(uint32_t* ptr, const SkMatrix44& toXYZ, int col) {
ptr[0] = SkEndian_SwapBE32(kXYZ_PCSSpace);
ptr[1] = 0;
- ptr[2] = SkEndian_SwapBE32(SkFloatToFixed(toXYZ.getFloat(row, 0)));
- ptr[3] = SkEndian_SwapBE32(SkFloatToFixed(toXYZ.getFloat(row, 1)));
- ptr[4] = SkEndian_SwapBE32(SkFloatToFixed(toXYZ.getFloat(row, 2)));
+ ptr[2] = SkEndian_SwapBE32(SkFloatToFixed(toXYZ.getFloat(0, col)));
+ ptr[3] = SkEndian_SwapBE32(SkFloatToFixed(toXYZ.getFloat(1, col)));
+ ptr[4] = SkEndian_SwapBE32(SkFloatToFixed(toXYZ.getFloat(2, col)));
}
static void write_trc_tag(uint32_t* ptr, float value) {