SkGr.cpp revision 24f3ad1bbb44916cae33f5d3cf2a20af4bbc381f
1ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/* 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2010 Google Inc. 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 7ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com */ 8ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 9ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 10ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 11ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com#include "SkGr.h" 12ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 13ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com/* Fill out buffer with the compressed format Ganesh expects from a colortable 14ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com based bitmap. [palette (colortable) + indices]. 155782d712ffc31557d0cb12d5a220cebb783f6895bsalomon@google.com 165782d712ffc31557d0cb12d5a220cebb783f6895bsalomon@google.com At the moment Ganesh only supports 8bit version. If Ganesh allowed we others 17ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com we could detect that the colortable.count is <= 16, and then repack the 18ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com indices as nibbles to save RAM, but it would take more time (i.e. a lot 19ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com slower than memcpy), so skipping that for now. 205782d712ffc31557d0cb12d5a220cebb783f6895bsalomon@google.com 21ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com Ganesh wants a full 256 palette entry, even though Skia's ctable is only as big 22ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com as the colortable.count says it is. 23ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com */ 24ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.comstatic void build_compressed_data(void* buffer, const SkBitmap& bitmap) { 25ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com SkASSERT(SkBitmap::kIndex8_Config == bitmap.config()); 265782d712ffc31557d0cb12d5a220cebb783f6895bsalomon@google.com 27ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com SkAutoLockPixels apl(bitmap); 28ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com if (!bitmap.readyToDraw()) { 290c00f21fee3f5cfa3aa7e5d46ff94cb8cf340451tomhudson@google.com SkDEBUGFAIL("bitmap not ready to draw!"); 30ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com return; 31ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com } 32ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 33ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com SkColorTable* ctable = bitmap.getColorTable(); 34ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com char* dst = (char*)buffer; 355782d712ffc31557d0cb12d5a220cebb783f6895bsalomon@google.com 36ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com memcpy(dst, ctable->lockColors(), ctable->count() * sizeof(SkPMColor)); 37ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com ctable->unlockColors(false); 385782d712ffc31557d0cb12d5a220cebb783f6895bsalomon@google.com 39ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com // always skip a full 256 number of entries, even if we memcpy'd fewer 40fea37b5e532dfe776269253afb9951e763c3b205bsalomon@google.com dst += kGrColorTableSize; 41ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 42ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com if (bitmap.width() == bitmap.rowBytes()) { 43ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com memcpy(dst, bitmap.getPixels(), bitmap.getSize()); 44ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com } else { 45ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com // need to trim off the extra bytes per row 46ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com size_t width = bitmap.width(); 47ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com size_t rowBytes = bitmap.rowBytes(); 48ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com const char* src = (const char*)bitmap.getPixels(); 49ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com for (int y = 0; y < bitmap.height(); y++) { 50ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com memcpy(dst, src, width); 51ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com src += rowBytes; 52ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com dst += width; 53ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com } 54ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com } 55ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com} 56ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 57ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com//////////////////////////////////////////////////////////////////////////////// 58ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 5924f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.comstatic GrContext::TextureCacheEntry sk_gr_create_bitmap_texture(GrContext* ctx, 6075b3c9633cb9a594dab0ccf51dab1e694c149a18robertphillips@google.com uint64_t key, 611fadb20c50c2302565f73ae12057a6f5d22192c7bsalomon@google.com const GrSamplerState* sampler, 6250398bf7f1953e640e5529616e710cf540799731bsalomon@google.com const SkBitmap& origBitmap) { 63ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com SkAutoLockPixels alp(origBitmap); 6450398bf7f1953e640e5529616e710cf540799731bsalomon@google.com GrContext::TextureCacheEntry entry; 6550398bf7f1953e640e5529616e710cf540799731bsalomon@google.com 66ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com if (!origBitmap.readyToDraw()) { 6750398bf7f1953e640e5529616e710cf540799731bsalomon@google.com return entry; 68ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com } 69ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 70ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com SkBitmap tmpBitmap; 71ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 72ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com const SkBitmap* bitmap = &origBitmap; 735782d712ffc31557d0cb12d5a220cebb783f6895bsalomon@google.com 7475b3c9633cb9a594dab0ccf51dab1e694c149a18robertphillips@google.com GrTextureDesc desc; 7575b3c9633cb9a594dab0ccf51dab1e694c149a18robertphillips@google.com desc.fWidth = bitmap->width(); 7675b3c9633cb9a594dab0ccf51dab1e694c149a18robertphillips@google.com desc.fHeight = bitmap->height(); 7724f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com desc.fConfig = SkBitmapConfig2GrPixelConfig(bitmap->config()); 7875b3c9633cb9a594dab0ccf51dab1e694c149a18robertphillips@google.com desc.fClientCacheID = key; 795782d712ffc31557d0cb12d5a220cebb783f6895bsalomon@google.com 80ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com if (SkBitmap::kIndex8_Config == bitmap->config()) { 81ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com // build_compressed_data doesn't do npot->pot expansion 82ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com // and paletted textures can't be sub-updated 83ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com if (ctx->supportsIndex8PixelConfig(sampler, 84ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com bitmap->width(), bitmap->height())) { 855782d712ffc31557d0cb12d5a220cebb783f6895bsalomon@google.com size_t imagesize = bitmap->width() * bitmap->height() + 86fea37b5e532dfe776269253afb9951e763c3b205bsalomon@google.com kGrColorTableSize; 87ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com SkAutoMalloc storage(imagesize); 885782d712ffc31557d0cb12d5a220cebb783f6895bsalomon@google.com 89ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com build_compressed_data(storage.get(), origBitmap); 90ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 91ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com // our compressed data will be trimmed, so pass width() for its 92ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com // "rowBytes", since they are the same now. 934ee7ae5dcfe2055cfcfc21bf2cec1d790330eb4ajunov@google.com 9475b3c9633cb9a594dab0ccf51dab1e694c149a18robertphillips@google.com if (kUncached_CacheID != key) { 9575b3c9633cb9a594dab0ccf51dab1e694c149a18robertphillips@google.com return ctx->createAndLockTexture(sampler, desc, storage.get(), 964ee7ae5dcfe2055cfcfc21bf2cec1d790330eb4ajunov@google.com bitmap->width()); 974ee7ae5dcfe2055cfcfc21bf2cec1d790330eb4ajunov@google.com } else { 9850398bf7f1953e640e5529616e710cf540799731bsalomon@google.com entry = ctx->lockScratchTexture(desc, 9950398bf7f1953e640e5529616e710cf540799731bsalomon@google.com GrContext::kExact_ScratchTexMatch); 1006f3795105b2b458079e53a721c1735c9518f6bb5bsalomon@google.com entry.texture()->writePixels(0, 0, bitmap->width(), 1016f3795105b2b458079e53a721c1735c9518f6bb5bsalomon@google.com bitmap->height(), desc.fConfig, 1026f3795105b2b458079e53a721c1735c9518f6bb5bsalomon@google.com storage.get(), 0); 1034ee7ae5dcfe2055cfcfc21bf2cec1d790330eb4ajunov@google.com return entry; 1044ee7ae5dcfe2055cfcfc21bf2cec1d790330eb4ajunov@google.com } 105ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 106ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com } else { 107ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com origBitmap.copyTo(&tmpBitmap, SkBitmap::kARGB_8888_Config); 108ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com // now bitmap points to our temp, which has been promoted to 32bits 109ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com bitmap = &tmpBitmap; 110ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com } 1115782d712ffc31557d0cb12d5a220cebb783f6895bsalomon@google.com } 112ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 11324f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com desc.fConfig = SkBitmapConfig2GrPixelConfig(bitmap->config()); 11475b3c9633cb9a594dab0ccf51dab1e694c149a18robertphillips@google.com if (kUncached_CacheID != key) { 11575b3c9633cb9a594dab0ccf51dab1e694c149a18robertphillips@google.com return ctx->createAndLockTexture(sampler, desc, 11650398bf7f1953e640e5529616e710cf540799731bsalomon@google.com bitmap->getPixels(), 11750398bf7f1953e640e5529616e710cf540799731bsalomon@google.com bitmap->rowBytes()); 1184ee7ae5dcfe2055cfcfc21bf2cec1d790330eb4ajunov@google.com } else { 11950398bf7f1953e640e5529616e710cf540799731bsalomon@google.com entry = ctx->lockScratchTexture(desc, 12050398bf7f1953e640e5529616e710cf540799731bsalomon@google.com GrContext::kExact_ScratchTexMatch); 1216f3795105b2b458079e53a721c1735c9518f6bb5bsalomon@google.com entry.texture()->writePixels(0, 0, 1226f3795105b2b458079e53a721c1735c9518f6bb5bsalomon@google.com bitmap->width(), bitmap->height(), 1236f3795105b2b458079e53a721c1735c9518f6bb5bsalomon@google.com desc.fConfig, 1246f3795105b2b458079e53a721c1735c9518f6bb5bsalomon@google.com bitmap->getPixels(), 1256f3795105b2b458079e53a721c1735c9518f6bb5bsalomon@google.com bitmap->rowBytes()); 1264ee7ae5dcfe2055cfcfc21bf2cec1d790330eb4ajunov@google.com return entry; 1274ee7ae5dcfe2055cfcfc21bf2cec1d790330eb4ajunov@google.com } 128ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com} 129ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 130ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com/////////////////////////////////////////////////////////////////////////////// 131ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 13224f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.comGrContext::TextureCacheEntry GrLockCachedBitmapTexture(GrContext* ctx, 13324f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com const SkBitmap& bitmap, const GrSamplerState* sampler) { 13424f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com GrContext::TextureCacheEntry entry; 13524f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com 13624f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com if (!bitmap.isVolatile()) { 13724f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com uint64_t key = bitmap.getGenerationID(); 13824f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com key |= ((uint64_t) bitmap.pixelRefOffset()) << 32; 13924f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com 14024f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com GrTextureDesc desc; 14124f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com desc.fWidth = bitmap.width(); 14224f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com desc.fHeight = bitmap.height(); 14324f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com desc.fConfig = SkBitmapConfig2GrPixelConfig(bitmap.config()); 14424f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com desc.fClientCacheID = key; 14524f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com 14624f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com entry = ctx->findAndLockTexture(desc, sampler); 14724f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com if (NULL == entry.texture()) { 14824f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com entry = sk_gr_create_bitmap_texture(ctx, key, sampler, 14924f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com bitmap); 15024f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com } 15124f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com } else { 15224f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com entry = sk_gr_create_bitmap_texture(ctx, kUncached_CacheID, 15324f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com sampler, bitmap); 15424f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com } 15524f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com if (NULL == entry.texture()) { 15624f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com GrPrintf("---- failed to create texture for cache [%d %d]\n", 15724f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com bitmap.width(), bitmap.height()); 15824f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com } 15924f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com return entry; 16024f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com} 16124f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com 16224f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.comvoid GrUnlockCachedBitmapTexture(GrContext* ctx, GrContext::TextureCacheEntry cache) { 16324f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com ctx->unlockTexture(cache); 16424f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com} 16524f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com 16624f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com/////////////////////////////////////////////////////////////////////////////// 16724f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com 168d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.comvoid SkGrClipIterator::reset(const SkClipStack& clipStack) { 169d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com fClipStack = &clipStack; 170d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com fIter.reset(clipStack); 171d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com // Gr has no notion of replace, skip to the 172d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com // last replace in the clip stack. 173d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com int lastReplace = 0; 174d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com int curr = 0; 175d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com while (NULL != (fCurr = fIter.next())) { 176d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com if (SkRegion::kReplace_Op == fCurr->fOp) { 177d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com lastReplace = curr; 178d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com } 179d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com ++curr; 180d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com } 181d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com fIter.reset(clipStack); 182d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com for (int i = 0; i < lastReplace+1; ++i) { 183d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com fCurr = fIter.next(); 184d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com } 185d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com} 186d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com 187d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.comGrClipType SkGrClipIterator::getType() const { 188d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com GrAssert(!this->isDone()); 1897b11807968d74bf08cabbb6fcb03daabf234711fscroggo if (NULL == fCurr->fPath) { 190d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com return kRect_ClipType; 191ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com } else { 192d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com return kPath_ClipType; 193d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com } 194d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com} 195d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com 1960f191f30af7c067883c97b034baf70bfd92f5ea0robertphillips@google.comSkRegion::Op SkGrClipIterator::getOp() const { 197d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com // we skipped to the last "replace" op 198d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com // when this iter was reset. 199d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com // GrClip doesn't allow replace, so treat it as 200d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com // intersect. 2010f191f30af7c067883c97b034baf70bfd92f5ea0robertphillips@google.com if (SkRegion::kReplace_Op == fCurr->fOp) { 2020f191f30af7c067883c97b034baf70bfd92f5ea0robertphillips@google.com return SkRegion::kIntersect_Op; 2030f191f30af7c067883c97b034baf70bfd92f5ea0robertphillips@google.com } 2040f191f30af7c067883c97b034baf70bfd92f5ea0robertphillips@google.com 2050f191f30af7c067883c97b034baf70bfd92f5ea0robertphillips@google.com return fCurr->fOp; 2060f191f30af7c067883c97b034baf70bfd92f5ea0robertphillips@google.com 207d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com} 208d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com 209fa1d29112d44d0728cd10e2ff1f8982240303272robertphillips@google.combool SkGrClipIterator::getDoAA() const { 210fa1d29112d44d0728cd10e2ff1f8982240303272robertphillips@google.com return fCurr->fDoAA; 211fa1d29112d44d0728cd10e2ff1f8982240303272robertphillips@google.com} 212fa1d29112d44d0728cd10e2ff1f8982240303272robertphillips@google.com 213d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.comGrPathFill SkGrClipIterator::getPathFill() const { 214d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com switch (fCurr->fPath->getFillType()) { 215d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com case SkPath::kWinding_FillType: 21647059542e7aa153926377456a6c611e55c8e428cbsalomon@google.com return kWinding_GrPathFill; 217d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com case SkPath::kEvenOdd_FillType: 21847059542e7aa153926377456a6c611e55c8e428cbsalomon@google.com return kEvenOdd_GrPathFill; 219d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com case SkPath::kInverseWinding_FillType: 22047059542e7aa153926377456a6c611e55c8e428cbsalomon@google.com return kInverseWinding_GrPathFill; 221d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com case SkPath::kInverseEvenOdd_FillType: 22247059542e7aa153926377456a6c611e55c8e428cbsalomon@google.com return kInverseEvenOdd_GrPathFill; 223d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com default: 224d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com GrCrash("Unsupported path fill in clip."); 22547059542e7aa153926377456a6c611e55c8e428cbsalomon@google.com return kWinding_GrPathFill; // suppress warning 226ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com } 227ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com} 228ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 229ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com/////////////////////////////////////////////////////////////////////////////// 230ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 23124f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.comGrPixelConfig SkBitmapConfig2GrPixelConfig(SkBitmap::Config config) { 232ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com switch (config) { 233ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com case SkBitmap::kA8_Config: 234669fdc4ed8ed461a141cb97d0afdd9ef72a82be1bsalomon@google.com return kAlpha_8_GrPixelConfig; 235ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com case SkBitmap::kIndex8_Config: 236669fdc4ed8ed461a141cb97d0afdd9ef72a82be1bsalomon@google.com return kIndex_8_GrPixelConfig; 237ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com case SkBitmap::kRGB_565_Config: 238669fdc4ed8ed461a141cb97d0afdd9ef72a82be1bsalomon@google.com return kRGB_565_GrPixelConfig; 239ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com case SkBitmap::kARGB_4444_Config: 240669fdc4ed8ed461a141cb97d0afdd9ef72a82be1bsalomon@google.com return kRGBA_4444_GrPixelConfig; 241ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com case SkBitmap::kARGB_8888_Config: 242c43649962221c348d656d425a3fa9b29c78231d4bsalomon@google.com return kSkia8888_PM_GrPixelConfig; 243ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com default: 244a1e5795279bd085496fa04c59e588f440bf30457robertphillips@google.com // kNo_Config, kA1_Config missing, and kRLE_Index8_Config 245669fdc4ed8ed461a141cb97d0afdd9ef72a82be1bsalomon@google.com return kUnknown_GrPixelConfig; 246ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com } 247ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com} 248ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 249