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

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

Issue 582963002: Solo gp (Closed) Base URL: https://skia.googlesource.com/skia.git@no_peb
Patch Set: rebase Created 6 years, 3 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/gpu/gl/GrGLProgramDesc.cpp ('k') | src/gpu/gl/GrGLProgramEffects.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 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 "GrBackendProcessorFactory.h"
12 #include "GrGLProgramDataManager.h" 12 #include "GrGLProgramDataManager.h"
13 #include "GrGpu.h" 13 #include "GrGpu.h"
14 #include "GrTexture.h" 14 #include "GrTexture.h"
15 #include "GrTextureAccess.h" 15 #include "GrTextureAccess.h"
16 16
17 class GrEffect; 17 class GrProcessor;
18 class GrEffectStage; 18 class GrProcessorStage;
19 class GrGLVertexProgramEffectsBuilder; 19 class GrGLVertexProgramEffectsBuilder;
20 class GrGLProgramBuilder; 20 class GrGLProgramBuilder;
21 class GrGLFullProgramBuilder; 21 class GrGLFullProgramBuilder;
22 class GrGLFragmentOnlyProgramBuilder; 22 class GrGLFragmentOnlyProgramBuilder;
23 23
24 /** 24 /**
25 * This class encapsulates an array of GrGLEffects and their supporting data (co ord transforms 25 * This class encapsulates an array of GrGLProcessors and their supporting data (coord transforms
26 * 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
27 * state and shader uniforms. 27 * state and shader uniforms.
28 */ 28 */
29 class GrGLProgramEffects : public SkRefCnt { 29 class GrGLProgramEffects : public SkRefCnt {
30 public: 30 public:
31 typedef GrGLProgramDataManager::UniformHandle UniformHandle; 31 typedef GrGLProgramDataManager::UniformHandle UniformHandle;
32 typedef GrGLProgramDataManager::VaryingHandle VaryingHandle; 32 typedef GrGLProgramDataManager::VaryingHandle VaryingHandle;
33
34 virtual ~GrGLProgramEffects(); 33 virtual ~GrGLProgramEffects();
35 34
36 /** 35 /**
37 * Assigns a texture unit to each sampler. It starts on *texUnitIdx and writ es the next 36 * Assigns a texture unit to each sampler. It starts on *texUnitIdx and writ es the next
38 * available unit to *texUnitIdx when it returns. 37 * available unit to *texUnitIdx when it returns.
39 */ 38 */
40 void initSamplers(const GrGLProgramDataManager&, int* texUnitIdx); 39 void initSamplers(const GrGLProgramDataManager&, int* texUnitIdx);
41 40
42 /** 41 /**
43 * Calls setData() on each effect, and sets their transformation matrices an d texture bindings. 42 * Calls setData() on each effect, and sets their transformation matrices an d texture bindings.
44 */ 43 */
45 virtual void setData(GrGpuGL*, 44 virtual void setData(GrGpuGL*,
46 GrGpu::DrawType, 45 GrGpu::DrawType,
47 const GrGLProgramDataManager&, 46 const GrGLProgramDataManager&,
48 const GrEffectStage* effectStages[]) = 0; 47 const GrGeometryStage* effectStages) {
48 SkFAIL("For geometry processor only");
49 }
50
51 virtual void setData(GrGpuGL*,
52 GrGpu::DrawType,
53 const GrGLProgramDataManager&,
54 const GrFragmentStage* effectStages[]) = 0;
49 55
50 protected: 56 protected:
51 GrGLProgramEffects(int reserveCount) 57 GrGLProgramEffects(int reserveCount)
52 : fGLEffects(reserveCount) 58 : fGLProcessors(reserveCount)
53 , fSamplers(reserveCount) { 59 , fSamplers(reserveCount) {
54 } 60 }
55 61
56 /** 62 /**
57 * Helper for setData(). Binds all the textures for an effect. 63 * Helper for setData(). Binds all the textures for an effect.
58 */ 64 */
59 void bindTextures(GrGpuGL*, const GrEffect&, int effectIdx); 65 void bindTextures(GrGpuGL*, const GrProcessor&, int effectIdx);
60 66
61 struct Sampler { 67 struct Sampler {
62 SkDEBUGCODE(Sampler() : fTextureUnit(-1) {}) 68 SkDEBUGCODE(Sampler() : fTextureUnit(-1) {})
63 UniformHandle fUniform; 69 UniformHandle fUniform;
64 int fTextureUnit; 70 int fTextureUnit;
65 }; 71 };
66 72
67 /* 73 /*
68 * Helpers for shader builders to build up program effects objects alongside shader code 74 * Helpers for shader builders to build up program effects objects alongside shader code
69 */ 75 */
70 void addEffect(GrGLEffect* effect) { fGLEffects.push_back(effect); } 76 void addEffect(GrGLProcessor* effect) { fGLProcessors.push_back(effect); }
71 SkTArray<Sampler, true>& addSamplers() { return fSamplers.push_back(); } 77 SkTArray<Sampler, true>& addSamplers() { return fSamplers.push_back(); }
72 78
73 SkTArray<GrGLEffect*> fGLEffects; 79 SkTArray<GrGLProcessor*> fGLProcessors;
74 SkTArray<SkSTArray<4, Sampler, true> > fSamplers; 80 SkTArray<SkSTArray<4, Sampler, true> > fSamplers;
75 81
76 private: 82 private:
77 friend class GrGLProgramBuilder; 83 friend class GrGLProgramBuilder;
78 friend class GrGLFullProgramBuilder; 84 friend class GrGLFullProgramBuilder;
79 friend class GrGLFragmentOnlyShaderBuilder; 85 friend class GrGLFragmentOnlyShaderBuilder;
80 86
81 typedef SkRefCnt INHERITED; 87 typedef SkRefCnt INHERITED;
82 }; 88 };
83 89
84 //////////////////////////////////////////////////////////////////////////////// 90 ////////////////////////////////////////////////////////////////////////////////
85 91
86 /** 92 /**
87 * This is a GrGLProgramEffects implementation that does coord transforms with t he vertex shader. 93 * This is a GrGLProgramEffects implementation that does coord transforms with t he vertex shader.
88 */ 94 */
89 class GrGLVertexProgramEffects : public GrGLProgramEffects { 95 class GrGLVertexProgramEffects : public GrGLProgramEffects {
90 public: 96 public:
91 virtual void setData(GrGpuGL*, 97 virtual void setData(GrGpuGL*,
92 GrGpu::DrawType, 98 GrGpu::DrawType,
93 const GrGLProgramDataManager&, 99 const GrGLProgramDataManager&,
94 const GrEffectStage* effectStages[]) SK_OVERRIDE; 100 const GrGeometryStage* effectStages) SK_OVERRIDE;
101
102 virtual void setData(GrGpuGL*,
103 GrGpu::DrawType,
104 const GrGLProgramDataManager&,
105 const GrFragmentStage* effectStages[]) SK_OVERRIDE;
95 106
96 private: 107 private:
97 GrGLVertexProgramEffects(int reserveCount, bool explicitLocalCoords) 108 GrGLVertexProgramEffects(int reserveCount, bool explicitLocalCoords)
98 : INHERITED(reserveCount) 109 : INHERITED(reserveCount)
99 , fTransforms(reserveCount) 110 , fTransforms(reserveCount)
100 , fHasExplicitLocalCoords(explicitLocalCoords) { 111 , fHasExplicitLocalCoords(explicitLocalCoords) {
101 } 112 }
102 113
103 struct Transform { 114 struct Transform {
104 Transform() { fCurrentValue = SkMatrix::InvalidMatrix(); } 115 Transform() { fCurrentValue = SkMatrix::InvalidMatrix(); }
(...skipping 11 matching lines...) Expand all
116 /* 127 /*
117 * These functions are used by the builders to build up program effects alon g side the shader 128 * These functions are used by the builders to build up program effects alon g side the shader
118 * code itself 129 * code itself
119 */ 130 */
120 SkSTArray<2, Transform, true>& addTransforms() { return fTransforms.push_bac k(); } 131 SkSTArray<2, Transform, true>& addTransforms() { return fTransforms.push_bac k(); }
121 SkTArray<PathTransform, true>& addPathTransforms() { return fPathTransforms. push_back(); } 132 SkTArray<PathTransform, true>& addPathTransforms() { return fPathTransforms. push_back(); }
122 133
123 /** 134 /**
124 * Helper for setData(). Sets all the transform matrices for an effect. 135 * Helper for setData(). Sets all the transform matrices for an effect.
125 */ 136 */
126 void setTransformData(GrGpuGL* gpu, const GrGLProgramDataManager&, const GrE ffectStage&, 137 void setDataInternal(GrGpuGL* gpu,
138 GrGpu::DrawType drawType,
139 const GrGLProgramDataManager& programDataManager,
140 const GrProcessorStage& effectStage,
141 int index);
142 void setTransformData(GrGpuGL* gpu, const GrGLProgramDataManager&, const GrP rocessorStage&,
127 int effectIdx); 143 int effectIdx);
128 void setPathTransformData(GrGpuGL* gpu, const GrGLProgramDataManager&, const GrEffectStage&, 144 void setPathTransformData(GrGpuGL* gpu, const GrGLProgramDataManager&,
129 int effectIdx); 145 const GrProcessorStage&, int effectIdx);
146
130 147
131 SkTArray<SkSTArray<2, Transform, true> > fTransforms; 148 SkTArray<SkSTArray<2, Transform, true> > fTransforms;
132 SkTArray<SkTArray<PathTransform, true> > fPathTransforms; 149 SkTArray<SkTArray<PathTransform, true> > fPathTransforms;
133 bool fHasExplicitLocalCoords; 150 bool fHasExplicitLocalCoords;
134 151
135 friend class GrGLFullProgramBuilder; 152 friend class GrGLFullProgramBuilder;
136 153
137 typedef GrGLProgramEffects INHERITED; 154 typedef GrGLProgramEffects INHERITED;
138 }; 155 };
139 156
140 //////////////////////////////////////////////////////////////////////////////// 157 ////////////////////////////////////////////////////////////////////////////////
141 158
142 /** 159 /**
143 * This is a GrGLProgramEffects implementation that does coord transforms with 160 * This is a GrGLProgramEffects implementation that does coord transforms with
144 * the the NV_path_rendering PathTexGen functionality. 161 * the the NV_path_rendering PathTexGen functionality.
145 */ 162 */
146 class GrGLPathTexGenProgramEffects : public GrGLProgramEffects { 163 class GrGLPathTexGenProgramEffects : public GrGLProgramEffects {
147 public: 164 public:
148 virtual void setData(GrGpuGL*, 165 virtual void setData(GrGpuGL*,
149 GrGpu::DrawType, 166 GrGpu::DrawType,
150 const GrGLProgramDataManager&, 167 const GrGLProgramDataManager&,
151 const GrEffectStage* effectStages[]) SK_OVERRIDE; 168 const GrFragmentStage* effectStages[]) SK_OVERRIDE;
152 169
153 private: 170 private:
154 GrGLPathTexGenProgramEffects(int reserveCount) 171 GrGLPathTexGenProgramEffects(int reserveCount)
155 : INHERITED(reserveCount) 172 : INHERITED(reserveCount)
156 , fTransforms(reserveCount) { 173 , fTransforms(reserveCount) {
157 } 174 }
158 175
159 /** 176 /**
160 * Helper for setData(). Sets the PathTexGen state for each transform in an effect. 177 * Helper for setData(). Sets the PathTexGen state for each transform in an effect.
161 */ 178 */
162 void setPathTexGenState(GrGpuGL*, const GrEffectStage&, int effectIdx); 179 void setPathTexGenState(GrGpuGL*, const GrProcessorStage&, int effectIdx);
163 180
164 struct Transforms { 181 struct Transforms {
165 Transforms(int texCoordIndex) 182 Transforms(int texCoordIndex)
166 : fTexCoordIndex(texCoordIndex) {} 183 : fTexCoordIndex(texCoordIndex) {}
167 int fTexCoordIndex; 184 int fTexCoordIndex;
168 }; 185 };
169 186
170 /* 187 /*
171 * Helper for fragment only shader builder to build up the program effects a longside the shader 188 * Helper for fragment only shader builder to build up the program effects a longside the shader
172 */ 189 */
173 void addTransforms(int coordIndex) { 190 void addTransforms(int coordIndex) {
174 fTransforms.push_back(Transforms(coordIndex)); 191 fTransforms.push_back(Transforms(coordIndex));
175 } 192 }
176 193
177 SkTArray<Transforms> fTransforms; 194 SkTArray<Transforms> fTransforms;
178 195
179 friend class GrGLFragmentOnlyProgramBuilder; 196 friend class GrGLFragmentOnlyProgramBuilder;
180 197
181 typedef GrGLProgramEffects INHERITED; 198 typedef GrGLProgramEffects INHERITED;
182 }; 199 };
183 200
184 #endif 201 #endif
OLDNEW
« no previous file with comments | « src/gpu/gl/GrGLProgramDesc.cpp ('k') | src/gpu/gl/GrGLProgramEffects.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698