| Index: include/core/SkPixmap.h
|
| diff --git a/include/core/SkPixmap.h b/include/core/SkPixmap.h
|
| index 523c40f294db0b1e5c69b234748dcd4f3340bdab..894b238196da95ca80e80ce992a0c6bffb24bb5e 100644
|
| --- a/include/core/SkPixmap.h
|
| +++ b/include/core/SkPixmap.h
|
| @@ -75,51 +75,75 @@ public:
|
| uint64_t getSafeSize64() const { return fInfo.getSafeSize64(fRowBytes); }
|
| size_t getSafeSize() const { return fInfo.getSafeSize(fRowBytes); }
|
|
|
| + const void* addr(int x, int y) const {
|
| + return (const char*)fPixels + fInfo.computeOffset(x, y, fRowBytes);
|
| + }
|
| + const uint8_t* addr8() const {
|
| + SkASSERT(1 == SkColorTypeBytesPerPixel(fInfo.colorType()));
|
| + return reinterpret_cast<const uint8_t*>(fPixels);
|
| + }
|
| + const uint16_t* addr16() const {
|
| + SkASSERT(2 == SkColorTypeBytesPerPixel(fInfo.colorType()));
|
| + return reinterpret_cast<const uint16_t*>(fPixels);
|
| + }
|
| const uint32_t* addr32() const {
|
| SkASSERT(4 == SkColorTypeBytesPerPixel(fInfo.colorType()));
|
| return reinterpret_cast<const uint32_t*>(fPixels);
|
| }
|
| -
|
| - const uint16_t* addr16() const {
|
| - SkASSERT(2 == SkColorTypeBytesPerPixel(fInfo.colorType()));
|
| + const uint64_t* addr64() const {
|
| + SkASSERT(8 == SkColorTypeBytesPerPixel(fInfo.colorType()));
|
| + return reinterpret_cast<const uint64_t*>(fPixels);
|
| + }
|
| + const uint16_t* addrF16() const {
|
| + SkASSERT(8 == SkColorTypeBytesPerPixel(fInfo.colorType()));
|
| + SkASSERT(kRGBA_F16_SkColorType == fInfo.colorType());
|
| return reinterpret_cast<const uint16_t*>(fPixels);
|
| }
|
|
|
| - const uint8_t* addr8() const {
|
| - SkASSERT(1 == SkColorTypeBytesPerPixel(fInfo.colorType()));
|
| - return reinterpret_cast<const uint8_t*>(fPixels);
|
| - }
|
| + // Offset by the specified x,y coordinates
|
|
|
| - const uint32_t* addr32(int x, int y) const {
|
| + const uint8_t* addr8(int x, int y) const {
|
| SkASSERT((unsigned)x < (unsigned)fInfo.width());
|
| SkASSERT((unsigned)y < (unsigned)fInfo.height());
|
| - return (const uint32_t*)((const char*)this->addr32() + y * fRowBytes + (x << 2));
|
| + return (const uint8_t*)((const char*)this->addr8() + y * fRowBytes + (x << 0));
|
| }
|
| const uint16_t* addr16(int x, int y) const {
|
| SkASSERT((unsigned)x < (unsigned)fInfo.width());
|
| SkASSERT((unsigned)y < (unsigned)fInfo.height());
|
| return (const uint16_t*)((const char*)this->addr16() + y * fRowBytes + (x << 1));
|
| }
|
| - const uint8_t* addr8(int x, int y) const {
|
| + const uint32_t* addr32(int x, int y) const {
|
| SkASSERT((unsigned)x < (unsigned)fInfo.width());
|
| SkASSERT((unsigned)y < (unsigned)fInfo.height());
|
| - return (const uint8_t*)((const char*)this->addr8() + y * fRowBytes + (x << 0));
|
| + return (const uint32_t*)((const char*)this->addr32() + y * fRowBytes + (x << 2));
|
| }
|
| - const void* addr(int x, int y) const {
|
| - return (const char*)fPixels + fInfo.computeOffset(x, y, fRowBytes);
|
| + const uint64_t* addr64(int x, int y) const {
|
| + SkASSERT((unsigned)x < (unsigned)fInfo.width());
|
| + SkASSERT((unsigned)y < (unsigned)fInfo.height());
|
| + return (const uint64_t*)((const char*)this->addr64() + y * fRowBytes + (x << 3));
|
| + }
|
| + const uint16_t* addrF16(int x, int y) const {
|
| + SkASSERT(kRGBA_F16_SkColorType == fInfo.colorType());
|
| + return reinterpret_cast<const uint16_t*>(this->addr64(x, y));
|
| }
|
|
|
| // Writable versions
|
|
|
| void* writable_addr() const { return const_cast<void*>(fPixels); }
|
| - uint32_t* writable_addr32(int x, int y) const {
|
| - return const_cast<uint32_t*>(this->addr32(x, y));
|
| + uint8_t* writable_addr8(int x, int y) const {
|
| + return const_cast<uint8_t*>(this->addr8(x, y));
|
| }
|
| uint16_t* writable_addr16(int x, int y) const {
|
| return const_cast<uint16_t*>(this->addr16(x, y));
|
| }
|
| - uint8_t* writable_addr8(int x, int y) const {
|
| - return const_cast<uint8_t*>(this->addr8(x, y));
|
| + uint32_t* writable_addr32(int x, int y) const {
|
| + return const_cast<uint32_t*>(this->addr32(x, y));
|
| + }
|
| + uint64_t* writable_addr64(int x, int y) const {
|
| + return const_cast<uint64_t*>(this->addr64(x, y));
|
| + }
|
| + uint16_t* writable_addrF16(int x, int y) const {
|
| + return reinterpret_cast<uint16_t*>(writable_addr64(x, y));
|
| }
|
|
|
| // copy methods
|
| @@ -152,6 +176,7 @@ public:
|
| bool erase(SkColor, const SkIRect& subset) const;
|
|
|
| bool erase(SkColor color) const { return this->erase(color, this->bounds()); }
|
| + bool erase(const SkColor4f&, const SkIRect* subset = nullptr) const;
|
|
|
| private:
|
| const void* fPixels;
|
|
|