epoger@google.com | ec3ed6a | 2011-07-28 14:26:00 +0000 | [diff] [blame] | 1 | /* |
| 2 | * Copyright 2006 The Android Open Source Project |
| 3 | * |
| 4 | * Use of this source code is governed by a BSD-style license that can be |
| 5 | * found in the LICENSE file. |
| 6 | */ |
reed@android.com | 8a1c16f | 2008-12-17 15:59:43 +0000 | [diff] [blame] | 7 | #ifndef SkBitmapProcShader_DEFINED |
| 8 | #define SkBitmapProcShader_DEFINED |
| 9 | |
reed | 1ec04d9 | 2016-08-05 12:07:41 -0700 | [diff] [blame^] | 10 | #include "SkImagePriv.h" |
reed@android.com | 8a1c16f | 2008-12-17 15:59:43 +0000 | [diff] [blame] | 11 | #include "SkShader.h" |
commit-bot@chromium.org | a5572e5 | 2014-03-07 03:24:41 +0000 | [diff] [blame] | 12 | #include "SkSmallAllocator.h" |
reed@android.com | 8a1c16f | 2008-12-17 15:59:43 +0000 | [diff] [blame] | 13 | |
bungeman | f3c15b7 | 2015-08-19 11:56:48 -0700 | [diff] [blame] | 14 | struct SkBitmapProcState; |
reed | 013e9e3 | 2015-09-15 14:46:27 -0700 | [diff] [blame] | 15 | class SkBitmapProvider; |
bungeman | f3c15b7 | 2015-08-19 11:56:48 -0700 | [diff] [blame] | 16 | |
reed | 320a40d | 2016-08-02 06:12:06 -0700 | [diff] [blame] | 17 | class SkBitmapProcLegacyShader : public SkShader { |
reed@google.com | 7c2f27d | 2011-03-07 19:29:00 +0000 | [diff] [blame] | 18 | private: |
reed | 7a4d847 | 2015-09-15 13:33:58 -0700 | [diff] [blame] | 19 | friend class SkImageShader; |
| 20 | |
reed | d882901 | 2016-03-04 11:07:43 -0800 | [diff] [blame] | 21 | static size_t ContextSize(const ContextRec&, const SkImageInfo& srcInfo); |
reed | 013e9e3 | 2015-09-15 14:46:27 -0700 | [diff] [blame] | 22 | static Context* MakeContext(const SkShader&, TileMode tmx, TileMode tmy, |
| 23 | const SkBitmapProvider&, const ContextRec&, void* storage); |
reed | 7a4d847 | 2015-09-15 13:33:58 -0700 | [diff] [blame] | 24 | |
reed@android.com | 8a1c16f | 2008-12-17 15:59:43 +0000 | [diff] [blame] | 25 | typedef SkShader INHERITED; |
| 26 | }; |
| 27 | |
herb | 86a6c6d | 2016-07-22 14:06:27 -0700 | [diff] [blame] | 28 | enum {kSkBlitterContextSize = 3332}; |
herb | 42da45d | 2016-04-08 14:24:37 -0700 | [diff] [blame] | 29 | |
commit-bot@chromium.org | 87fcd95 | 2014-04-23 19:10:51 +0000 | [diff] [blame] | 30 | // Commonly used allocator. It currently is only used to allocate up to 3 objects. The total |
| 31 | // bytes requested is calculated using one of our large shaders, its context size plus the size of |
| 32 | // an Sk3DBlitter in SkDraw.cpp |
| 33 | // Note that some contexts may contain other contexts (e.g. for compose shaders), but we've not |
| 34 | // yet found a situation where the size below isn't big enough. |
herb | 42da45d | 2016-04-08 14:24:37 -0700 | [diff] [blame] | 35 | typedef SkSmallAllocator<3, kSkBlitterContextSize> SkTBlitterAllocator; |
commit-bot@chromium.org | a5572e5 | 2014-03-07 03:24:41 +0000 | [diff] [blame] | 36 | |
halcanary | 96fcdcc | 2015-08-27 07:41:13 -0700 | [diff] [blame] | 37 | // If alloc is non-nullptr, it will be used to allocate the returned SkShader, and MUST outlive |
commit-bot@chromium.org | a5572e5 | 2014-03-07 03:24:41 +0000 | [diff] [blame] | 38 | // the SkShader. |
reed | 8a21c9f | 2016-03-08 18:50:00 -0800 | [diff] [blame] | 39 | sk_sp<SkShader> SkMakeBitmapShader(const SkBitmap& src, SkShader::TileMode, SkShader::TileMode, |
reed | 1ec04d9 | 2016-08-05 12:07:41 -0700 | [diff] [blame^] | 40 | const SkMatrix* localMatrix, SkCopyPixelsMode, |
| 41 | SkTBlitterAllocator* alloc); |
commit-bot@chromium.org | a5572e5 | 2014-03-07 03:24:41 +0000 | [diff] [blame] | 42 | |
reed@android.com | 8a1c16f | 2008-12-17 15:59:43 +0000 | [diff] [blame] | 43 | #endif |