Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(161)

Unified Diff: src/core/SkPM4f.h

Issue 1774523002: make pm4f be RGBA always, not pmcolor order (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: update colormatrixfilter to know about RGBA Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/core/SkPM4f.h
diff --git a/src/core/SkPM4f.h b/src/core/SkPM4f.h
index fb22783dcc44203a8c3931982f645e3de7dde956..cc169e46f762b39d8f5df761467e46c574e714e4 100644
--- a/src/core/SkPM4f.h
+++ b/src/core/SkPM4f.h
@@ -9,29 +9,59 @@
#define SkPM4f_DEFINED
#include "SkColorPriv.h"
+#include "SkNx.h"
+
+static inline Sk4f swizzle_rb(const Sk4f& x) {
+ return Sk4f(x[2], x[1], x[0], x[3]);
mtklein 2016/03/07 18:01:14 You're killing me... return SkNx_shuffle<2,1,
+}
+
+static inline Sk4f swizzle_rgba_to_pmorder(const Sk4f& x) {
+#ifdef SK_PMCOLOR_IS_BGRA
+ return swizzle_rb(x);
+#else
+ return x;
+#endif
+}
+
+static inline Sk4f swizzle_pmorder_to_rgba(const Sk4f& x) {
+#ifdef SK_PMCOLOR_IS_BGRA
+ return swizzle_rb(x);
+#else
+ return x;
+#endif
+}
/*
- * The float values are 0...1 premultiplied
+ * The float values are 0...1 premultiplied in RGBA order (regardless of SkPMColor order)
*/
struct SkPM4f {
enum {
- A = SK_A32_SHIFT/8,
- R = SK_R32_SHIFT/8,
- G = SK_G32_SHIFT/8,
- B = SK_B32_SHIFT/8,
+ R, G, B, A,
};
float fVec[4];
+ float r() const { return fVec[R]; }
+ float g() const { return fVec[G]; }
+ float b() const { return fVec[B]; }
float a() const { return fVec[A]; }
- SkColor4f unpremul() const;
-
+ static SkPM4f From4f(const Sk4f& x) {
+ SkPM4f pm;
+ x.store(pm.fVec);
+ return pm;
+ }
+ static SkPM4f FromF16(const uint16_t[4]);
static SkPM4f FromPMColor(SkPMColor);
- // half-float routines
+ Sk4f to4f() const { return Sk4f::Load(fVec); }
mtklein 2016/03/07 18:01:14 Looks great to me now. Thanks.
+ Sk4f to4f_rgba() const { return this->to4f(); }
+ Sk4f to4f_bgra() const { return swizzle_rb(this->to4f()); }
+ Sk4f to4f_pmorder() const { return swizzle_rgba_to_pmorder(this->to4f()); }
+
void toF16(uint16_t[4]) const;
uint64_t toF16() const; // 4 float16 values packed into uint64_t
- static SkPM4f FromF16(const uint16_t[4]);
+
+ SkColor4f unpremul() const;
#ifdef SK_DEBUG
void assertIsUnit() const;
@@ -42,5 +72,4 @@ struct SkPM4f {
typedef SkPM4f (*SkXfermodeProc4f)(const SkPM4f& src, const SkPM4f& dst);
-
#endif

Powered by Google App Engine
This is Rietveld 408576698