10910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/* libs/graphics/sgl/SkCoreBlitters.h 20910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project** 30910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project** Copyright 2006, The Android Open Source Project 40910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project** 50910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License"); 60910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project** you may not use this file except in compliance with the License. 70910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project** You may obtain a copy of the License at 80910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project** 90910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project** http://www.apache.org/licenses/LICENSE-2.0 100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project** 110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project** Unless required by applicable law or agreed to in writing, software 120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project** distributed under the License is distributed on an "AS IS" BASIS, 130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project** See the License for the specific language governing permissions and 150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project** limitations under the License. 160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project*/ 170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifndef SkCoreBlitters_DEFINED 190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define SkCoreBlitters_DEFINED 200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkBlitter.h" 220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkBlitRow.h" 230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkRasterBlitter : public SkBlitter { 250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic: 260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkRasterBlitter(const SkBitmap& device) : fDevice(device) {} 270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprotected: 290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const SkBitmap& fDevice; 300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate: 320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project typedef SkBlitter INHERITED; 330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkShaderBlitter : public SkRasterBlitter { 360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic: 370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkShaderBlitter(const SkBitmap& device, const SkPaint& paint); 380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual ~SkShaderBlitter(); 390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprotected: 41f294d10d594ac335ea3bd09caec89004d41edc5cMike Reed uint32_t fShaderFlags; 42f294d10d594ac335ea3bd09caec89004d41edc5cMike Reed SkShader* fShader; 430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate: 450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project // illegal 460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkShaderBlitter& operator=(const SkShaderBlitter&); 470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project typedef SkRasterBlitter INHERITED; 490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/////////////////////////////////////////////////////////////////////////////// 520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkA8_Blitter : public SkRasterBlitter { 540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic: 550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkA8_Blitter(const SkBitmap& device, const SkPaint& paint); 560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void blitH(int x, int y, int width); 570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void blitAntiH(int x, int y, const SkAlpha antialias[], const int16_t runs[]); 580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void blitV(int x, int y, int height, SkAlpha alpha); 590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void blitRect(int x, int y, int width, int height); 600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void blitMask(const SkMask&, const SkIRect&); 610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual const SkBitmap* justAnOpaqueColor(uint32_t*); 620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate: 640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project unsigned fSrcA; 650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project // illegal 670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkA8_Blitter& operator=(const SkA8_Blitter&); 680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project typedef SkRasterBlitter INHERITED; 700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkA8_Shader_Blitter : public SkShaderBlitter { 730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic: 740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkA8_Shader_Blitter(const SkBitmap& device, const SkPaint& paint); 750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual ~SkA8_Shader_Blitter(); 760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void blitH(int x, int y, int width); 770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void blitAntiH(int x, int y, const SkAlpha antialias[], const int16_t runs[]); 780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void blitMask(const SkMask&, const SkIRect&); 790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate: 810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkXfermode* fXfermode; 820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkPMColor* fBuffer; 830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project uint8_t* fAAExpand; 840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project // illegal 860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkA8_Shader_Blitter& operator=(const SkA8_Shader_Blitter&); 870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project typedef SkShaderBlitter INHERITED; 890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 910910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project//////////////////////////////////////////////////////////////// 920910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 930910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkARGB32_Blitter : public SkRasterBlitter { 940910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic: 950910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkARGB32_Blitter(const SkBitmap& device, const SkPaint& paint); 960910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void blitH(int x, int y, int width); 970910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void blitAntiH(int x, int y, const SkAlpha antialias[], const int16_t runs[]); 980910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void blitV(int x, int y, int height, SkAlpha alpha); 990910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void blitRect(int x, int y, int width, int height); 1000910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void blitMask(const SkMask&, const SkIRect&); 1010910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual const SkBitmap* justAnOpaqueColor(uint32_t*); 1020910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1030910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprotected: 1040910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkColor fPMColor; 1050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1060910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate: 1070910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project unsigned fSrcA, fSrcR, fSrcG, fSrcB; 1080910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1090910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project // illegal 1100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkARGB32_Blitter& operator=(const SkARGB32_Blitter&); 1110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project typedef SkRasterBlitter INHERITED; 1130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 1140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 115a9caa4f932a7646571a52937b03c244f5bca9bdfMike Reedclass SkARGB32_Opaque_Blitter : public SkARGB32_Blitter { 1160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic: 117a9caa4f932a7646571a52937b03c244f5bca9bdfMike Reed SkARGB32_Opaque_Blitter(const SkBitmap& device, const SkPaint& paint) 118a9caa4f932a7646571a52937b03c244f5bca9bdfMike Reed : INHERITED(device, paint) { SkASSERT(paint.getAlpha() == 0xFF); } 1190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void blitMask(const SkMask&, const SkIRect&); 120a9caa4f932a7646571a52937b03c244f5bca9bdfMike Reed 1210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate: 1220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project typedef SkARGB32_Blitter INHERITED; 1230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 1240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 125a9caa4f932a7646571a52937b03c244f5bca9bdfMike Reedclass SkARGB32_Black_Blitter : public SkARGB32_Opaque_Blitter { 1260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic: 127a9caa4f932a7646571a52937b03c244f5bca9bdfMike Reed SkARGB32_Black_Blitter(const SkBitmap& device, const SkPaint& paint) 128a9caa4f932a7646571a52937b03c244f5bca9bdfMike Reed : INHERITED(device, paint) {} 1290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void blitMask(const SkMask&, const SkIRect&); 130a9caa4f932a7646571a52937b03c244f5bca9bdfMike Reed virtual void blitAntiH(int x, int y, const SkAlpha antialias[], const int16_t runs[]); 1310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate: 133a9caa4f932a7646571a52937b03c244f5bca9bdfMike Reed typedef SkARGB32_Opaque_Blitter INHERITED; 1340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 1350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkARGB32_Shader_Blitter : public SkShaderBlitter { 1370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic: 1380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkARGB32_Shader_Blitter(const SkBitmap& device, const SkPaint& paint); 1390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual ~SkARGB32_Shader_Blitter(); 1400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void blitH(int x, int y, int width); 1410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void blitAntiH(int x, int y, const SkAlpha antialias[], const int16_t runs[]); 1420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate: 144d0195f840fa964da51f7a1192b432954794e660cMike Reed SkXfermode* fXfermode; 145d0195f840fa964da51f7a1192b432954794e660cMike Reed SkPMColor* fBuffer; 146d0195f840fa964da51f7a1192b432954794e660cMike Reed SkBlitRow::Proc32 fProc32; 147d0195f840fa964da51f7a1192b432954794e660cMike Reed SkBlitRow::Proc32 fProc32Blend; 1480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project // illegal 1500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkARGB32_Shader_Blitter& operator=(const SkARGB32_Shader_Blitter&); 1510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project typedef SkShaderBlitter INHERITED; 1530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 1540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1554663d79a396bd4d45a9140626921c9fbad77fbf8Mike Reed/////////////////////////////////////////////////////////////////////////////// 1560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkA1_Blitter : public SkRasterBlitter { 1580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic: 1590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkA1_Blitter(const SkBitmap& device, const SkPaint& paint); 1600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void blitH(int x, int y, int width); 1610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate: 1630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project uint8_t fSrcA; 1640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project // illegal 1660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkA1_Blitter& operator=(const SkA1_Blitter&); 1670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project typedef SkRasterBlitter INHERITED; 1690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 1700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1714663d79a396bd4d45a9140626921c9fbad77fbf8Mike Reed/////////////////////////////////////////////////////////////////////////////// 1724663d79a396bd4d45a9140626921c9fbad77fbf8Mike Reed 1734663d79a396bd4d45a9140626921c9fbad77fbf8Mike Reed/* These return the correct subclass of blitter for their device config. 1744663d79a396bd4d45a9140626921c9fbad77fbf8Mike Reed 1754663d79a396bd4d45a9140626921c9fbad77fbf8Mike Reed Currently, they make the following assumptions about the state of the 1764663d79a396bd4d45a9140626921c9fbad77fbf8Mike Reed paint: 1774663d79a396bd4d45a9140626921c9fbad77fbf8Mike Reed 1784663d79a396bd4d45a9140626921c9fbad77fbf8Mike Reed 1. If there is an xfermode, there will also be a shader 1794663d79a396bd4d45a9140626921c9fbad77fbf8Mike Reed 2. If there is a colorfilter, there will be a shader that itself handles 1804663d79a396bd4d45a9140626921c9fbad77fbf8Mike Reed calling the filter, so the blitter can always ignore the colorfilter obj 1814663d79a396bd4d45a9140626921c9fbad77fbf8Mike Reed 1824663d79a396bd4d45a9140626921c9fbad77fbf8Mike Reed These pre-conditions must be handled by the caller, in our case 1834663d79a396bd4d45a9140626921c9fbad77fbf8Mike Reed SkBlitter::Choose(...) 1844663d79a396bd4d45a9140626921c9fbad77fbf8Mike Reed */ 1850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectextern SkBlitter* SkBlitter_ChooseD4444(const SkBitmap& device, 1870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const SkPaint& paint, 1880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project void* storage, size_t storageSize); 1890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1904663d79a396bd4d45a9140626921c9fbad77fbf8Mike Reedextern SkBlitter* SkBlitter_ChooseD565(const SkBitmap& device, 1914663d79a396bd4d45a9140626921c9fbad77fbf8Mike Reed const SkPaint& paint, 1924663d79a396bd4d45a9140626921c9fbad77fbf8Mike Reed void* storage, size_t storageSize); 1934663d79a396bd4d45a9140626921c9fbad77fbf8Mike Reed 1940910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 1950910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 196