aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar brianosman <brianosman@google.com>2016-07-27 05:25:26 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-07-27 05:25:26 -0700
commit9f97882322929ee39405acb44cbf155854b38091 (patch)
treeed460bed4407d557dedc54fd57ecf2f9c6c2dc7e
parent39683791cc8142ff5e614b567e309cf920b32358 (diff)
Simplify color space xform storage and usage (float[] vs. SkMatrix44)
Public API is really just internal. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2185533005 TBR=bsalomon@google.com Review-Url: https://codereview.chromium.org/2185533005
-rw-r--r--include/gpu/GrColorSpaceXform.h9
-rw-r--r--src/gpu/GrColorSpaceXform.cpp5
-rw-r--r--src/gpu/effects/GrBicubicEffect.cpp4
3 files changed, 11 insertions, 7 deletions
diff --git a/include/gpu/GrColorSpaceXform.h b/include/gpu/GrColorSpaceXform.h
index ea90739fd2..177230c87c 100644
--- a/include/gpu/GrColorSpaceXform.h
+++ b/include/gpu/GrColorSpaceXform.h
@@ -8,24 +8,25 @@
#ifndef GrColorSpaceXform_DEFINED
#define GrColorSpaceXform_DEFINED
-#include "SkMatrix44.h"
#include "SkRefCnt.h"
class SkColorSpace;
+class SkMatrix44;
/**
* Represents a color gamut transformation (as a 4x4 color matrix)
*/
class GrColorSpaceXform : public SkRefCnt {
public:
- GrColorSpaceXform(const SkMatrix44& srcToDst) : fSrcToDst(srcToDst) {}
+ GrColorSpaceXform(const SkMatrix44& srcToDst);
static sk_sp<GrColorSpaceXform> Make(SkColorSpace* src, SkColorSpace* dst);
- const SkMatrix44& srcToDst() { return fSrcToDst; }
+ const float* srcToDst() { return fSrcToDst; }
private:
- SkMatrix44 fSrcToDst;
+ // We store the column-major form of the srcToDst matrix, for easy uploading to uniforms
+ float fSrcToDst[16];
};
#endif
diff --git a/src/gpu/GrColorSpaceXform.cpp b/src/gpu/GrColorSpaceXform.cpp
index f60dbcd1c0..a1e8938048 100644
--- a/src/gpu/GrColorSpaceXform.cpp
+++ b/src/gpu/GrColorSpaceXform.cpp
@@ -7,6 +7,7 @@
#include "GrColorSpaceXform.h"
#include "SkColorSpace.h"
+#include "SkMatrix44.h"
static inline bool sk_float_almost_equals(float x, float y, float tol) {
return sk_float_abs(x - y) <= tol;
@@ -33,6 +34,10 @@ static inline bool matrix_is_almost_identity(const SkMatrix44& m,
sk_float_almost_equals(m.getFloat(3, 3), 1.0f, tol);
}
+GrColorSpaceXform::GrColorSpaceXform(const SkMatrix44& srcToDst) {
+ srcToDst.asColMajorf(fSrcToDst);
+}
+
sk_sp<GrColorSpaceXform> GrColorSpaceXform::Make(SkColorSpace* src, SkColorSpace* dst) {
if (!src || !dst) {
// Invalid
diff --git a/src/gpu/effects/GrBicubicEffect.cpp b/src/gpu/effects/GrBicubicEffect.cpp
index db42f35669..8439909f56 100644
--- a/src/gpu/effects/GrBicubicEffect.cpp
+++ b/src/gpu/effects/GrBicubicEffect.cpp
@@ -132,9 +132,7 @@ void GrGLBicubicEffect::onSetData(const GrGLSLProgramDataManager& pdman,
pdman.setMatrix4f(fCoefficientsUni, bicubicEffect.coefficients());
fDomain.setData(pdman, bicubicEffect.domain(), texture.origin());
if (SkToBool(bicubicEffect.colorSpaceXform())) {
- float xformMatrix[16];
- bicubicEffect.colorSpaceXform()->srcToDst().asColMajorf(xformMatrix);
- pdman.setMatrix4f(fColorSpaceXformUni, xformMatrix);
+ pdman.setMatrix4f(fColorSpaceXformUni, bicubicEffect.colorSpaceXform()->srcToDst());
}
}