SkCoreBlitters.h revision 395eabeb0e72334c45324874c6e009b54634df21
1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/* 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2006 The Android Open Source Project 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */ 7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 88a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef SkCoreBlitters_DEFINED 98a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define SkCoreBlitters_DEFINED 108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 11a5572e5bb2a2bbeeb59de0741c2527869d365a0ccommit-bot@chromium.org#include "SkBitmapProcShader.h" 128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkBlitter.h" 138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkBlitRow.h" 14a5572e5bb2a2bbeeb59de0741c2527869d365a0ccommit-bot@chromium.org#include "SkShader.h" 15a5572e5bb2a2bbeeb59de0741c2527869d365a0ccommit-bot@chromium.org#include "SkSmallAllocator.h" 168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkRasterBlitter : public SkBlitter { 188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 1941e010cb901c0da9066c4df562030808c9ccd7f8reed SkRasterBlitter(const SkPixmap& device) : fDevice(device) {} 208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprotected: 2241e010cb901c0da9066c4df562030808c9ccd7f8reed const SkPixmap fDevice; 238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com typedef SkBlitter INHERITED; 268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkShaderBlitter : public SkRasterBlitter { 298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 3087fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org /** 3187fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org * The storage for shaderContext is owned by the caller, but the object itself is not. 3287fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org * The blitter only ensures that the storage always holds a live object, but it may 3387fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org * exchange that object. 3487fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org */ 3541e010cb901c0da9066c4df562030808c9ccd7f8reed SkShaderBlitter(const SkPixmap& device, const SkPaint& paint, 3687fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org SkShader::Context* shaderContext); 378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual ~SkShaderBlitter(); 388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3987fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org /** 4087fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org * Create a new shader context and uses it instead of the old one if successful. 4187fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org * Will create the context at the same location as the old one (this is safe 4287fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org * because the shader itself is unchanged). 4387fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org */ 4436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein bool resetShaderContext(const SkShader::ContextRec&) override; 4587fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org 4636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein SkShader::Context* getShaderContext() const override { return fShaderContext; } 4787fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org 488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprotected: 4987fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org uint32_t fShaderFlags; 5087fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org const SkShader* fShader; 5187fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org SkShader::Context* fShaderContext; 528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // illegal 558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkShaderBlitter& operator=(const SkShaderBlitter&); 568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com typedef SkRasterBlitter INHERITED; 588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/////////////////////////////////////////////////////////////////////////////// 618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 62126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.comclass SkA8_Coverage_Blitter : public SkRasterBlitter { 63126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.compublic: 6441e010cb901c0da9066c4df562030808c9ccd7f8reed SkA8_Coverage_Blitter(const SkPixmap& device, const SkPaint& paint); 6536352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void blitH(int x, int y, int width) override; 6636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void blitAntiH(int x, int y, const SkAlpha antialias[], const int16_t runs[]) override; 6736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void blitV(int x, int y, int height, SkAlpha alpha) override; 6836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void blitRect(int x, int y, int width, int height) override; 6936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void blitMask(const SkMask&, const SkIRect&) override; 7041e010cb901c0da9066c4df562030808c9ccd7f8reed const SkPixmap* justAnOpaqueColor(uint32_t*) override; 71126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com}; 72126f7f5244502c0cbf1e5fec1d2ad7a0f2eb6c34reed@google.com 738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkA8_Blitter : public SkRasterBlitter { 748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 7541e010cb901c0da9066c4df562030808c9ccd7f8reed SkA8_Blitter(const SkPixmap& device, const SkPaint& paint); 763dfd133882fe9d9dc9db0897deac1ac1f4c99e01reed void blitH(int x, int y, int width) override; 773dfd133882fe9d9dc9db0897deac1ac1f4c99e01reed void blitAntiH(int x, int y, const SkAlpha antialias[], const int16_t runs[]) override; 783dfd133882fe9d9dc9db0897deac1ac1f4c99e01reed void blitV(int x, int y, int height, SkAlpha alpha) override; 793dfd133882fe9d9dc9db0897deac1ac1f4c99e01reed void blitRect(int x, int y, int width, int height) override; 803dfd133882fe9d9dc9db0897deac1ac1f4c99e01reed void blitMask(const SkMask&, const SkIRect&) override; 813dfd133882fe9d9dc9db0897deac1ac1f4c99e01reed const SkPixmap* justAnOpaqueColor(uint32_t*) override; 828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com unsigned fSrcA; 858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // illegal 878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkA8_Blitter& operator=(const SkA8_Blitter&); 888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com typedef SkRasterBlitter INHERITED; 908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkA8_Shader_Blitter : public SkShaderBlitter { 938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 9441e010cb901c0da9066c4df562030808c9ccd7f8reed SkA8_Shader_Blitter(const SkPixmap& device, const SkPaint& paint, 9587fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org SkShader::Context* shaderContext); 968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual ~SkA8_Shader_Blitter(); 973dfd133882fe9d9dc9db0897deac1ac1f4c99e01reed void blitH(int x, int y, int width) override; 983dfd133882fe9d9dc9db0897deac1ac1f4c99e01reed void blitAntiH(int x, int y, const SkAlpha antialias[], const int16_t runs[]) override; 993dfd133882fe9d9dc9db0897deac1ac1f4c99e01reed void blitMask(const SkMask&, const SkIRect&) override; 1008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 1028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkXfermode* fXfermode; 1038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkPMColor* fBuffer; 1048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint8_t* fAAExpand; 1058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // illegal 1078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkA8_Shader_Blitter& operator=(const SkA8_Shader_Blitter&); 1088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1098a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com typedef SkShaderBlitter INHERITED; 1108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 1118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com//////////////////////////////////////////////////////////////// 1138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkARGB32_Blitter : public SkRasterBlitter { 1158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 11641e010cb901c0da9066c4df562030808c9ccd7f8reed SkARGB32_Blitter(const SkPixmap& device, const SkPaint& paint); 1173dfd133882fe9d9dc9db0897deac1ac1f4c99e01reed void blitH(int x, int y, int width) override; 1183dfd133882fe9d9dc9db0897deac1ac1f4c99e01reed void blitAntiH(int x, int y, const SkAlpha antialias[], const int16_t runs[]) override; 1193dfd133882fe9d9dc9db0897deac1ac1f4c99e01reed void blitV(int x, int y, int height, SkAlpha alpha) override; 1203dfd133882fe9d9dc9db0897deac1ac1f4c99e01reed void blitRect(int x, int y, int width, int height) override; 1213dfd133882fe9d9dc9db0897deac1ac1f4c99e01reed void blitMask(const SkMask&, const SkIRect&) override; 1223dfd133882fe9d9dc9db0897deac1ac1f4c99e01reed const SkPixmap* justAnOpaqueColor(uint32_t*) override; 1236983f66d8b3a489133b751e2cef03e72a03bfeaereed void blitAntiH2(int x, int y, U8CPU a0, U8CPU a1) override; 1246983f66d8b3a489133b751e2cef03e72a03bfeaereed void blitAntiV2(int x, int y, U8CPU a0, U8CPU a1) override; 1258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprotected: 127ee467ee79d449ebe6ae7f7946e613cc70a479c69reed@google.com SkColor fColor; 128ee467ee79d449ebe6ae7f7946e613cc70a479c69reed@google.com SkPMColor fPMColor; 1298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 1318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com unsigned fSrcA, fSrcR, fSrcG, fSrcB; 1328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // illegal 1348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkARGB32_Blitter& operator=(const SkARGB32_Blitter&); 1358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com typedef SkRasterBlitter INHERITED; 1378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 1388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 139dafaf7ac4d89f183dc515907665cdac3e3098466reed@android.comclass SkARGB32_Opaque_Blitter : public SkARGB32_Blitter { 1408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 14141e010cb901c0da9066c4df562030808c9ccd7f8reed SkARGB32_Opaque_Blitter(const SkPixmap& device, const SkPaint& paint) 142dafaf7ac4d89f183dc515907665cdac3e3098466reed@android.com : INHERITED(device, paint) { SkASSERT(paint.getAlpha() == 0xFF); } 1433dfd133882fe9d9dc9db0897deac1ac1f4c99e01reed void blitMask(const SkMask&, const SkIRect&) override; 1446983f66d8b3a489133b751e2cef03e72a03bfeaereed void blitAntiH2(int x, int y, U8CPU a0, U8CPU a1) override; 1456983f66d8b3a489133b751e2cef03e72a03bfeaereed void blitAntiV2(int x, int y, U8CPU a0, U8CPU a1) override; 146dafaf7ac4d89f183dc515907665cdac3e3098466reed@android.com 1478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 1488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com typedef SkARGB32_Blitter INHERITED; 1498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 1508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 151dafaf7ac4d89f183dc515907665cdac3e3098466reed@android.comclass SkARGB32_Black_Blitter : public SkARGB32_Opaque_Blitter { 1528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 15341e010cb901c0da9066c4df562030808c9ccd7f8reed SkARGB32_Black_Blitter(const SkPixmap& device, const SkPaint& paint) 154dafaf7ac4d89f183dc515907665cdac3e3098466reed@android.com : INHERITED(device, paint) {} 1553dfd133882fe9d9dc9db0897deac1ac1f4c99e01reed void blitAntiH(int x, int y, const SkAlpha antialias[], const int16_t runs[]) override; 1566983f66d8b3a489133b751e2cef03e72a03bfeaereed void blitAntiH2(int x, int y, U8CPU a0, U8CPU a1) override; 1576983f66d8b3a489133b751e2cef03e72a03bfeaereed void blitAntiV2(int x, int y, U8CPU a0, U8CPU a1) override; 158b602b8e5334edc0bfcdf086c2ea58e2b5d5f1f3breed@android.com 1598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 160dafaf7ac4d89f183dc515907665cdac3e3098466reed@android.com typedef SkARGB32_Opaque_Blitter INHERITED; 1618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 1628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkARGB32_Shader_Blitter : public SkShaderBlitter { 1648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 16541e010cb901c0da9066c4df562030808c9ccd7f8reed SkARGB32_Shader_Blitter(const SkPixmap& device, const SkPaint& paint, 16687fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org SkShader::Context* shaderContext); 1678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual ~SkARGB32_Shader_Blitter(); 16836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void blitH(int x, int y, int width) override; 16936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void blitV(int x, int y, int height, SkAlpha alpha) override; 17036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void blitRect(int x, int y, int width, int height) override; 17136352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void blitAntiH(int x, int y, const SkAlpha[], const int16_t[]) override; 17236352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void blitMask(const SkMask&, const SkIRect&) override; 173395eabeb0e72334c45324874c6e009b54634df21reed 1748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 175c4cae85752e3e486cf4eac8cd8128f57b6f40563reed@android.com SkXfermode* fXfermode; 176c4cae85752e3e486cf4eac8cd8128f57b6f40563reed@android.com SkPMColor* fBuffer; 177c4cae85752e3e486cf4eac8cd8128f57b6f40563reed@android.com SkBlitRow::Proc32 fProc32; 178c4cae85752e3e486cf4eac8cd8128f57b6f40563reed@android.com SkBlitRow::Proc32 fProc32Blend; 17913201e74f43b9c5fa173339eb36de515370e6973reed@google.com bool fShadeDirectlyIntoDevice; 18013201e74f43b9c5fa173339eb36de515370e6973reed@google.com bool fConstInY; 181395eabeb0e72334c45324874c6e009b54634df21reed 1828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // illegal 1838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkARGB32_Shader_Blitter& operator=(const SkARGB32_Shader_Blitter&); 184395eabeb0e72334c45324874c6e009b54634df21reed 1858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com typedef SkShaderBlitter INHERITED; 1868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 1878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 188395eabeb0e72334c45324874c6e009b54634df21reedclass SkARGB32_Shader4f_Blitter : public SkARGB32_Shader_Blitter { 189395eabeb0e72334c45324874c6e009b54634df21reedpublic: 190395eabeb0e72334c45324874c6e009b54634df21reed SkARGB32_Shader4f_Blitter(const SkPixmap& device, const SkPaint& paint, 191395eabeb0e72334c45324874c6e009b54634df21reed SkShader::Context* shaderContext); 192395eabeb0e72334c45324874c6e009b54634df21reed virtual ~SkARGB32_Shader4f_Blitter(); 193395eabeb0e72334c45324874c6e009b54634df21reed void blitH(int x, int y, int width) override; 194395eabeb0e72334c45324874c6e009b54634df21reed void blitV(int x, int y, int height, SkAlpha alpha) override; 195395eabeb0e72334c45324874c6e009b54634df21reed void blitRect(int x, int y, int width, int height) override; 196395eabeb0e72334c45324874c6e009b54634df21reed void blitAntiH(int x, int y, const SkAlpha[], const int16_t[]) override; 197395eabeb0e72334c45324874c6e009b54634df21reed void blitMask(const SkMask&, const SkIRect&) override; 198395eabeb0e72334c45324874c6e009b54634df21reed 199395eabeb0e72334c45324874c6e009b54634df21reedprivate: 200395eabeb0e72334c45324874c6e009b54634df21reed SkXfermode::PM4fState fState; 201395eabeb0e72334c45324874c6e009b54634df21reed SkXfermode::PM4fProc1 fProc1; 202395eabeb0e72334c45324874c6e009b54634df21reed SkXfermode::PM4fProcN fProcN; 203395eabeb0e72334c45324874c6e009b54634df21reed SkPM4f* fBuffer; 204395eabeb0e72334c45324874c6e009b54634df21reed bool fConstInY; 205395eabeb0e72334c45324874c6e009b54634df21reed 206395eabeb0e72334c45324874c6e009b54634df21reed // illegal 207395eabeb0e72334c45324874c6e009b54634df21reed SkARGB32_Shader4f_Blitter& operator=(const SkARGB32_Shader4f_Blitter&); 208395eabeb0e72334c45324874c6e009b54634df21reed 209395eabeb0e72334c45324874c6e009b54634df21reed typedef SkARGB32_Shader_Blitter INHERITED; 210395eabeb0e72334c45324874c6e009b54634df21reed}; 211395eabeb0e72334c45324874c6e009b54634df21reed 2121fc4c605def61d9e10489f9cd63dc378baa6ade3reed@android.com/////////////////////////////////////////////////////////////////////////////// 2138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2141fc4c605def61d9e10489f9cd63dc378baa6ade3reed@android.com/* These return the correct subclass of blitter for their device config. 2151fc4c605def61d9e10489f9cd63dc378baa6ade3reed@android.com 2161fc4c605def61d9e10489f9cd63dc378baa6ade3reed@android.com Currently, they make the following assumptions about the state of the 2171fc4c605def61d9e10489f9cd63dc378baa6ade3reed@android.com paint: 218981d4798007b91e2e19c13b171583927a56df63breed@google.com 2191fc4c605def61d9e10489f9cd63dc378baa6ade3reed@android.com 1. If there is an xfermode, there will also be a shader 2201fc4c605def61d9e10489f9cd63dc378baa6ade3reed@android.com 2. If there is a colorfilter, there will be a shader that itself handles 2211fc4c605def61d9e10489f9cd63dc378baa6ade3reed@android.com calling the filter, so the blitter can always ignore the colorfilter obj 2221fc4c605def61d9e10489f9cd63dc378baa6ade3reed@android.com 2231fc4c605def61d9e10489f9cd63dc378baa6ade3reed@android.com These pre-conditions must be handled by the caller, in our case 2241fc4c605def61d9e10489f9cd63dc378baa6ade3reed@android.com SkBlitter::Choose(...) 2251fc4c605def61d9e10489f9cd63dc378baa6ade3reed@android.com */ 2268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 22741e010cb901c0da9066c4df562030808c9ccd7f8reedSkBlitter* SkBlitter_ChooseD565(const SkPixmap& device, const SkPaint& paint, 22887fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org SkShader::Context* shaderContext, 229a5572e5bb2a2bbeeb59de0741c2527869d365a0ccommit-bot@chromium.org SkTBlitterAllocator* allocator); 2301fc4c605def61d9e10489f9cd63dc378baa6ade3reed@android.com 2318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 232