1f7142e71d7c0a7d8406679e207ff766085499d2erobertphillips/* 2f7142e71d7c0a7d8406679e207ff766085499d2erobertphillips * Copyright 2016 Google Inc. 3f7142e71d7c0a7d8406679e207ff766085499d2erobertphillips * 4f7142e71d7c0a7d8406679e207ff766085499d2erobertphillips * Use of this source code is governed by a BSD-style license that can be 5f7142e71d7c0a7d8406679e207ff766085499d2erobertphillips * found in the LICENSE file. 6f7142e71d7c0a7d8406679e207ff766085499d2erobertphillips */ 7f7142e71d7c0a7d8406679e207ff766085499d2erobertphillips 8f7142e71d7c0a7d8406679e207ff766085499d2erobertphillips#ifndef GrAlphaThresholdFragmentProcessor_DEFINED 9f7142e71d7c0a7d8406679e207ff766085499d2erobertphillips#define GrAlphaThresholdFragmentProcessor_DEFINED 10f7142e71d7c0a7d8406679e207ff766085499d2erobertphillips 11f7142e71d7c0a7d8406679e207ff766085499d2erobertphillips#include "SkTypes.h" 12f7142e71d7c0a7d8406679e207ff766085499d2erobertphillips 13f7142e71d7c0a7d8406679e207ff766085499d2erobertphillips#if SK_SUPPORT_GPU 14f7142e71d7c0a7d8406679e207ff766085499d2erobertphillips 156fb592e6afb0061c9c0af15ddf599e2903f508f1Brian Osman#include "GrColorSpaceXform.h" 16f7142e71d7c0a7d8406679e207ff766085499d2erobertphillips#include "GrCoordTransform.h" 17f7142e71d7c0a7d8406679e207ff766085499d2erobertphillips#include "GrFragmentProcessor.h" 18f7142e71d7c0a7d8406679e207ff766085499d2erobertphillips#include "GrProcessorUnitTest.h" 19f7142e71d7c0a7d8406679e207ff766085499d2erobertphillips 20f7142e71d7c0a7d8406679e207ff766085499d2erobertphillipsclass GrAlphaThresholdFragmentProcessor : public GrFragmentProcessor { 21f7142e71d7c0a7d8406679e207ff766085499d2erobertphillips 22f7142e71d7c0a7d8406679e207ff766085499d2erobertphillipspublic: 23296b1ccf9b8e9c8b945645efcbaa9c71c7135f58Robert Phillips static sk_sp<GrFragmentProcessor> Make(GrResourceProvider* resourceProvider, 248e1c4e672553ecae2745168514240705f3516773Robert Phillips sk_sp<GrTextureProxy> proxy, 258e1c4e672553ecae2745168514240705f3516773Robert Phillips sk_sp<GrColorSpaceXform> colorSpaceXform, 26dbc8eeb592123619d9c5bb4b6c6225b9fd45d03bRobert Phillips sk_sp<GrTextureProxy> maskProxy, 278e1c4e672553ecae2745168514240705f3516773Robert Phillips float innerThreshold, 288e1c4e672553ecae2745168514240705f3516773Robert Phillips float outerThreshold, 298e1c4e672553ecae2745168514240705f3516773Robert Phillips const SkIRect& bounds) { 308e1c4e672553ecae2745168514240705f3516773Robert Phillips return sk_sp<GrFragmentProcessor>(new GrAlphaThresholdFragmentProcessor( 31296b1ccf9b8e9c8b945645efcbaa9c71c7135f58Robert Phillips resourceProvider, 328e1c4e672553ecae2745168514240705f3516773Robert Phillips std::move(proxy), 338e1c4e672553ecae2745168514240705f3516773Robert Phillips std::move(colorSpaceXform), 34dbc8eeb592123619d9c5bb4b6c6225b9fd45d03bRobert Phillips std::move(maskProxy), 358e1c4e672553ecae2745168514240705f3516773Robert Phillips innerThreshold, outerThreshold, 368e1c4e672553ecae2745168514240705f3516773Robert Phillips bounds)); 378e1c4e672553ecae2745168514240705f3516773Robert Phillips } 38f7142e71d7c0a7d8406679e207ff766085499d2erobertphillips 39f7142e71d7c0a7d8406679e207ff766085499d2erobertphillips const char* name() const override { return "Alpha Threshold"; } 40f7142e71d7c0a7d8406679e207ff766085499d2erobertphillips 41f7142e71d7c0a7d8406679e207ff766085499d2erobertphillips float innerThreshold() const { return fInnerThreshold; } 42f7142e71d7c0a7d8406679e207ff766085499d2erobertphillips float outerThreshold() const { return fOuterThreshold; } 43f7142e71d7c0a7d8406679e207ff766085499d2erobertphillips 446fb592e6afb0061c9c0af15ddf599e2903f508f1Brian Osman GrColorSpaceXform* colorSpaceXform() const { return fColorSpaceXform.get(); } 456fb592e6afb0061c9c0af15ddf599e2903f508f1Brian Osman 46f7142e71d7c0a7d8406679e207ff766085499d2erobertphillipsprivate: 47587e08f361ee3e775a6bbc6dca761dbba82e422cBrian Salomon static OptimizationFlags OptFlags(float outerThreshold); 48587e08f361ee3e775a6bbc6dca761dbba82e422cBrian Salomon 49296b1ccf9b8e9c8b945645efcbaa9c71c7135f58Robert Phillips GrAlphaThresholdFragmentProcessor(GrResourceProvider*, 508e1c4e672553ecae2745168514240705f3516773Robert Phillips sk_sp<GrTextureProxy> proxy, 518e1c4e672553ecae2745168514240705f3516773Robert Phillips sk_sp<GrColorSpaceXform> colorSpaceXform, 52dbc8eeb592123619d9c5bb4b6c6225b9fd45d03bRobert Phillips sk_sp<GrTextureProxy> maskProxy, 538e1c4e672553ecae2745168514240705f3516773Robert Phillips float innerThreshold, 548e1c4e672553ecae2745168514240705f3516773Robert Phillips float outerThreshold, 558e1c4e672553ecae2745168514240705f3516773Robert Phillips const SkIRect& bounds); 568e1c4e672553ecae2745168514240705f3516773Robert Phillips 57f7142e71d7c0a7d8406679e207ff766085499d2erobertphillips GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; 58f7142e71d7c0a7d8406679e207ff766085499d2erobertphillips 5994efbf51f5a88d9e8aa961d3fbe38c5e335d6108Brian Salomon void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override; 60f7142e71d7c0a7d8406679e207ff766085499d2erobertphillips 61f7142e71d7c0a7d8406679e207ff766085499d2erobertphillips bool onIsEqual(const GrFragmentProcessor&) const override; 62f7142e71d7c0a7d8406679e207ff766085499d2erobertphillips 63f7142e71d7c0a7d8406679e207ff766085499d2erobertphillips GR_DECLARE_FRAGMENT_PROCESSOR_TEST; 64f7142e71d7c0a7d8406679e207ff766085499d2erobertphillips 65f7142e71d7c0a7d8406679e207ff766085499d2erobertphillips float fInnerThreshold; 66f7142e71d7c0a7d8406679e207ff766085499d2erobertphillips float fOuterThreshold; 67f7142e71d7c0a7d8406679e207ff766085499d2erobertphillips GrCoordTransform fImageCoordTransform; 680bbecb21ab82b3d742c491780bcc2e74be03efedBrian Salomon TextureSampler fImageTextureSampler; 696fb592e6afb0061c9c0af15ddf599e2903f508f1Brian Osman // Color space transform is for the image (not the mask) 706fb592e6afb0061c9c0af15ddf599e2903f508f1Brian Osman sk_sp<GrColorSpaceXform> fColorSpaceXform; 71f7142e71d7c0a7d8406679e207ff766085499d2erobertphillips GrCoordTransform fMaskCoordTransform; 720bbecb21ab82b3d742c491780bcc2e74be03efedBrian Salomon TextureSampler fMaskTextureSampler; 73f7142e71d7c0a7d8406679e207ff766085499d2erobertphillips 74f7142e71d7c0a7d8406679e207ff766085499d2erobertphillips typedef GrFragmentProcessor INHERITED; 75f7142e71d7c0a7d8406679e207ff766085499d2erobertphillips}; 76f7142e71d7c0a7d8406679e207ff766085499d2erobertphillips 77f7142e71d7c0a7d8406679e207ff766085499d2erobertphillips#endif 78f7142e71d7c0a7d8406679e207ff766085499d2erobertphillips#endif 79