15970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org/* 25970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org * Copyright 2014 Google Inc. 35970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org * 45970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org * Use of this source code is governed by a BSD-style license that can be 55970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org * found in the LICENSE file. 65970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org */ 75970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org 85970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org#ifndef SkLocalMatrixShader_DEFINED 95970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org#define SkLocalMatrixShader_DEFINED 105970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org 115970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org#include "SkShader.h" 125970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org#include "SkReadBuffer.h" 135970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org#include "SkWriteBuffer.h" 145970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org 155970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.orgclass SkLocalMatrixShader : public SkShader { 165970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.orgpublic: 175970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org SkLocalMatrixShader(SkShader* proxy, const SkMatrix& localMatrix) 18c870d494dd0dc88f3f4155a0d6257a1be8280880scroggo : INHERITED(&localMatrix) 19c870d494dd0dc88f3f4155a0d6257a1be8280880scroggo , fProxyShader(SkRef(proxy)) 205970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org {} 21e92c68f7d7398e8a510b7157a38747b23cb883aeskia.committer@gmail.com 225970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org virtual size_t contextSize() const SK_OVERRIDE { 235970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org return fProxyShader->contextSize(); 245970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org } 25e92c68f7d7398e8a510b7157a38747b23cb883aeskia.committer@gmail.com 265970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org virtual BitmapType asABitmap(SkBitmap* bitmap, SkMatrix* matrix, 275970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org TileMode* mode) const SK_OVERRIDE { 285970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org return fProxyShader->asABitmap(bitmap, matrix, mode); 295970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org } 30e92c68f7d7398e8a510b7157a38747b23cb883aeskia.committer@gmail.com 315970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org virtual GradientType asAGradient(GradientInfo* info) const SK_OVERRIDE { 325970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org return fProxyShader->asAGradient(info); 335970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org } 34e92c68f7d7398e8a510b7157a38747b23cb883aeskia.committer@gmail.com 359de5b514d38c5b36066bcdc14fba2f7e5196d372dandov#if SK_SUPPORT_GPU 369de5b514d38c5b36066bcdc14fba2f7e5196d372dandov 37b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt virtual bool asFragmentProcessor(GrContext* context, const SkPaint& paint, 38b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt const SkMatrix* localMatrix, GrColor* grColor, 39b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt GrFragmentProcessor** fp) const SK_OVERRIDE { 40c870d494dd0dc88f3f4155a0d6257a1be8280880scroggo SkMatrix tmp = this->getLocalMatrix(); 415970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org if (localMatrix) { 425970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org tmp.preConcat(*localMatrix); 435970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org } 44b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt return fProxyShader->asFragmentProcessor(context, paint, &tmp, grColor, fp); 455970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org } 469de5b514d38c5b36066bcdc14fba2f7e5196d372dandov 479de5b514d38c5b36066bcdc14fba2f7e5196d372dandov#else 489de5b514d38c5b36066bcdc14fba2f7e5196d372dandov 49b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt virtual bool asFragmentProcessor(GrContext*, const SkPaint&, const SkMatrix*, GrColor*, 50b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt GrFragmentProcessor**) const SK_OVERRIDE { 519de5b514d38c5b36066bcdc14fba2f7e5196d372dandov SkDEBUGFAIL("Should not call in GPU-less build"); 529de5b514d38c5b36066bcdc14fba2f7e5196d372dandov return false; 539de5b514d38c5b36066bcdc14fba2f7e5196d372dandov } 549de5b514d38c5b36066bcdc14fba2f7e5196d372dandov 559de5b514d38c5b36066bcdc14fba2f7e5196d372dandov#endif 569de5b514d38c5b36066bcdc14fba2f7e5196d372dandov 575970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org virtual SkShader* refAsALocalMatrixShader(SkMatrix* localMatrix) const SK_OVERRIDE { 585970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org if (localMatrix) { 59c870d494dd0dc88f3f4155a0d6257a1be8280880scroggo *localMatrix = this->getLocalMatrix(); 605970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org } 615970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org return SkRef(fProxyShader.get()); 625970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org } 63e92c68f7d7398e8a510b7157a38747b23cb883aeskia.committer@gmail.com 645970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org SK_TO_STRING_OVERRIDE() 655970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkLocalMatrixShader) 66e92c68f7d7398e8a510b7157a38747b23cb883aeskia.committer@gmail.com 675970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.orgprotected: 689fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed#ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING 695970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org SkLocalMatrixShader(SkReadBuffer&); 709fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed#endif 715970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE; 725970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org virtual Context* onCreateContext(const ContextRec&, void*) const SK_OVERRIDE; 73e92c68f7d7398e8a510b7157a38747b23cb883aeskia.committer@gmail.com 745970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.orgprivate: 755970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org SkAutoTUnref<SkShader> fProxyShader; 76e92c68f7d7398e8a510b7157a38747b23cb883aeskia.committer@gmail.com 775970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org typedef SkShader INHERITED; 785970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org}; 795970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org 805970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org#endif 81