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

Side by Side Diff: src/gpu/gl/GrGLProgramEffects.h

Issue 367643004: Implement NVPR on GLES (Closed) Base URL: https://skia.googlesource.com/skia.git@02-path-program-fragment
Patch Set: rebase Created 6 years, 4 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
OLDNEW
1 /* 1 /*
2 * Copyright 2013 Google Inc. 2 * Copyright 2013 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 GrGLProgramEffects_DEFINED 8 #ifndef GrGLProgramEffects_DEFINED
9 #define GrGLProgramEffects_DEFINED 9 #define GrGLProgramEffects_DEFINED
10 10
11 #include "GrBackendEffectFactory.h" 11 #include "GrBackendEffectFactory.h"
12 #include "GrGLProgramDataManager.h" 12 #include "GrGLProgramDataManager.h"
13 #include "GrGpu.h"
13 #include "GrTexture.h" 14 #include "GrTexture.h"
14 #include "GrTextureAccess.h" 15 #include "GrTextureAccess.h"
15 16
16 class GrEffect; 17 class GrEffect;
17 class GrEffectStage; 18 class GrEffectStage;
18 class GrGLVertexProgramEffectsBuilder; 19 class GrGLVertexProgramEffectsBuilder;
19 class GrGLShaderBuilder; 20 class GrGLShaderBuilder;
20 class GrGLFullShaderBuilder; 21 class GrGLFullShaderBuilder;
21 class GrGLFragmentOnlyShaderBuilder; 22 class GrGLFragmentOnlyShaderBuilder;
22 23
23 /** 24 /**
24 * This class encapsulates an array of GrGLEffects and their supporting data (co ord transforms 25 * This class encapsulates an array of GrGLEffects and their supporting data (co ord transforms
25 * and textures). It is built with GrGLProgramEffectsBuilder, then used to manag e the necessary GL 26 * and textures). It is built with GrGLProgramEffectsBuilder, then used to manag e the necessary GL
26 * state and shader uniforms. 27 * state and shader uniforms.
27 */ 28 */
28 class GrGLProgramEffects : public SkRefCnt { 29 class GrGLProgramEffects : public SkRefCnt {
29 public: 30 public:
30 typedef GrGLProgramDataManager::UniformHandle UniformHandle; 31 typedef GrGLProgramDataManager::UniformHandle UniformHandle;
32 typedef GrGLProgramDataManager::VaryingHandle VaryingHandle;
31 33
32 /** 34 /**
33 * This class emits some of the code inserted into the shaders for an effect . The code it 35 * This class emits some of the code inserted into the shaders for an effect . The code it
34 * creates may be dependent on properties of the effect that the effect itse lf doesn't use 36 * creates may be dependent on properties of the effect that the effect itse lf doesn't use
35 * in its key (e.g. the pixel format of textures used). So this class insert s a meta-key for 37 * in its key (e.g. the pixel format of textures used). So this class insert s a meta-key for
36 * every effect using this function. It is also responsible for inserting th e effect's class ID 38 * every effect using this function. It is also responsible for inserting th e effect's class ID
37 * which must be different for every GrEffect subclass. It can fail if an ef fect uses too many 39 * which must be different for every GrEffect subclass. It can fail if an ef fect uses too many
38 * textures, attributes, etc for the space allotted in the meta-key. 40 * textures, attributes, etc for the space allotted in the meta-key.
39 */ 41 */
40 static bool GenEffectMetaKey(const GrDrawEffect&, const GrGLCaps&, GrEffectK eyBuilder*); 42 static bool GenEffectMetaKey(const GrDrawEffect&, const GrGLCaps&, GrEffectK eyBuilder*);
41 43
42 virtual ~GrGLProgramEffects(); 44 virtual ~GrGLProgramEffects();
43 45
44 /** 46 /**
45 * Assigns a texture unit to each sampler. It starts on *texUnitIdx and writ es the next 47 * Assigns a texture unit to each sampler. It starts on *texUnitIdx and writ es the next
46 * available unit to *texUnitIdx when it returns. 48 * available unit to *texUnitIdx when it returns.
47 */ 49 */
48 void initSamplers(const GrGLProgramDataManager&, int* texUnitIdx); 50 void initSamplers(const GrGLProgramDataManager&, int* texUnitIdx);
49 51
50 /** 52 /**
51 * Calls setData() on each effect, and sets their transformation matrices an d texture bindings. 53 * Calls setData() on each effect, and sets their transformation matrices an d texture bindings.
52 */ 54 */
53 virtual void setData(GrGpuGL*, 55 virtual void setData(GrGpuGL*,
56 GrGpu::DrawType,
54 const GrGLProgramDataManager&, 57 const GrGLProgramDataManager&,
55 const GrEffectStage* effectStages[]) = 0; 58 const GrEffectStage* effectStages[]) = 0;
56 59
57 /** 60 /**
58 * Passed to GrGLEffects so they can add transformed coordinates to their sh ader code. 61 * Passed to GrGLEffects so they can add transformed coordinates to their sh ader code.
59 */ 62 */
60 class TransformedCoords { 63 class TransformedCoords {
61 public: 64 public:
62 TransformedCoords(const SkString& name, GrSLType type) 65 TransformedCoords(const SkString& name, GrSLType type)
63 : fName(name), fType(type) { 66 : fName(name), fType(type) {
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 }; 158 };
156 159
157 //////////////////////////////////////////////////////////////////////////////// 160 ////////////////////////////////////////////////////////////////////////////////
158 161
159 /** 162 /**
160 * This is a GrGLProgramEffects implementation that does coord transforms with t he vertex shader. 163 * This is a GrGLProgramEffects implementation that does coord transforms with t he vertex shader.
161 */ 164 */
162 class GrGLVertexProgramEffects : public GrGLProgramEffects { 165 class GrGLVertexProgramEffects : public GrGLProgramEffects {
163 public: 166 public:
164 virtual void setData(GrGpuGL*, 167 virtual void setData(GrGpuGL*,
168 GrGpu::DrawType,
165 const GrGLProgramDataManager&, 169 const GrGLProgramDataManager&,
166 const GrEffectStage* effectStages[]) SK_OVERRIDE; 170 const GrEffectStage* effectStages[]) SK_OVERRIDE;
167 171
168 private: 172 private:
169 friend class GrGLVertexProgramEffectsBuilder; 173 friend class GrGLVertexProgramEffectsBuilder;
170 174
171 GrGLVertexProgramEffects(int reserveCount, bool explicitLocalCoords) 175 GrGLVertexProgramEffects(int reserveCount, bool explicitLocalCoords)
172 : INHERITED(reserveCount) 176 : INHERITED(reserveCount)
173 , fTransforms(reserveCount) 177 , fTransforms(reserveCount)
174 , fHasExplicitLocalCoords(explicitLocalCoords) { 178 , fHasExplicitLocalCoords(explicitLocalCoords) {
(...skipping 22 matching lines...) Expand all
197 * of the varyings in the VS and FS as well their types are appended to the 201 * of the varyings in the VS and FS as well their types are appended to the
198 * TransformedCoordsArray* object, which is in turn passed to the effect's e mitCode() function. 202 * TransformedCoordsArray* object, which is in turn passed to the effect's e mitCode() function.
199 */ 203 */
200 void emitTransforms(GrGLFullShaderBuilder*, 204 void emitTransforms(GrGLFullShaderBuilder*,
201 const GrDrawEffect&, 205 const GrDrawEffect&,
202 TransformedCoordsArray*); 206 TransformedCoordsArray*);
203 207
204 /** 208 /**
205 * Helper for setData(). Sets all the transform matrices for an effect. 209 * Helper for setData(). Sets all the transform matrices for an effect.
206 */ 210 */
207 void setTransformData(const GrGLProgramDataManager&, const GrDrawEffect&, in t effectIdx); 211 void setTransformData(GrGpuGL* gpu, const GrGLProgramDataManager&, const GrD rawEffect&, int effectIdx);
212 void setPathTransformData(GrGpuGL* gpu, const GrGLProgramDataManager&, const GrDrawEffect&,
213 int effectIdx);
208 214
209 struct Transform { 215 struct Transform {
210 Transform() { fCurrentValue = SkMatrix::InvalidMatrix(); } 216 Transform() { fCurrentValue = SkMatrix::InvalidMatrix(); }
211 UniformHandle fHandle; 217 UniformHandle fHandle;
212 SkMatrix fCurrentValue; 218 SkMatrix fCurrentValue;
213 }; 219 };
214 220
221 struct PathTransform {
222 PathTransform() { fCurrentValue = SkMatrix::InvalidMatrix(); }
223 VaryingHandle fHandle;
224 SkMatrix fCurrentValue;
225 GrSLType fType;
226 };
227
215 SkTArray<SkSTArray<2, Transform, true> > fTransforms; 228 SkTArray<SkSTArray<2, Transform, true> > fTransforms;
229 SkTArray<SkTArray<PathTransform, true> > fPathTransforms;
216 bool fHasExplicitLocalCoords; 230 bool fHasExplicitLocalCoords;
217 231
218 typedef GrGLProgramEffects INHERITED; 232 typedef GrGLProgramEffects INHERITED;
219 }; 233 };
220 234
221 /** 235 /**
222 * This class is used to construct a GrGLVertexProgramEffects* object. 236 * This class is used to construct a GrGLVertexProgramEffects* object.
223 */ 237 */
224 class GrGLVertexProgramEffectsBuilder : public GrGLProgramEffectsBuilder { 238 class GrGLVertexProgramEffectsBuilder : public GrGLProgramEffectsBuilder {
225 public: 239 public:
(...skipping 21 matching lines...) Expand all
247 261
248 //////////////////////////////////////////////////////////////////////////////// 262 ////////////////////////////////////////////////////////////////////////////////
249 263
250 /** 264 /**
251 * This is a GrGLProgramEffects implementation that does coord transforms with 265 * This is a GrGLProgramEffects implementation that does coord transforms with
252 * the the NV_path_rendering PathTexGen functionality. 266 * the the NV_path_rendering PathTexGen functionality.
253 */ 267 */
254 class GrGLPathTexGenProgramEffects : public GrGLProgramEffects { 268 class GrGLPathTexGenProgramEffects : public GrGLProgramEffects {
255 public: 269 public:
256 virtual void setData(GrGpuGL*, 270 virtual void setData(GrGpuGL*,
271 GrGpu::DrawType,
257 const GrGLProgramDataManager&, 272 const GrGLProgramDataManager&,
258 const GrEffectStage* effectStages[]) SK_OVERRIDE; 273 const GrEffectStage* effectStages[]) SK_OVERRIDE;
259 274
260 private: 275 private:
261 friend class GrGLPathTexGenProgramEffectsBuilder; 276 friend class GrGLPathTexGenProgramEffectsBuilder;
262 277
263 GrGLPathTexGenProgramEffects(int reserveCount) 278 GrGLPathTexGenProgramEffects(int reserveCount)
264 : INHERITED(reserveCount) 279 : INHERITED(reserveCount)
265 , fTransforms(reserveCount) { 280 , fTransforms(reserveCount) {
266 } 281 }
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
326 GrGLProgramEffects* finish() { return fProgramEffects.detach(); } 341 GrGLProgramEffects* finish() { return fProgramEffects.detach(); }
327 342
328 private: 343 private:
329 GrGLFragmentOnlyShaderBuilder* fBuilder; 344 GrGLFragmentOnlyShaderBuilder* fBuilder;
330 SkAutoTDelete<GrGLPathTexGenProgramEffects> fProgramEffects; 345 SkAutoTDelete<GrGLPathTexGenProgramEffects> fProgramEffects;
331 346
332 typedef GrGLProgramEffectsBuilder INHERITED; 347 typedef GrGLProgramEffectsBuilder INHERITED;
333 }; 348 };
334 349
335 #endif 350 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698