OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2012 Google Inc. | 2 * Copyright 2012 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 GrGLShaderBuilder_DEFINED | 8 #ifndef GrGLShaderBuilder_DEFINED |
9 #define GrGLShaderBuilder_DEFINED | 9 #define GrGLShaderBuilder_DEFINED |
10 | 10 |
11 #include "GrAllocator.h" | 11 #include "GrAllocator.h" |
12 #include "GrBackendEffectFactory.h" | 12 #include "GrBackendEffectFactory.h" |
13 #include "GrColor.h" | 13 #include "GrColor.h" |
14 #include "GrEffect.h" | 14 #include "GrEffect.h" |
15 #include "SkTypes.h" | 15 #include "SkTypes.h" |
| 16 #include "gl/GrGLCoordTransform.h" |
16 #include "gl/GrGLSL.h" | 17 #include "gl/GrGLSL.h" |
17 #include "gl/GrGLUniformManager.h" | 18 #include "gl/GrGLUniformManager.h" |
18 | 19 |
19 #include <stdarg.h> | 20 #include <stdarg.h> |
20 | 21 |
21 class GrGLContextInfo; | 22 class GrGLContextInfo; |
22 class GrEffectStage; | 23 class GrEffectStage; |
23 class GrGLProgramDesc; | 24 class GrGLProgramDesc; |
24 | 25 |
25 /** | 26 /** |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
89 idx); | 90 idx); |
90 } | 91 } |
91 | 92 |
92 uint32_t fConfigComponentMask; | 93 uint32_t fConfigComponentMask; |
93 char fSwizzle[5]; | 94 char fSwizzle[5]; |
94 GrGLUniformManager::UniformHandle fSamplerUniform; | 95 GrGLUniformManager::UniformHandle fSamplerUniform; |
95 | 96 |
96 friend class GrGLShaderBuilder; // to call init(). | 97 friend class GrGLShaderBuilder; // to call init(). |
97 }; | 98 }; |
98 | 99 |
| 100 typedef SkTArray<GrGLCoordTransform::TransformedCoords> TransformedCoordsArr
ay; |
99 typedef SkTArray<TextureSampler> TextureSamplerArray; | 101 typedef SkTArray<TextureSampler> TextureSamplerArray; |
100 typedef GrTAllocator<GrGLShaderVar> VarArray; | 102 typedef GrTAllocator<GrGLShaderVar> VarArray; |
| 103 typedef GrBackendEffectFactory::EffectKey EffectKey; |
101 | 104 |
102 enum ShaderVisibility { | 105 enum ShaderVisibility { |
103 kVertex_Visibility = 0x1, | 106 kVertex_Visibility = 0x1, |
104 kGeometry_Visibility = 0x2, | 107 kGeometry_Visibility = 0x2, |
105 kFragment_Visibility = 0x4, | 108 kFragment_Visibility = 0x4, |
106 }; | 109 }; |
107 | 110 |
108 GrGLShaderBuilder(GrGpuGL*, | 111 GrGLShaderBuilder(GrGpuGL*, |
109 GrGLUniformManager&, | 112 GrGLUniformManager&, |
110 const GrGLProgramDesc&, | 113 const GrGLProgramDesc&, |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
168 const GrGLShaderVar* args, | 171 const GrGLShaderVar* args, |
169 const char* body, | 172 const char* body, |
170 SkString* outName); | 173 SkString* outName); |
171 | 174 |
172 /** Add input/output variable declarations (i.e. 'varying') to the fragment
shader. */ | 175 /** Add input/output variable declarations (i.e. 'varying') to the fragment
shader. */ |
173 GrGLShaderVar& fsInputAppend() { return fFSInputs.push_back(); } | 176 GrGLShaderVar& fsInputAppend() { return fFSInputs.push_back(); } |
174 | 177 |
175 /** Generates a EffectKey for the shader code based on the texture access pa
rameters and the | 178 /** Generates a EffectKey for the shader code based on the texture access pa
rameters and the |
176 capabilities of the GL context. This is useful for keying the shader pr
ograms that may | 179 capabilities of the GL context. This is useful for keying the shader pr
ograms that may |
177 have multiple representations, based on the type/format of textures used
. */ | 180 have multiple representations, based on the type/format of textures used
. */ |
178 static GrBackendEffectFactory::EffectKey KeyForTextureAccess(const GrTexture
Access&, | 181 static EffectKey KeyForTextureAccess(const GrTextureAccess&, const GrGLCaps&
); |
179 const GrGLCaps&
); | |
180 | 182 |
181 typedef uint8_t DstReadKey; | 183 typedef uint8_t DstReadKey; |
182 typedef uint8_t FragPosKey; | 184 typedef uint8_t FragPosKey; |
183 | 185 |
184 /** Returns a key for adding code to read the copy-of-dst color in service
of effects that | 186 /** Returns a key for adding code to read the copy-of-dst color in service
of effects that |
185 require reading the dst. It must not return 0 because 0 indicates that
there is no dst | 187 require reading the dst. It must not return 0 because 0 indicates that
there is no dst |
186 copy read at all (in which case this function should not be called). */ | 188 copy read at all (in which case this function should not be called). */ |
187 static DstReadKey KeyForDstRead(const GrTexture* dstCopy, const GrGLCaps&); | 189 static DstReadKey KeyForDstRead(const GrTexture* dstCopy, const GrGLCaps&); |
188 | 190 |
189 /** Returns a key for reading the fragment location. This should only be cal
led if there is an | 191 /** Returns a key for reading the fragment location. This should only be cal
led if there is an |
(...skipping 28 matching lines...) Expand all Loading... |
218 return fUniformManager.getBuilderUniform(fUniforms, u).fVariable; | 220 return fUniformManager.getBuilderUniform(fUniforms, u).fVariable; |
219 } | 221 } |
220 | 222 |
221 /** | 223 /** |
222 * Shortcut for getUniformVariable(u).c_str() | 224 * Shortcut for getUniformVariable(u).c_str() |
223 */ | 225 */ |
224 const char* getUniformCStr(GrGLUniformManager::UniformHandle u) const { | 226 const char* getUniformCStr(GrGLUniformManager::UniformHandle u) const { |
225 return this->getUniformVariable(u).c_str(); | 227 return this->getUniformVariable(u).c_str(); |
226 } | 228 } |
227 | 229 |
| 230 /** |
| 231 * This returns a variable name to access the 2D, perspective correct versio
n of the coords in |
| 232 * the fragment shader. If the coordinates at index are 3-dimensional, it im
mediately emits a |
| 233 * perspective divide into the fragment shader (xy / z) to convert them to 2
D. |
| 234 */ |
| 235 SkString ensureFSCoords2D(const TransformedCoordsArray&, int index); |
| 236 |
228 /** Returns a variable name that represents the position of the fragment in
the FS. The position | 237 /** Returns a variable name that represents the position of the fragment in
the FS. The position |
229 is in device space (e.g. 0,0 is the top left and pixel centers are at ha
lf-integers). */ | 238 is in device space (e.g. 0,0 is the top left and pixel centers are at ha
lf-integers). */ |
230 const char* fragmentPosition(); | 239 const char* fragmentPosition(); |
231 | 240 |
232 /** Returns the color of the destination pixel. This may be NULL if no effec
t advertised | 241 /** Returns the color of the destination pixel. This may be NULL if no effec
t advertised |
233 that it will read the destination. */ | 242 that it will read the destination. */ |
234 const char* dstColor(); | 243 const char* dstColor(); |
235 | 244 |
236 /** | 245 /** |
237 * Interfaces used by GrGLProgram. | 246 * Interfaces used by GrGLProgram. |
(...skipping 10 matching lines...) Expand all Loading... |
248 * generated from effectStages[i]. An entry in effectStages can be NULL, in
which case it is | 257 * generated from effectStages[i]. An entry in effectStages can be NULL, in
which case it is |
249 * skipped. Moreover, if the corresponding key is GrGLEffect::NoEffectKey th
en it is skipped. | 258 * skipped. Moreover, if the corresponding key is GrGLEffect::NoEffectKey th
en it is skipped. |
250 * inOutFSColor specifies the input color to the first stage and is updated
to be the | 259 * inOutFSColor specifies the input color to the first stage and is updated
to be the |
251 * output color of the last stage. fsInOutColorKnownValue specifies whether
the input color | 260 * output color of the last stage. fsInOutColorKnownValue specifies whether
the input color |
252 * has a known constant value and is updated to refer to the status of the o
utput color. | 261 * has a known constant value and is updated to refer to the status of the o
utput color. |
253 * The handles to texture samplers for effectStage[i] are added to effectSam
plerHandles[i]. The | 262 * The handles to texture samplers for effectStage[i] are added to effectSam
plerHandles[i]. The |
254 * glEffects array is updated to contain the GrGLEffect generated for each e
ntry in | 263 * glEffects array is updated to contain the GrGLEffect generated for each e
ntry in |
255 * effectStages. | 264 * effectStages. |
256 */ | 265 */ |
257 void emitEffects(const GrEffectStage* effectStages[], | 266 void emitEffects(const GrEffectStage* effectStages[], |
258 const GrBackendEffectFactory::EffectKey effectKeys[], | 267 const EffectKey effectKeys[], |
259 int effectCnt, | 268 int effectCnt, |
260 SkString* inOutFSColor, | 269 SkString* inOutFSColor, |
261 GrSLConstantVec* fsInOutColorKnownValue, | 270 GrSLConstantVec* fsInOutColorKnownValue, |
| 271 SkTArray<GrGLCoordTransform, false>* effectCoordTransformAr
rays[], |
262 SkTArray<GrGLUniformManager::UniformHandle, true>* effectSa
mplerHandles[], | 272 SkTArray<GrGLUniformManager::UniformHandle, true>* effectSa
mplerHandles[], |
263 GrGLEffect* glEffects[]); | 273 GrGLEffect* glEffects[]); |
264 | 274 |
265 const char* getColorOutputName() const; | 275 const char* getColorOutputName() const; |
266 const char* enableSecondaryOutput(); | 276 const char* enableSecondaryOutput(); |
267 | 277 |
268 GrGLUniformManager::UniformHandle getRTHeightUniform() const { return fRTHei
ghtUniform; } | 278 GrGLUniformManager::UniformHandle getRTHeightUniform() const { return fRTHei
ghtUniform; } |
269 GrGLUniformManager::UniformHandle getDstCopyTopLeftUniform() const { | 279 GrGLUniformManager::UniformHandle getDstCopyTopLeftUniform() const { |
270 return fDstCopyTopLeftUniform; | 280 return fDstCopyTopLeftUniform; |
271 } | 281 } |
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
489 GrGLUniformManager::UniformHandle fDstCopyScaleUniform; | 499 GrGLUniformManager::UniformHandle fDstCopyScaleUniform; |
490 GrGLUniformManager::UniformHandle fColorUniform; | 500 GrGLUniformManager::UniformHandle fColorUniform; |
491 GrGLUniformManager::UniformHandle fCoverageUniform; | 501 GrGLUniformManager::UniformHandle fCoverageUniform; |
492 | 502 |
493 bool fTopLeftFragPosRead; | 503 bool fTopLeftFragPosRead; |
494 | 504 |
495 SkAutoTDelete<VertexBuilder> fVertexBuilder; | 505 SkAutoTDelete<VertexBuilder> fVertexBuilder; |
496 }; | 506 }; |
497 | 507 |
498 #endif | 508 #endif |
OLD | NEW |