diff -r 000000000000 -r 6474c204b198 gfx/skia/trunk/src/core/SkBitmapProcShader.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gfx/skia/trunk/src/core/SkBitmapProcShader.h Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,62 @@ + +/* + * Copyright 2006 The Android Open Source Project + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + + +#ifndef SkBitmapProcShader_DEFINED +#define SkBitmapProcShader_DEFINED + +#include "SkShader.h" +#include "SkBitmapProcState.h" +#include "SkSmallAllocator.h" + +class SkBitmapProcShader : public SkShader { +public: + SkBitmapProcShader(const SkBitmap& src, TileMode tx, TileMode ty); + + // overrides from SkShader + virtual bool isOpaque() const SK_OVERRIDE; + virtual bool setContext(const SkBitmap&, const SkPaint&, const SkMatrix&) SK_OVERRIDE; + virtual void endContext() SK_OVERRIDE; + virtual uint32_t getFlags() SK_OVERRIDE { return fFlags; } + virtual void shadeSpan(int x, int y, SkPMColor dstC[], int count) SK_OVERRIDE; + virtual ShadeProc asAShadeProc(void** ctx) SK_OVERRIDE; + virtual void shadeSpan16(int x, int y, uint16_t dstC[], int count) SK_OVERRIDE; + virtual BitmapType asABitmap(SkBitmap*, SkMatrix*, TileMode*) const SK_OVERRIDE; + + static bool CanDo(const SkBitmap&, TileMode tx, TileMode ty); + + SK_TO_STRING_OVERRIDE() + SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkBitmapProcShader) + +#if SK_SUPPORT_GPU + GrEffectRef* asNewEffect(GrContext*, const SkPaint&) const SK_OVERRIDE; +#endif + +protected: + SkBitmapProcShader(SkReadBuffer& ); + virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE; + + SkBitmap fRawBitmap; // experimental for RLE encoding + SkBitmapProcState fState; + uint32_t fFlags; + +private: + typedef SkShader INHERITED; +}; + +// Commonly used allocator. It currently is only used to allocate up to 2 objects. The total +// bytes requested is calculated using one of our large shaders plus the size of an Sk3DBlitter +// in SkDraw.cpp +typedef SkSmallAllocator<2, sizeof(SkBitmapProcShader) + sizeof(void*) * 2> SkTBlitterAllocator; + +// If alloc is non-NULL, it will be used to allocate the returned SkShader, and MUST outlive +// the SkShader. +SkShader* CreateBitmapShader(const SkBitmap& src, SkShader::TileMode, SkShader::TileMode, + SkTBlitterAllocator* alloc); + +#endif