2011-07-28 14:26:00 +00:00
|
|
|
/*
|
|
|
|
* Copyright 2011 Google Inc.
|
|
|
|
*
|
|
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
|
|
* found in the LICENSE file.
|
|
|
|
*/
|
2011-10-12 13:43:52 +00:00
|
|
|
|
2008-12-17 15:59:43 +00:00
|
|
|
#ifndef SkBlitRow_DEFINED
|
|
|
|
#define SkBlitRow_DEFINED
|
|
|
|
|
|
|
|
#include "SkBitmap.h"
|
|
|
|
#include "SkColor.h"
|
|
|
|
|
|
|
|
class SkBlitRow {
|
|
|
|
public:
|
2009-09-23 15:06:10 +00:00
|
|
|
enum Flags16 {
|
2009-07-30 02:22:31 +00:00
|
|
|
//! If set, the alpha parameter will be != 255
|
2008-12-17 15:59:43 +00:00
|
|
|
kGlobalAlpha_Flag = 0x01,
|
2009-07-30 02:22:31 +00:00
|
|
|
//! If set, the src colors may have alpha != 255
|
2008-12-17 15:59:43 +00:00
|
|
|
kSrcPixelAlpha_Flag = 0x02,
|
2009-07-30 02:22:31 +00:00
|
|
|
//! If set, the resulting 16bit colors should be dithered
|
2008-12-17 15:59:43 +00:00
|
|
|
kDither_Flag = 0x04
|
|
|
|
};
|
|
|
|
|
2009-07-30 02:22:31 +00:00
|
|
|
/** Function pointer that reads a scanline of src SkPMColors, and writes
|
|
|
|
a corresponding scanline of 16bit colors (specific format based on the
|
|
|
|
config passed to the Factory.
|
2011-03-09 12:55:47 +00:00
|
|
|
|
2015-01-13 21:51:00 +00:00
|
|
|
The x,y params provide the dithering phase for the start of the scanline
|
2011-03-09 12:55:47 +00:00
|
|
|
|
2009-07-30 02:22:31 +00:00
|
|
|
@param alpha A global alpha to be applied to all of the src colors
|
|
|
|
@param x The x coordinate of the beginning of the scanline
|
|
|
|
@param y THe y coordinate of the scanline
|
|
|
|
*/
|
2015-01-13 21:51:00 +00:00
|
|
|
typedef void (*Proc16)(uint16_t dst[], const SkPMColor src[], int count,
|
|
|
|
U8CPU alpha, int x, int y);
|
2008-12-17 15:59:43 +00:00
|
|
|
|
2015-01-13 21:51:00 +00:00
|
|
|
static Proc16 Factory16(unsigned flags);
|
|
|
|
|
2015-02-25 20:52:57 +00:00
|
|
|
/**
|
2015-01-13 21:51:00 +00:00
|
|
|
* Function pointer that blends a single src color onto a scaline of dst colors.
|
|
|
|
*
|
|
|
|
* The x,y params provide the dithering phase for the start of the scanline
|
|
|
|
*/
|
|
|
|
typedef void (*ColorProc16)(uint16_t dst[], SkPMColor src, int count, int x, int y);
|
|
|
|
|
|
|
|
// Note : we ignore the kGlobalAlpha_Flag setting, but do respect kSrcPixelAlpha_Flag
|
|
|
|
static ColorProc16 ColorFactory16(unsigned flags);
|
2009-07-30 02:22:31 +00:00
|
|
|
|
2009-09-23 15:06:10 +00:00
|
|
|
///////////// D32 version
|
|
|
|
|
|
|
|
enum Flags32 {
|
|
|
|
kGlobalAlpha_Flag32 = 1 << 0,
|
2012-06-01 13:15:47 +00:00
|
|
|
kSrcPixelAlpha_Flag32 = 1 << 1
|
2009-09-23 15:06:10 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
/** Function pointer that blends 32bit colors onto a 32bit destination.
|
|
|
|
@param dst array of dst 32bit colors
|
|
|
|
@param src array of src 32bit colors (w/ or w/o alpha)
|
|
|
|
@param count number of colors to blend
|
|
|
|
@param alpha global alpha to be applied to all src colors
|
|
|
|
*/
|
2015-01-13 21:51:00 +00:00
|
|
|
typedef void (*Proc32)(uint32_t dst[], const SkPMColor src[], int count, U8CPU alpha);
|
2009-09-23 15:06:10 +00:00
|
|
|
|
|
|
|
static Proc32 Factory32(unsigned flags32);
|
2011-03-09 12:55:47 +00:00
|
|
|
|
2009-09-23 15:06:10 +00:00
|
|
|
/** Blend a single color onto a row of S32 pixels, writing the result
|
|
|
|
into a row of D32 pixels. src and dst may be the same memory, but
|
|
|
|
if they are not, they may not overlap.
|
|
|
|
*/
|
2015-01-13 21:51:00 +00:00
|
|
|
static void Color32(SkPMColor dst[], const SkPMColor src[], int count, SkPMColor color);
|
2009-09-23 15:06:10 +00:00
|
|
|
|
2009-11-04 20:51:06 +00:00
|
|
|
/** These static functions are called by the Factory and Factory32
|
|
|
|
functions, and should return either NULL, or a
|
|
|
|
platform-specific function-ptr to be used in place of the
|
|
|
|
system default.
|
|
|
|
*/
|
|
|
|
|
2009-11-13 19:00:49 +00:00
|
|
|
static Proc32 PlatformProcs32(unsigned flags);
|
2009-11-04 20:51:06 +00:00
|
|
|
|
2015-01-13 21:51:00 +00:00
|
|
|
static Proc16 PlatformFactory565(unsigned flags);
|
|
|
|
static ColorProc16 PlatformColorFactory565(unsigned flags);
|
|
|
|
|
2009-07-30 02:22:31 +00:00
|
|
|
private:
|
2009-09-23 15:06:10 +00:00
|
|
|
enum {
|
|
|
|
kFlags16_Mask = 7,
|
|
|
|
kFlags32_Mask = 3
|
|
|
|
};
|
2008-12-17 15:59:43 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|