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

Side by Side Diff: include/gpu/GrPaint.h

Issue 2041113004: sk_sp for gpu. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Reserve correctly. Created 4 years, 6 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 | « include/gpu/GrFragmentProcessor.h ('k') | include/gpu/GrProcessorUnitTest.h » ('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 /* 2 /*
3 * Copyright 2011 Google Inc. 3 * Copyright 2011 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 9
10 #ifndef GrPaint_DEFINED 10 #ifndef GrPaint_DEFINED
11 #define GrPaint_DEFINED 11 #define GrPaint_DEFINED
12 12
13 #include "GrColor.h" 13 #include "GrColor.h"
14 #include "GrXferProcessor.h" 14 #include "GrXferProcessor.h"
15 #include "effects/GrPorterDuffXferProcessor.h" 15 #include "effects/GrPorterDuffXferProcessor.h"
16 #include "GrFragmentProcessor.h" 16 #include "GrFragmentProcessor.h"
17 17
18 #include "SkRefCnt.h"
18 #include "SkRegion.h" 19 #include "SkRegion.h"
19 #include "SkXfermode.h" 20 #include "SkXfermode.h"
20 21
21 /** 22 /**
22 * The paint describes how color and coverage are computed at each pixel by GrCo ntext draw 23 * The paint describes how color and coverage are computed at each pixel by GrCo ntext draw
23 * functions and the how color is blended with the destination pixel. 24 * functions and the how color is blended with the destination pixel.
24 * 25 *
25 * The paint allows installation of custom color and coverage stages. New types of stages are 26 * The paint allows installation of custom color and coverage stages. New types of stages are
26 * created by subclassing GrProcessor. 27 * created by subclassing GrProcessor.
27 * 28 *
28 * The primitive color computation starts with the color specified by setColor() . This color is the 29 * The primitive color computation starts with the color specified by setColor() . This color is the
29 * input to the first color stage. Each color stage feeds its output to the next color stage. 30 * input to the first color stage. Each color stage feeds its output to the next color stage.
30 * 31 *
31 * Fractional pixel coverage follows a similar flow. The coverage is initially t he value specified 32 * Fractional pixel coverage follows a similar flow. The coverage is initially t he value specified
32 * by setCoverage(). This is input to the first coverage stage. Coverage stages are chained 33 * by setCoverage(). This is input to the first coverage stage. Coverage stages are chained
33 * together in the same manner as color stages. The output of the last stage is modulated by any 34 * together in the same manner as color stages. The output of the last stage is modulated by any
34 * fractional coverage produced by anti-aliasing. This last step produces the fi nal coverage, C. 35 * fractional coverage produced by anti-aliasing. This last step produces the fi nal coverage, C.
35 * 36 *
36 * setXPFactory is used to control blending between the output color and dest. I t also implements 37 * setXPFactory is used to control blending between the output color and dest. I t also implements
37 * the application of fractional coverage from the coverage pipeline. 38 * the application of fractional coverage from the coverage pipeline.
38 */ 39 */
39 class GrPaint { 40 class GrPaint {
40 public: 41 public:
41 GrPaint(); 42 GrPaint();
42 43
43 GrPaint(const GrPaint& paint) { *this = paint; } 44 GrPaint(const GrPaint& paint) { *this = paint; }
44 45
45 ~GrPaint() { this->resetFragmentProcessors(); } 46 ~GrPaint() { }
46 47
47 /** 48 /**
48 * The initial color of the drawn primitive. Defaults to solid white. 49 * The initial color of the drawn primitive. Defaults to solid white.
49 */ 50 */
50 void setColor(GrColor color) { fColor = color; } 51 void setColor(GrColor color) { fColor = color; }
51 GrColor getColor() const { return fColor; } 52 GrColor getColor() const { return fColor; }
52 53
53 /** 54 /**
54 * Should primitives be anti-aliased or not. Defaults to false. 55 * Should primitives be anti-aliased or not. Defaults to false.
55 */ 56 */
(...skipping 16 matching lines...) Expand all
72 73
73 /** 74 /**
74 * Should rendering be gamma-correct, end-to-end. Causes sRGB render targets to behave 75 * Should rendering be gamma-correct, end-to-end. Causes sRGB render targets to behave
75 * as such (with linear blending), and sRGB inputs to be filtered and decode d correctly. 76 * as such (with linear blending), and sRGB inputs to be filtered and decode d correctly.
76 */ 77 */
77 void setGammaCorrect(bool gammaCorrect) { 78 void setGammaCorrect(bool gammaCorrect) {
78 setDisableOutputConversionToSRGB(!gammaCorrect); 79 setDisableOutputConversionToSRGB(!gammaCorrect);
79 setAllowSRGBInputs(gammaCorrect); 80 setAllowSRGBInputs(gammaCorrect);
80 } 81 }
81 82
82 const GrXPFactory* setXPFactory(const GrXPFactory* xpFactory) { 83 void setXPFactory(sk_sp<GrXPFactory> xpFactory) {
83 fXPFactory.reset(SkSafeRef(xpFactory)); 84 fXPFactory = std::move(xpFactory);
84 return xpFactory;
85 } 85 }
86 86
87 void setPorterDuffXPFactory(SkXfermode::Mode mode) { 87 void setPorterDuffXPFactory(SkXfermode::Mode mode) {
88 fXPFactory.reset(GrPorterDuffXPFactory::Create(mode)); 88 fXPFactory = GrPorterDuffXPFactory::Make(mode);
89 } 89 }
90 90
91 void setCoverageSetOpXPFactory(SkRegion::Op regionOp, bool invertCoverage = false); 91 void setCoverageSetOpXPFactory(SkRegion::Op regionOp, bool invertCoverage = false);
92 92
93 /** 93 /**
94 * Appends an additional color processor to the color computation. 94 * Appends an additional color processor to the color computation.
95 */ 95 */
96 const GrFragmentProcessor* addColorFragmentProcessor(const GrFragmentProcess or* fp) { 96 void addColorFragmentProcessor(sk_sp<GrFragmentProcessor> fp) {
97 SkASSERT(fp); 97 SkASSERT(fp);
98 fColorFragmentProcessors.push_back(SkRef(fp)); 98 fColorFragmentProcessors.push_back(std::move(fp));
99 return fp;
100 } 99 }
101 100
102 /** 101 /**
103 * Appends an additional coverage processor to the coverage computation. 102 * Appends an additional coverage processor to the coverage computation.
104 */ 103 */
105 const GrFragmentProcessor* addCoverageFragmentProcessor(const GrFragmentProc essor* fp) { 104 void addCoverageFragmentProcessor(sk_sp<GrFragmentProcessor> fp) {
106 SkASSERT(fp); 105 SkASSERT(fp);
107 fCoverageFragmentProcessors.push_back(SkRef(fp)); 106 fCoverageFragmentProcessors.push_back(std::move(fp));
108 return fp;
109 } 107 }
110 108
111 /** 109 /**
112 * Helpers for adding color or coverage effects that sample a texture. The m atrix is applied 110 * Helpers for adding color or coverage effects that sample a texture. The m atrix is applied
113 * to the src space position to compute texture coordinates. 111 * to the src space position to compute texture coordinates.
114 */ 112 */
115 void addColorTextureProcessor(GrTexture*, const SkMatrix&); 113 void addColorTextureProcessor(GrTexture*, const SkMatrix&);
116 void addCoverageTextureProcessor(GrTexture*, const SkMatrix&); 114 void addCoverageTextureProcessor(GrTexture*, const SkMatrix&);
117 void addColorTextureProcessor(GrTexture*, const SkMatrix&, const GrTexturePa rams&); 115 void addColorTextureProcessor(GrTexture*, const SkMatrix&, const GrTexturePa rams&);
118 void addCoverageTextureProcessor(GrTexture*, const SkMatrix&, const GrTextur eParams&); 116 void addCoverageTextureProcessor(GrTexture*, const SkMatrix&, const GrTextur eParams&);
119 117
120 int numColorFragmentProcessors() const { return fColorFragmentProcessors.cou nt(); } 118 int numColorFragmentProcessors() const { return fColorFragmentProcessors.cou nt(); }
121 int numCoverageFragmentProcessors() const { return fCoverageFragmentProcesso rs.count(); } 119 int numCoverageFragmentProcessors() const { return fCoverageFragmentProcesso rs.count(); }
122 int numTotalFragmentProcessors() const { return this->numColorFragmentProces sors() + 120 int numTotalFragmentProcessors() const { return this->numColorFragmentProces sors() +
123 this->numCoverageFragmentProcessor s(); } 121 this->numCoverageFragmentProcessor s(); }
124 122
125 const GrXPFactory* getXPFactory() const { 123 GrXPFactory* getXPFactory() const {
126 return fXPFactory; 124 return fXPFactory.get();
127 } 125 }
128 126
129 const GrFragmentProcessor* getColorFragmentProcessor(int i) const { 127 GrFragmentProcessor* getColorFragmentProcessor(int i) const {
130 return fColorFragmentProcessors[i]; 128 return fColorFragmentProcessors[i].get();
131 } 129 }
132 const GrFragmentProcessor* getCoverageFragmentProcessor(int i) const { 130 GrFragmentProcessor* getCoverageFragmentProcessor(int i) const {
133 return fCoverageFragmentProcessors[i]; 131 return fCoverageFragmentProcessors[i].get();
134 } 132 }
135 133
136 GrPaint& operator=(const GrPaint& paint) { 134 GrPaint& operator=(const GrPaint& paint) {
137 fAntiAlias = paint.fAntiAlias; 135 fAntiAlias = paint.fAntiAlias;
138 fDisableOutputConversionToSRGB = paint.fDisableOutputConversionToSRGB; 136 fDisableOutputConversionToSRGB = paint.fDisableOutputConversionToSRGB;
139 fAllowSRGBInputs = paint.fAllowSRGBInputs; 137 fAllowSRGBInputs = paint.fAllowSRGBInputs;
140 138
141 fColor = paint.fColor; 139 fColor = paint.fColor;
142 this->resetFragmentProcessors();
143 fColorFragmentProcessors = paint.fColorFragmentProcessors; 140 fColorFragmentProcessors = paint.fColorFragmentProcessors;
144 fCoverageFragmentProcessors = paint.fCoverageFragmentProcessors; 141 fCoverageFragmentProcessors = paint.fCoverageFragmentProcessors;
145 for (int i = 0; i < fColorFragmentProcessors.count(); ++i) {
146 fColorFragmentProcessors[i]->ref();
147 }
148 for (int i = 0; i < fCoverageFragmentProcessors.count(); ++i) {
149 fCoverageFragmentProcessors[i]->ref();
150 }
151 142
152 fXPFactory.reset(SkSafeRef(paint.getXPFactory())); 143 fXPFactory = paint.fXPFactory;
153 144
154 return *this; 145 return *this;
155 } 146 }
156 147
157 /** 148 /**
158 * Returns true if the paint's output color will be constant after blending. If the result is 149 * Returns true if the paint's output color will be constant after blending. If the result is
159 * true, constantColor will be updated to contain the constant color. Note t hat we can conflate 150 * true, constantColor will be updated to contain the constant color. Note t hat we can conflate
160 * coverage and color, so the actual values written to pixels with partial c overage may still 151 * coverage and color, so the actual values written to pixels with partial c overage may still
161 * not seem constant, even if this function returns true. 152 * not seem constant, even if this function returns true.
162 */ 153 */
163 bool isConstantBlendedColor(GrColor* constantColor) const; 154 bool isConstantBlendedColor(GrColor* constantColor) const;
164 155
165 private: 156 private:
166 void resetFragmentProcessors() { 157 mutable sk_sp<GrXPFactory> fXPFactory;
167 for (int i = 0; i < fColorFragmentProcessors.count(); ++i) { 158 SkSTArray<4, sk_sp<GrFragmentProcessor>> fColorFragmentProcessors;
168 fColorFragmentProcessors[i]->unref(); 159 SkSTArray<2, sk_sp<GrFragmentProcessor>> fCoverageFragmentProcessors;
169 }
170 for (int i = 0; i < fCoverageFragmentProcessors.count(); ++i) {
171 fCoverageFragmentProcessors[i]->unref();
172 }
173 fColorFragmentProcessors.reset();
174 fCoverageFragmentProcessors.reset();
175 }
176 160
177 mutable SkAutoTUnref<const GrXPFactory> fXPFactory; 161 bool fAntiAlias;
178 SkSTArray<4, const GrFragmentProcessor*, true> fColorFragmentProcessors; 162 bool fDisableOutputConversionToSRGB;
179 SkSTArray<2, const GrFragmentProcessor*, true> fCoverageFragmentProcessors; 163 bool fAllowSRGBInputs;
180 164
181 bool fAntiAlias; 165 GrColor fColor;
182 bool fDisableOutputConversionToSR GB;
183 bool fAllowSRGBInputs;
184
185 GrColor fColor;
186 }; 166 };
187 167
188 #endif 168 #endif
OLDNEW
« no previous file with comments | « include/gpu/GrFragmentProcessor.h ('k') | include/gpu/GrProcessorUnitTest.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698