Index: src/effects/SkColorCubeFilter.cpp |
diff --git a/src/effects/SkColorCubeFilter.cpp b/src/effects/SkColorCubeFilter.cpp |
index 3b7c75fa7f5990c320dc0c45c177bba1cc79758c..f37b695cba5c16b6439543f3a1de8fa9244cbc90 100644 |
--- a/src/effects/SkColorCubeFilter.cpp |
+++ b/src/effects/SkColorCubeFilter.cpp |
@@ -8,6 +8,7 @@ |
#include "SkColorCubeFilter.h" |
#include "SkColorPriv.h" |
#include "SkOnce.h" |
+#include "SkOpts.h" |
#include "SkReadBuffer.h" |
#include "SkUnPreMultiply.h" |
#include "SkWriteBuffer.h" |
@@ -128,36 +129,9 @@ void SkColorCubeFilter::filterSpan(const SkPMColor src[], int count, SkPMColor d |
const SkScalar* colorToScalar; |
fCache.getProcessingLuts(&colorToIndex, &colorToFactors, &colorToScalar); |
- const int dim = fCache.cubeDimension(); |
- SkColor* colorCube = (SkColor*)fCubeData->data(); |
- for (int i = 0; i < count; ++i) { |
- SkColor inputColor = SkUnPreMultiply::PMColorToColor(src[i]); |
- uint8_t r = SkColorGetR(inputColor); |
- uint8_t g = SkColorGetG(inputColor); |
- uint8_t b = SkColorGetB(inputColor); |
- uint8_t a = SkColorGetA(inputColor); |
- SkScalar rOut(0), gOut(0), bOut(0); |
- for (int x = 0; x < 2; ++x) { |
- for (int y = 0; y < 2; ++y) { |
- for (int z = 0; z < 2; ++z) { |
- SkColor lutColor = colorCube[colorToIndex[x][r] + |
- (colorToIndex[y][g] + |
- colorToIndex[z][b] * dim) * dim]; |
- SkScalar factor = colorToFactors[x][r] * |
- colorToFactors[y][g] * |
- colorToFactors[z][b]; |
- rOut += colorToScalar[SkColorGetR(lutColor)] * factor; |
- gOut += colorToScalar[SkColorGetG(lutColor)] * factor; |
- bOut += colorToScalar[SkColorGetB(lutColor)] * factor; |
- } |
- } |
- } |
- const SkScalar aOut = SkIntToScalar(a); |
- dst[i] = SkPackARGB32(a, |
- SkScalarRoundToInt(rOut * aOut), |
- SkScalarRoundToInt(gOut * aOut), |
- SkScalarRoundToInt(bOut * aOut)); |
- } |
Noel Gordon
2015/08/19 01:02:59
This was a reference implementation, and it was a
mtklein
2015/08/19 01:58:22
I don't think so, but I don't mind adding it if yo
|
+ SkOpts::color_cube_filter_span(src, count, dst, colorToIndex, |
+ colorToFactors, fCache.cubeDimension(), |
+ (SkColor*)fCubeData->data()); |
Noel Gordon
2015/08/19 01:02:59
(const SkColor*)fCubeData->data() ?
mtklein
2015/08/19 01:58:22
Done.
|
} |
SkFlattenable* SkColorCubeFilter::CreateProc(SkReadBuffer& buffer) { |