diff options
author | brianosman <brianosman@google.com> | 2016-09-09 10:36:17 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-09-09 10:36:17 -0700 |
commit | de68d6c4616d86621373d88100002ddfdb9c08e3 (patch) | |
tree | c3020d0d2ab8a4157beeab02fc32efc1518bb1e6 /src/core/SkColorSpace_ICC.cpp | |
parent | 81a478ca6c36aac3e53ce0373a281ac8940f4780 (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-x | src/core/SkColorSpace_ICC.cpp | 14 |
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) { |