Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(85)

Side by Side Diff: src/effects/SkArithmeticMode_gpu.h

Issue 837633005: Add Arithmetic mode xp. (Closed) Base URL: https://skia.googlesource.com/skia.git@arithGpuFile
Patch Set: Fix compile Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/effects/SkArithmeticMode.cpp ('k') | src/effects/SkArithmeticMode_gpu.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2015 Google Inc. 2 * Copyright 2015 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 #ifndef SkArithmeticMode_gpu_DEFINED 8 #ifndef SkArithmeticMode_gpu_DEFINED
9 #define SkArithmeticMode_gpu_DEFINED 9 #define SkArithmeticMode_gpu_DEFINED
10 10
11 #if SK_SUPPORT_GPU 11 #if SK_SUPPORT_GPU
12 12
13 #include "GrCoordTransform.h" 13 #include "GrCoordTransform.h"
14 #include "GrFragmentProcessor.h" 14 #include "GrFragmentProcessor.h"
15 #include "GrTextureAccess.h" 15 #include "GrTextureAccess.h"
16 #include "GrTypes.h"
17 #include "GrXferProcessor.h"
16 18
17 class GrInvariantOutput; 19 class GrInvariantOutput;
20 class GrProcOptInfo;
18 class GrTexture; 21 class GrTexture;
19 22
20 /////////////////////////////////////////////////////////////////////////////// 23 ///////////////////////////////////////////////////////////////////////////////
21 // Fragment Processor 24 // Fragment Processor
22 /////////////////////////////////////////////////////////////////////////////// 25 ///////////////////////////////////////////////////////////////////////////////
23 26
24 class GrGLArtithmeticFP; 27 class GrGLArtithmeticFP;
25 28
26 class GrArithmeticFP : public GrFragmentProcessor { 29 class GrArithmeticFP : public GrFragmentProcessor {
27 public: 30 public:
28 static GrFragmentProcessor* Create(float k1, float k2, float k3, float k4, b ool enforcePMColor, 31 static GrFragmentProcessor* Create(float k1, float k2, float k3, float k4, b ool enforcePMColor,
29 GrTexture* background) { 32 GrTexture* background) {
30 return SkNEW_ARGS(GrArithmeticFP, (k1, k2, k3, k4, enforcePMColor, backg round)); 33 return SkNEW_ARGS(GrArithmeticFP, (k1, k2, k3, k4, enforcePMColor, backg round));
31 } 34 }
32 35
33 ~GrArithmeticFP() SK_OVERRIDE {}; 36 ~GrArithmeticFP() SK_OVERRIDE {};
34 37
35 const char* name() const SK_OVERRIDE { return "Arithmetic"; } 38 const char* name() const SK_OVERRIDE { return "Arithmetic"; }
36 39
37 void getGLProcessorKey(const GrGLCaps& caps, GrProcessorKeyBuilder* b) const SK_OVERRIDE; 40 void getGLProcessorKey(const GrGLCaps& caps, GrProcessorKeyBuilder* b) const SK_OVERRIDE;
38 41
39 GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE; 42 GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
40 43
41 GrTexture* backgroundTexture() const { return fBackgroundAccess.getTexture() ; }
42
43 float k1() const { return fK1; } 44 float k1() const { return fK1; }
44 float k2() const { return fK2; } 45 float k2() const { return fK2; }
45 float k3() const { return fK3; } 46 float k3() const { return fK3; }
46 float k4() const { return fK4; } 47 float k4() const { return fK4; }
47 bool enforcePMColor() const { return fEnforcePMColor; } 48 bool enforcePMColor() const { return fEnforcePMColor; }
48 49
49 private: 50 private:
50 bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE; 51 bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE;
51 52
52 void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE; 53 void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
53 54
54 GrArithmeticFP(float k1, float k2, float k3, float k4, bool enforcePMColor, 55 GrArithmeticFP(float k1, float k2, float k3, float k4, bool enforcePMColor,
55 GrTexture* background); 56 GrTexture* background);
56 57
57 float fK1, fK2, fK3, fK4; 58 float fK1, fK2, fK3, fK4;
58 bool fEnforcePMColor; 59 bool fEnforcePMColor;
59 GrCoordTransform fBackgroundTransform; 60 GrCoordTransform fBackgroundTransform;
60 GrTextureAccess fBackgroundAccess; 61 GrTextureAccess fBackgroundAccess;
61 62
62 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; 63 GR_DECLARE_FRAGMENT_PROCESSOR_TEST;
63 typedef GrFragmentProcessor INHERITED; 64 typedef GrFragmentProcessor INHERITED;
64 }; 65 };
65 66
67 ///////////////////////////////////////////////////////////////////////////////
68 // Xfer Processor
69 ///////////////////////////////////////////////////////////////////////////////
70
71 class GrArithmeticXP : public GrXferProcessor {
72 public:
73 static GrXferProcessor* Create(float k1, float k2, float k3, float k4, bool enforcePMColor) {
74 return SkNEW_ARGS(GrArithmeticXP, (k1, k2, k3, k4, enforcePMColor));
75 }
76
77 ~GrArithmeticXP() SK_OVERRIDE {};
78
79 const char* name() const SK_OVERRIDE { return "Arithmetic"; }
80
81 void getGLProcessorKey(const GrGLCaps& caps, GrProcessorKeyBuilder* b) const SK_OVERRIDE;
82
83 GrGLXferProcessor* createGLInstance() const SK_OVERRIDE;
84
85 bool hasSecondaryOutput() const SK_OVERRIDE { return false; }
86
87 GrXferProcessor::OptFlags getOptimizations(const GrProcOptInfo& colorPOI,
88 const GrProcOptInfo& coveragePOI,
89 bool doesStencilWrite,
90 GrColor* overrideColor,
91 const GrDrawTargetCaps& caps) SK_ OVERRIDE;
92
93 void getBlendInfo(GrXferProcessor::BlendInfo* blendInfo) const SK_OVERRIDE {
94 blendInfo->fSrcBlend = kOne_GrBlendCoeff;
95 blendInfo->fDstBlend = kZero_GrBlendCoeff;
96 blendInfo->fBlendConstant = 0;
97 }
98
99 float k1() const { return fK1; }
100 float k2() const { return fK2; }
101 float k3() const { return fK3; }
102 float k4() const { return fK4; }
103 bool enforcePMColor() const { return fEnforcePMColor; }
104
105 private:
106 GrArithmeticXP(float k1, float k2, float k3, float k4, bool enforcePMColor);
107
108 bool onIsEqual(const GrXferProcessor& xpBase) const SK_OVERRIDE {
109 const GrArithmeticXP& xp = xpBase.cast<GrArithmeticXP>();
110 if (fK1 != xp.fK1 ||
111 fK2 != xp.fK2 ||
112 fK3 != xp.fK3 ||
113 fK4 != xp.fK4 ||
114 fEnforcePMColor != xp.fEnforcePMColor) {
115 return false;
116 }
117 return true;
118 }
119
120 float fK1, fK2, fK3, fK4;
121 bool fEnforcePMColor;
122
123 typedef GrXferProcessor INHERITED;
124 };
125
126 ///////////////////////////////////////////////////////////////////////////////
127
128 class GrArithmeticXPFactory : public GrXPFactory {
129 public:
130 static GrXPFactory* Create(float k1, float k2, float k3, float k4, bool enfo rcePMColor) {
131 return SkNEW_ARGS(GrArithmeticXPFactory, (k1, k2, k3, k4, enforcePMColor ));
132 }
133
134 GrXferProcessor* createXferProcessor(const GrProcOptInfo& colorPOI,
135 const GrProcOptInfo& coveragePOI) const SK_OVERRIDE {
136 return GrArithmeticXP::Create(fK1, fK2, fK3, fK4, fEnforcePMColor);
137 }
138
139 bool supportsRGBCoverage(GrColor knownColor, uint32_t knownColorFlags) const SK_OVERRIDE {
140 return true;
141 }
142
143 bool canApplyCoverage(const GrProcOptInfo& colorPOI,
144 const GrProcOptInfo& coveragePOI) const SK_OVERRIDE {
145 return true;
146 }
147
148 bool canTweakAlphaForCoverage() const SK_OVERRIDE {
149 return false;
150 }
151
152 void getInvariantOutput(const GrProcOptInfo& colorPOI, const GrProcOptInfo& coveragePOI,
153 GrXPFactory::InvariantOutput*) const SK_OVERRIDE;
154
155 bool willReadDst(const GrProcOptInfo& colorPOI,
156 const GrProcOptInfo& coveragePOI) const SK_OVERRIDE {
157 return true;
158 }
159
160 private:
161 GrArithmeticXPFactory(float k1, float k2, float k3, float k4, bool enforcePM Color);
162
163 bool onIsEqual(const GrXPFactory& xpfBase) const SK_OVERRIDE {
164 const GrArithmeticXPFactory& xpf = xpfBase.cast<GrArithmeticXPFactory>() ;
165 if (fK1 != xpf.fK1 ||
166 fK2 != xpf.fK2 ||
167 fK3 != xpf.fK3 ||
168 fK4 != xpf.fK4 ||
169 fEnforcePMColor != xpf.fEnforcePMColor) {
170 return false;
171 }
172 return true;
173 }
174
175 GR_DECLARE_XP_FACTORY_TEST;
176
177 float fK1, fK2, fK3, fK4;
178 bool fEnforcePMColor;
179
180 typedef GrXPFactory INHERITED;
181 };
182
66 #endif 183 #endif
67 #endif 184 #endif
OLDNEW
« no previous file with comments | « src/effects/SkArithmeticMode.cpp ('k') | src/effects/SkArithmeticMode_gpu.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698