/*
* Copyright 2016 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef SkPM4f_DEFINED
#define SkPM4f_DEFINED
#include "SkColorPriv.h"
/*
* The float values are 0...1 premultiplied
*/
struct SkPM4f {
enum {
A = SK_A32_SHIFT/8,
R = SK_R32_SHIFT/8,
G = SK_G32_SHIFT/8,
B = SK_B32_SHIFT/8,
};
float fVec[4];
float a() const { return fVec[A]; }
SkColor4f unpremul() const;
static SkPM4f FromPMColor(SkPMColor);
// half-float routines
void toF16(uint16_t[4]) const;
uint64_t toF16() const; // 4 float16 values packed into uint64_t
static SkPM4f FromF16(const uint16_t[4]);
#ifdef SK_DEBUG
void assertIsUnit() const;
#else
void assertIsUnit() const {}
#endif
};
typedef SkPM4f (*SkXfermodeProc4f)(const SkPM4f& src, const SkPM4f& dst);
#endif