SkShader::Context* SkPictureShader::onCreateContext(const ContextRec& rec, void* storage) const { SkAutoTUnref<SkShader> bitmapShader(this->refBitmapShader(*rec.fMatrix, rec.fLocalMatrix)); if (NULL == bitmapShader.get()) { return NULL; } return PictureShaderContext::Create(storage, *this, rec, bitmapShader); }
void drawScene(SkCanvas* canvas, const SkMatrix& matrix, const SkMatrix& localMatrix, unsigned tileMode) { SkASSERT(tileMode < SK_ARRAY_COUNT(kTileConfigs)); SkPaint paint; paint.setStyle(SkPaint::kFill_Style); paint.setColor(SK_ColorLTGRAY); canvas->save(); canvas->concat(matrix); canvas->drawRect(SkRect::MakeWH(fSceneSize, fSceneSize), paint); canvas->drawRect(SkRect::MakeXYWH(fSceneSize * 1.1f, 0, fSceneSize, fSceneSize), paint); SkAutoTUnref<SkShader> pictureShader(SkShader::CreatePictureShader( fPicture, kTileConfigs[tileMode].tmx, kTileConfigs[tileMode].tmy, &localMatrix, NULL)); paint.setShader(pictureShader.get()); canvas->drawRect(SkRect::MakeWH(fSceneSize, fSceneSize), paint); canvas->translate(fSceneSize * 1.1f, 0); SkAutoTUnref<SkShader> bitmapShader(SkShader::CreateBitmapShader( fBitmap, kTileConfigs[tileMode].tmx, kTileConfigs[tileMode].tmy, &localMatrix)); paint.setShader(bitmapShader.get()); canvas->drawRect(SkRect::MakeWH(fSceneSize, fSceneSize), paint); canvas->restore(); }
bool SkPictureShader::asNewEffect(GrContext* context, const SkPaint& paint, const SkMatrix* localMatrix, GrColor* paintColor, GrEffect** effect) const { SkAutoTUnref<SkShader> bitmapShader(this->refBitmapShader(context->getMatrix(), localMatrix)); if (!bitmapShader) { return false; } return bitmapShader->asNewEffect(context, paint, NULL, paintColor, effect); }
bool SkPictureShader::asFragmentProcessor(GrContext* context, const SkPaint& paint, const SkMatrix* localMatrix, GrColor* paintColor, GrFragmentProcessor** fp) const { SkAutoTUnref<SkShader> bitmapShader(this->refBitmapShader(context->getMatrix(), localMatrix)); if (!bitmapShader) { return false; } return bitmapShader->asFragmentProcessor(context, paint, NULL, paintColor, fp); }