SkBitmapProcShader.h revision 0f10f7bf1fb43ca6346dc220a076773b1f19a367
1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com
2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/*
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2006 The Android Open Source Project
4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com *
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be
6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file.
7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */
8ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com
98a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef SkBitmapProcShader_DEFINED
118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define SkBitmapProcShader_DEFINED
128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkShader.h"
148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkBitmapProcState.h"
15a5572e5bb2a2bbeeb59de0741c2527869d365a0ccommit-bot@chromium.org#include "SkSmallAllocator.h"
168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkBitmapProcShader : public SkShader {
188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic:
198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkBitmapProcShader(const SkBitmap& src, TileMode tx, TileMode ty);
208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    // overrides from SkShader
22b6e161937bc890f0aa12ac5e27415d4d260ea6e0junov@chromium.org    virtual bool isOpaque() const SK_OVERRIDE;
2376f9e938df0b5826fd4c80b854ceafaf385cfbe1robertphillips@google.com    virtual bool setContext(const SkBitmap&, const SkPaint&, const SkMatrix&) SK_OVERRIDE;
2476f9e938df0b5826fd4c80b854ceafaf385cfbe1robertphillips@google.com    virtual void endContext() SK_OVERRIDE;
2576f9e938df0b5826fd4c80b854ceafaf385cfbe1robertphillips@google.com    virtual uint32_t getFlags() SK_OVERRIDE { return fFlags; }
2676f9e938df0b5826fd4c80b854ceafaf385cfbe1robertphillips@google.com    virtual void shadeSpan(int x, int y, SkPMColor dstC[], int count) SK_OVERRIDE;
273bafe74a29c37761082980ed4ee9b831256bd27ereed@google.com    virtual ShadeProc asAShadeProc(void** ctx) SK_OVERRIDE;
2876f9e938df0b5826fd4c80b854ceafaf385cfbe1robertphillips@google.com    virtual void shadeSpan16(int x, int y, uint16_t dstC[], int count) SK_OVERRIDE;
2976f9e938df0b5826fd4c80b854ceafaf385cfbe1robertphillips@google.com    virtual BitmapType asABitmap(SkBitmap*, SkMatrix*, TileMode*) const SK_OVERRIDE;
308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    static bool CanDo(const SkBitmap&, TileMode tx, TileMode ty);
32ff21c2e0ae23da0f4742b47d4d37969a2a18bd99skia.committer@gmail.com
330f10f7bf1fb43ca6346dc220a076773b1f19a367commit-bot@chromium.org    SK_TO_STRING_OVERRIDE()
34ba28d03e94dc221d6a803bf2a84a420b9159255cdjsollen@google.com    SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkBitmapProcShader)
358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
36e197cbf9a3e66bab926bc5e51962752dad5221a0bsalomon@google.com#if SK_SUPPORT_GPU
370ac6af49975c54c2debf41e9200af416ecd2d973bsalomon@google.com    GrEffectRef* asNewEffect(GrContext*, const SkPaint&) const SK_OVERRIDE;
38e197cbf9a3e66bab926bc5e51962752dad5221a0bsalomon@google.com#endif
39e197cbf9a3e66bab926bc5e51962752dad5221a0bsalomon@google.com
408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprotected:
418b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.org    SkBitmapProcShader(SkReadBuffer& );
428b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.org    virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkBitmap          fRawBitmap;   // experimental for RLE encoding
458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkBitmapProcState fState;
468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    uint32_t          fFlags;
478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
487c2f27d788fff9dbf66a6d52753e47f786a313c0reed@google.comprivate:
498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    typedef SkShader INHERITED;
508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com};
518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
52a5572e5bb2a2bbeeb59de0741c2527869d365a0ccommit-bot@chromium.org// Commonly used allocator. It currently is only used to allocate up to 2 objects. The total
53a5572e5bb2a2bbeeb59de0741c2527869d365a0ccommit-bot@chromium.org// bytes requested is calculated using one of our large shaders plus the size of an Sk3DBlitter
54a5572e5bb2a2bbeeb59de0741c2527869d365a0ccommit-bot@chromium.org// in SkDraw.cpp
55a5572e5bb2a2bbeeb59de0741c2527869d365a0ccommit-bot@chromium.orgtypedef SkSmallAllocator<2, sizeof(SkBitmapProcShader) + sizeof(void*) * 2> SkTBlitterAllocator;
56a5572e5bb2a2bbeeb59de0741c2527869d365a0ccommit-bot@chromium.org
57a5572e5bb2a2bbeeb59de0741c2527869d365a0ccommit-bot@chromium.org// If alloc is non-NULL, it will be used to allocate the returned SkShader, and MUST outlive
58a5572e5bb2a2bbeeb59de0741c2527869d365a0ccommit-bot@chromium.org// the SkShader.
59a5572e5bb2a2bbeeb59de0741c2527869d365a0ccommit-bot@chromium.orgSkShader* CreateBitmapShader(const SkBitmap& src, SkShader::TileMode, SkShader::TileMode,
60a5572e5bb2a2bbeeb59de0741c2527869d365a0ccommit-bot@chromium.org                             SkTBlitterAllocator* alloc);
61a5572e5bb2a2bbeeb59de0741c2527869d365a0ccommit-bot@chromium.org
628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif
63