SkBitmapProcShader.h revision 0f10f7bf1fb43ca6346dc220a076773b1f19a367
1 2/* 3 * Copyright 2006 The Android Open Source Project 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8 9 10#ifndef SkBitmapProcShader_DEFINED 11#define SkBitmapProcShader_DEFINED 12 13#include "SkShader.h" 14#include "SkBitmapProcState.h" 15#include "SkSmallAllocator.h" 16 17class SkBitmapProcShader : public SkShader { 18public: 19 SkBitmapProcShader(const SkBitmap& src, TileMode tx, TileMode ty); 20 21 // overrides from SkShader 22 virtual bool isOpaque() const SK_OVERRIDE; 23 virtual bool setContext(const SkBitmap&, const SkPaint&, const SkMatrix&) SK_OVERRIDE; 24 virtual void endContext() SK_OVERRIDE; 25 virtual uint32_t getFlags() SK_OVERRIDE { return fFlags; } 26 virtual void shadeSpan(int x, int y, SkPMColor dstC[], int count) SK_OVERRIDE; 27 virtual ShadeProc asAShadeProc(void** ctx) SK_OVERRIDE; 28 virtual void shadeSpan16(int x, int y, uint16_t dstC[], int count) SK_OVERRIDE; 29 virtual BitmapType asABitmap(SkBitmap*, SkMatrix*, TileMode*) const SK_OVERRIDE; 30 31 static bool CanDo(const SkBitmap&, TileMode tx, TileMode ty); 32 33 SK_TO_STRING_OVERRIDE() 34 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkBitmapProcShader) 35 36#if SK_SUPPORT_GPU 37 GrEffectRef* asNewEffect(GrContext*, const SkPaint&) const SK_OVERRIDE; 38#endif 39 40protected: 41 SkBitmapProcShader(SkReadBuffer& ); 42 virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE; 43 44 SkBitmap fRawBitmap; // experimental for RLE encoding 45 SkBitmapProcState fState; 46 uint32_t fFlags; 47 48private: 49 typedef SkShader INHERITED; 50}; 51 52// Commonly used allocator. It currently is only used to allocate up to 2 objects. The total 53// bytes requested is calculated using one of our large shaders plus the size of an Sk3DBlitter 54// in SkDraw.cpp 55typedef SkSmallAllocator<2, sizeof(SkBitmapProcShader) + sizeof(void*) * 2> SkTBlitterAllocator; 56 57// If alloc is non-NULL, it will be used to allocate the returned SkShader, and MUST outlive 58// the SkShader. 59SkShader* CreateBitmapShader(const SkBitmap& src, SkShader::TileMode, SkShader::TileMode, 60 SkTBlitterAllocator* alloc); 61 62#endif 63