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

Unified Diff: src/opts/SkPMFloat_none.h

Issue 1308903003: Templatize SkPMFloat to support both 1 and 255 biases. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: pump the loops for Android Created 5 years, 4 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/opts/SkPMFloat_none.h
diff --git a/src/opts/SkPMFloat_none.h b/src/opts/SkPMFloat_none.h
index 17c76d90f4a505983d1ec21ff3b342e80c3ffcb8..d87258914f55dd75492d82ac0cc634ebb3b29b6c 100644
--- a/src/opts/SkPMFloat_none.h
+++ b/src/opts/SkPMFloat_none.h
@@ -7,16 +7,19 @@
namespace { // See SkPMFloat.h
-inline SkPMFloat::SkPMFloat(SkPMColor c) {
- float inv255 = 1.0f/255;
- *this = SkPMFloat::FromARGB(SkGetPackedA32(c) * inv255,
- SkGetPackedR32(c) * inv255,
- SkGetPackedG32(c) * inv255,
- SkGetPackedB32(c) * inv255);
+template <int kBias>
+inline SkPMFloat<kBias>::SkPMFloat(SkPMColor c) {
+ float scale = (kBias == 1) ? (1.0f/255) : 1;
+ *this = SkPMFloat::FromARGB(SkGetPackedA32(c) * scale,
+ SkGetPackedR32(c) * scale,
+ SkGetPackedG32(c) * scale,
+ SkGetPackedB32(c) * scale);
SkASSERT(this->isValid());
}
-inline SkPMColor SkPMFloat::round() const {
+template <int kBias>
+inline SkPMColor SkPMFloat<kBias>::round() const {
+ float scale = (kBias == 1) ? 255 : 1;
float a = this->a(),
r = this->r(),
g = this->g(),
@@ -25,22 +28,24 @@ inline SkPMColor SkPMFloat::round() const {
r = r < 0 ? 0 : (r > 1 ? 1 : r);
g = g < 0 ? 0 : (g > 1 ? 1 : g);
b = b < 0 ? 0 : (b > 1 ? 1 : b);
- SkPMColor c = SkPackARGB32(255*a+0.5f, 255*r+0.5f, 255*g+0.5f, 255*b+0.5f);
+ SkPMColor c = SkPackARGB32(scale*a+0.5f, scale*r+0.5f, scale*g+0.5f, scale*b+0.5f);
SkPMColorAssert(c);
return c;
}
-inline Sk4f SkPMFloat::alphas() const {
+template <int kBias>
+inline Sk4f SkPMFloat<kBias>::alphas() const {
return Sk4f(this->a());
}
-inline SkPMFloat SkPMFloat::FromOpaqueColor(SkColor c) {
+template <int kBias>
+inline SkPMFloat<kBias> SkPMFloat<kBias>::FromOpaqueColor(SkColor c) {
SkASSERT(SkColorGetA(c) == 0xFF);
- float inv255 = 1.0f / 255;
- SkPMFloat pmf = SkPMFloat::FromARGB(1.0f,
- SkColorGetR(c) * inv255,
- SkColorGetG(c) * inv255,
- SkColorGetB(c) * inv255);
+ float scale = (kBias == 1) ? (1.0f/255) : 1;
+ SkPMFloat pmf = SkPMFloat::FromARGB(kBias,
+ SkColorGetR(c) * scale,
+ SkColorGetG(c) * scale,
+ SkColorGetB(c) * scale);
SkASSERT(pmf.isValid());
return pmf;
}

Powered by Google App Engine
This is Rietveld 408576698