diff options
author | 2012-01-03 20:51:57 +0000 | |
---|---|---|
committer | 2012-01-03 20:51:57 +0000 | |
commit | 50bdad85db2fe6be4d0bf0c5b6473f712b1bdd32 (patch) | |
tree | dd25219722719bd57f8e13336d960e5cd18afeea /src/effects/SkColorMatrixFilter.cpp | |
parent | 31bab3934c773c2bd4c1e5e9ba8eb87c1c623b09 (diff) |
Implement the color matrix filter in Ganesh. Also, fix and enable the color
matrix test slide. This was basically implemented in the same places where
the blending-based color filter was being done. The shader simply does a mat4
matrix multiply and a vec4 add.
Review URL: http://codereview.appspot.com/5489107/
git-svn-id: http://skia.googlecode.com/svn/trunk@2948 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/effects/SkColorMatrixFilter.cpp')
-rw-r--r-- | src/effects/SkColorMatrixFilter.cpp | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/src/effects/SkColorMatrixFilter.cpp b/src/effects/SkColorMatrixFilter.cpp index 5ed86981a2..95f4b0bac4 100644 --- a/src/effects/SkColorMatrixFilter.cpp +++ b/src/effects/SkColorMatrixFilter.cpp @@ -335,16 +335,17 @@ SkColorMatrixFilter::SkColorMatrixFilter(SkFlattenableReadBuffer& buffer) bool SkColorMatrixFilter::asColorMatrix(SkScalar matrix[20]) { int32_t* SK_RESTRICT array = fState.fArray; + int unshift = 16 - fState.fShift; for (int i = 0; i < 20; i++) { - matrix[i] = SkFixedToScalar(array[i]); + matrix[i] = SkFixedToScalar(array[i] << unshift); } if (NULL != fProc) { // Undo the offset applied to the constant column in setup(). - SkScalar offset = SkFixedToScalar(1 << (fState.fShift - 1)); - matrix[4] -= offset; - matrix[9] -= offset; - matrix[14] -= offset; - matrix[19] -= offset; + SkFixed offset = 1 << (fState.fShift - 1); + matrix[4] = SkFixedToScalar((array[4] - offset) << unshift); + matrix[9] = SkFixedToScalar((array[9] - offset) << unshift); + matrix[14] = SkFixedToScalar((array[14] - offset) << unshift); + matrix[19] = SkFixedToScalar((array[19] - offset) << unshift); } return true; } |