bool SkModeColorFilter::asFragmentProcessors(GrContext*, GrProcessorDataManager*, SkTDArray<GrFragmentProcessor*>* array) const { if (SkXfermode::kDst_Mode != fMode) { GrFragmentProcessor* frag = ModeColorFilterEffect::Create(SkColor2GrColor(fColor), fMode); if (frag) { if (array) { *array->append() = frag; } else { frag->unref(); SkDEBUGCODE(frag = nullptr;) } return true; } }
bool SkLumaColorFilter::asFragmentProcessors(GrContext*, GrProcessorDataManager*, SkTDArray<GrFragmentProcessor*>* array) const { GrFragmentProcessor* frag = LumaColorFilterEffect::Create(); if (frag) { if (array) { *array->append() = frag; } else { frag->unref(); SkDEBUGCODE(frag = nullptr;) } return true; } return false; }
bool SkColorCubeFilter::asFragmentProcessors(GrContext* context, GrProcessorDataManager*, SkTDArray<GrFragmentProcessor*>* array) const { static const GrUniqueKey::Domain kDomain = GrUniqueKey::GenerateDomain(); GrUniqueKey key; GrUniqueKey::Builder builder(&key, kDomain, 2); builder[0] = fUniqueID; builder[1] = fCache.cubeDimension(); builder.finish(); GrSurfaceDesc desc; desc.fWidth = fCache.cubeDimension(); desc.fHeight = fCache.cubeDimension() * fCache.cubeDimension(); desc.fConfig = kRGBA_8888_GrPixelConfig; SkAutoTUnref<GrTexture> textureCube( context->textureProvider()->findAndRefTextureByUniqueKey(key)); if (!textureCube) { textureCube.reset(context->textureProvider()->createTexture( desc, true, fCubeData->data(), 0)); if (textureCube) { context->textureProvider()->assignUniqueKeyToTexture(key, textureCube); } } GrFragmentProcessor* frag = textureCube ? GrColorCubeEffect::Create(textureCube) : NULL; if (frag) { if (array) { *array->append() = frag; } else { frag->unref(); SkDEBUGCODE(frag = NULL;) } return true; } return false; }