OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2014 Google Inc. | 2 * Copyright 2014 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "SkPictureShader.h" | 8 #include "SkPictureShader.h" |
9 | 9 |
10 #include "SkBitmap.h" | 10 #include "SkBitmap.h" |
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
230 tileShader.reset(tileImage->newShader(fTmx, fTmy, &shaderMatrix)); | 230 tileShader.reset(tileImage->newShader(fTmx, fTmy, &shaderMatrix)); |
231 | 231 |
232 const SkImageInfo tileInfo = SkImageInfo::MakeN32Premul(tileSize); | 232 const SkImageInfo tileInfo = SkImageInfo::MakeN32Premul(tileSize); |
233 SkResourceCache::Add(new BitmapShaderRec(key, tileShader.get(), | 233 SkResourceCache::Add(new BitmapShaderRec(key, tileShader.get(), |
234 tileInfo.getSafeSize(tileInfo.m
inRowBytes()))); | 234 tileInfo.getSafeSize(tileInfo.m
inRowBytes()))); |
235 } | 235 } |
236 | 236 |
237 return tileShader.detach(); | 237 return tileShader.detach(); |
238 } | 238 } |
239 | 239 |
240 size_t SkPictureShader::contextSize() const { | 240 size_t SkPictureShader::contextSize(const ContextRec&) const { |
241 return sizeof(PictureShaderContext); | 241 return sizeof(PictureShaderContext); |
242 } | 242 } |
243 | 243 |
244 SkShader::Context* SkPictureShader::onCreateContext(const ContextRec& rec, void*
storage) const { | 244 SkShader::Context* SkPictureShader::onCreateContext(const ContextRec& rec, void*
storage) const { |
245 SkAutoTUnref<SkShader> bitmapShader(this->refBitmapShader(*rec.fMatrix, rec.
fLocalMatrix)); | 245 SkAutoTUnref<SkShader> bitmapShader(this->refBitmapShader(*rec.fMatrix, rec.
fLocalMatrix)); |
246 if (nullptr == bitmapShader.get()) { | 246 if (nullptr == bitmapShader.get()) { |
247 return nullptr; | 247 return nullptr; |
248 } | 248 } |
249 return PictureShaderContext::Create(storage, *this, rec, bitmapShader); | 249 return PictureShaderContext::Create(storage, *this, rec, bitmapShader); |
250 } | 250 } |
251 | 251 |
252 ////////////////////////////////////////////////////////////////////////////////
///////// | 252 ////////////////////////////////////////////////////////////////////////////////
///////// |
253 | 253 |
254 SkShader::Context* SkPictureShader::PictureShaderContext::Create(void* storage, | 254 SkShader::Context* SkPictureShader::PictureShaderContext::Create(void* storage, |
255 const SkPictureShader& shader, const ContextRec& rec, SkShade
r* bitmapShader) { | 255 const SkPictureShader& shader, const ContextRec& rec, SkShade
r* bitmapShader) { |
256 PictureShaderContext* ctx = new (storage) PictureShaderContext(shader, rec,
bitmapShader); | 256 PictureShaderContext* ctx = new (storage) PictureShaderContext(shader, rec,
bitmapShader); |
257 if (nullptr == ctx->fBitmapShaderContext) { | 257 if (nullptr == ctx->fBitmapShaderContext) { |
258 ctx->~PictureShaderContext(); | 258 ctx->~PictureShaderContext(); |
259 ctx = nullptr; | 259 ctx = nullptr; |
260 } | 260 } |
261 return ctx; | 261 return ctx; |
262 } | 262 } |
263 | 263 |
264 SkPictureShader::PictureShaderContext::PictureShaderContext( | 264 SkPictureShader::PictureShaderContext::PictureShaderContext( |
265 const SkPictureShader& shader, const ContextRec& rec, SkShader* bitmapSh
ader) | 265 const SkPictureShader& shader, const ContextRec& rec, SkShader* bitmapSh
ader) |
266 : INHERITED(shader, rec) | 266 : INHERITED(shader, rec) |
267 , fBitmapShader(SkRef(bitmapShader)) | 267 , fBitmapShader(SkRef(bitmapShader)) |
268 { | 268 { |
269 fBitmapShaderContextStorage = sk_malloc_throw(bitmapShader->contextSize()); | 269 fBitmapShaderContextStorage = sk_malloc_throw(bitmapShader->contextSize(rec)
); |
270 fBitmapShaderContext = bitmapShader->createContext(rec, fBitmapShaderContext
Storage); | 270 fBitmapShaderContext = bitmapShader->createContext(rec, fBitmapShaderContext
Storage); |
271 //if fBitmapShaderContext is null, we are invalid | 271 //if fBitmapShaderContext is null, we are invalid |
272 } | 272 } |
273 | 273 |
274 SkPictureShader::PictureShaderContext::~PictureShaderContext() { | 274 SkPictureShader::PictureShaderContext::~PictureShaderContext() { |
275 if (fBitmapShaderContext) { | 275 if (fBitmapShaderContext) { |
276 fBitmapShaderContext->~Context(); | 276 fBitmapShaderContext->~Context(); |
277 } | 277 } |
278 sk_free(fBitmapShaderContextStorage); | 278 sk_free(fBitmapShaderContextStorage); |
279 } | 279 } |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
321 if (context) { | 321 if (context) { |
322 maxTextureSize = context->caps()->maxTextureSize(); | 322 maxTextureSize = context->caps()->maxTextureSize(); |
323 } | 323 } |
324 SkAutoTUnref<SkShader> bitmapShader(this->refBitmapShader(viewM, localMatrix
, maxTextureSize)); | 324 SkAutoTUnref<SkShader> bitmapShader(this->refBitmapShader(viewM, localMatrix
, maxTextureSize)); |
325 if (!bitmapShader) { | 325 if (!bitmapShader) { |
326 return nullptr; | 326 return nullptr; |
327 } | 327 } |
328 return bitmapShader->asFragmentProcessor(context, viewM, nullptr, fq); | 328 return bitmapShader->asFragmentProcessor(context, viewM, nullptr, fq); |
329 } | 329 } |
330 #endif | 330 #endif |
OLD | NEW |