ec3ed6a5eb
I have manually examined all of these diffs and restored a few files that seem to require manual adjustment. The following files still need to be modified manually, in a separate CL: android_sample/SampleApp/AndroidManifest.xml android_sample/SampleApp/res/layout/layout.xml android_sample/SampleApp/res/menu/sample.xml android_sample/SampleApp/res/values/strings.xml android_sample/SampleApp/src/com/skia/sampleapp/SampleApp.java android_sample/SampleApp/src/com/skia/sampleapp/SampleView.java experimental/CiCarbonSampleMain.c experimental/CocoaDebugger/main.m experimental/FileReaderApp/main.m experimental/SimpleCocoaApp/main.m experimental/iOSSampleApp/Shared/SkAlertPrompt.h experimental/iOSSampleApp/Shared/SkAlertPrompt.m experimental/iOSSampleApp/SkiOSSampleApp-Base.xcconfig experimental/iOSSampleApp/SkiOSSampleApp-Debug.xcconfig experimental/iOSSampleApp/SkiOSSampleApp-Release.xcconfig gpu/src/android/GrGLDefaultInterface_android.cpp gyp/common.gypi gyp_skia include/ports/SkHarfBuzzFont.h include/views/SkOSWindow_wxwidgets.h make.bat make.py src/opts/memset.arm.S src/opts/memset16_neon.S src/opts/memset32_neon.S src/opts/opts_check_arm.cpp src/ports/SkDebug_brew.cpp src/ports/SkMemory_brew.cpp src/ports/SkOSFile_brew.cpp src/ports/SkXMLParser_empty.cpp src/utils/ios/SkImageDecoder_iOS.mm src/utils/ios/SkOSFile_iOS.mm src/utils/ios/SkStream_NSData.mm tests/FillPathTest.cpp Review URL: http://codereview.appspot.com/4816058 git-svn-id: http://skia.googlecode.com/svn/trunk@1982 2bbb7eff-a529-9590-31e7-b0007b416f81
120 lines
3.8 KiB
C++
120 lines
3.8 KiB
C++
|
|
/*
|
|
* Copyright 2011 Google Inc.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*/
|
|
#ifndef SkBlitRow_DEFINED
|
|
#define SkBlitRow_DEFINED
|
|
|
|
#include "SkBitmap.h"
|
|
#include "SkColor.h"
|
|
|
|
class SkBlitRow {
|
|
public:
|
|
enum Flags16 {
|
|
//! If set, the alpha parameter will be != 255
|
|
kGlobalAlpha_Flag = 0x01,
|
|
//! If set, the src colors may have alpha != 255
|
|
kSrcPixelAlpha_Flag = 0x02,
|
|
//! If set, the resulting 16bit colors should be dithered
|
|
kDither_Flag = 0x04
|
|
};
|
|
|
|
/** 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.
|
|
|
|
The x,y params are useful just for dithering
|
|
|
|
@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
|
|
*/
|
|
typedef void (*Proc)(uint16_t* dst,
|
|
const SkPMColor* src,
|
|
int count, U8CPU alpha, int x, int y);
|
|
|
|
/** Function pointer that blends a single color with a row of 32-bit colors
|
|
onto a 32-bit destination
|
|
*/
|
|
typedef void (*ColorProc)(SkPMColor* dst, const SkPMColor* src, int count,
|
|
SkPMColor color);
|
|
|
|
//! Public entry-point to return a blit function ptr
|
|
static Proc Factory(unsigned flags, SkBitmap::Config);
|
|
|
|
///////////// D32 version
|
|
|
|
enum Flags32 {
|
|
kGlobalAlpha_Flag32 = 1 << 0,
|
|
kSrcPixelAlpha_Flag32 = 1 << 1,
|
|
};
|
|
|
|
/** 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
|
|
*/
|
|
typedef void (*Proc32)(uint32_t* dst,
|
|
const SkPMColor* src,
|
|
int count, U8CPU alpha);
|
|
|
|
static Proc32 Factory32(unsigned flags32);
|
|
|
|
/** 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.
|
|
*/
|
|
static void Color32(SkPMColor dst[], const SkPMColor src[],
|
|
int count, SkPMColor color);
|
|
|
|
static ColorProc ColorProcFactory();
|
|
|
|
/** 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.
|
|
*/
|
|
|
|
static Proc32 PlatformProcs32(unsigned flags);
|
|
static Proc PlatformProcs565(unsigned flags);
|
|
static Proc PlatformProcs4444(unsigned flags);
|
|
static ColorProc PlatformColorProc();
|
|
|
|
private:
|
|
enum {
|
|
kFlags16_Mask = 7,
|
|
kFlags32_Mask = 3
|
|
};
|
|
};
|
|
|
|
/**
|
|
* Factory for blitmask procs
|
|
*/
|
|
class SkBlitMask {
|
|
public:
|
|
/**
|
|
* Function pointer that blits the mask into a device (dst) colorized
|
|
* by color. The number of pixels to blit is specified by width and height,
|
|
* but each scanline is offset by dstRB (rowbytes) and srcRB respectively.
|
|
*/
|
|
typedef void (*Proc)(void* dst, size_t dstRB, SkBitmap::Config dstConfig,
|
|
const uint8_t* mask, size_t maskRB, SkColor color,
|
|
int width, int height);
|
|
|
|
/* Public entry-point to return a blitmask function ptr
|
|
*/
|
|
static Proc Factory(SkBitmap::Config dstConfig, SkColor color);
|
|
|
|
/* return either platform specific optimized blitmask function-ptr,
|
|
* or NULL if no optimized
|
|
*/
|
|
static Proc PlatformProcs(SkBitmap::Config dstConfig, SkColor color);
|
|
};
|
|
|
|
|
|
#endif
|