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 |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
160 /** Returns a variable name that represents the position of the fragment in
the FS. The position | 160 /** Returns a variable name that represents the position of the fragment in
the FS. The position |
161 is in device space (e.g. 0,0 is the top left and pixel centers are at ha
lf-integers). */ | 161 is in device space (e.g. 0,0 is the top left and pixel centers are at ha
lf-integers). */ |
162 const char* fragmentPosition(); | 162 const char* fragmentPosition(); |
163 | 163 |
164 /** Returns the color of the destination pixel. This may be NULL if no effec
t advertised | 164 /** Returns the color of the destination pixel. This may be NULL if no effec
t advertised |
165 that it will read the destination. */ | 165 that it will read the destination. */ |
166 const char* dstColor(); | 166 const char* dstColor(); |
167 | 167 |
168 /** | 168 /** |
169 * Interfaces used by GrGLProgram. | 169 * Interfaces used by GrGLProgram. |
170 * TODO: These are used by GrGLProgram to insert a mode color filter. Remove
these when the | |
171 * color filter is expressed as a GrEffect. | |
172 */ | 170 */ |
173 const SkString& getInputColor() const { | 171 const GrGLSLExpr<4>& getInputColor() const { |
174 SkASSERT(fInputColor.isEmpty() != (kNone_GrSLConstantVec == fKnownColorV
alue)); | |
175 return fInputColor; | 172 return fInputColor; |
176 } | 173 } |
177 GrSLConstantVec getKnownColorValue() const { | 174 const GrGLSLExpr<4>& getInputCoverage() const { |
178 SkASSERT(fInputColor.isEmpty() != (kNone_GrSLConstantVec == fKnownColorV
alue)); | |
179 return fKnownColorValue; | |
180 } | |
181 const SkString& getInputCoverage() const { | |
182 SkASSERT(fInputCoverage.isEmpty() != (kNone_GrSLConstantVec == fKnownCov
erageValue)); | |
183 return fInputCoverage; | 175 return fInputCoverage; |
184 } | 176 } |
185 GrSLConstantVec getKnownCoverageValue() const { | |
186 SkASSERT(fInputCoverage.isEmpty() != (kNone_GrSLConstantVec == fKnownCov
erageValue)); | |
187 return fKnownCoverageValue; | |
188 } | |
189 | 177 |
190 /** | 178 /** |
191 * Adds code for effects and returns a GrGLProgramEffects* object. The calle
r is responsible for | 179 * Adds code for effects and returns a GrGLProgramEffects* object. The calle
r is responsible for |
192 * deleting it when finished. effectStages contains the effects to add. effe
ctKeys[i] is the key | 180 * deleting it when finished. effectStages contains the effects to add. effe
ctKeys[i] is the key |
193 * generated from effectStages[i]. inOutFSColor specifies the input color to
the first stage and | 181 * generated from effectStages[i]. inOutFSColor specifies the input color to
the first stage and |
194 * is updated to be the output color of the last stage. fsInOutColorKnownVal
ue specifies whether | 182 * is updated to be the output color of the last stage. |
195 * the input color has a known constant value and is updated to refer to the
status of the | 183 * The handles to texture samplers for effectStage[i] are added to |
196 * output color. The handles to texture samplers for effectStage[i] are adde
d to | |
197 * effectSamplerHandles[i]. | 184 * effectSamplerHandles[i]. |
198 */ | 185 */ |
199 virtual GrGLProgramEffects* createAndEmitEffects(const GrEffectStage* effect
Stages[], | 186 virtual GrGLProgramEffects* createAndEmitEffects(const GrEffectStage* effect
Stages[], |
200 const EffectKey effectKeys[
], | 187 const EffectKey effectKeys[
], |
201 int effectCnt, | 188 int effectCnt, |
202 SkString* inOutFSColor, | 189 GrGLSLExpr<4>* inOutFSColor
) = 0; |
203 GrSLConstantVec* fsInOutCol
orKnownValue) = 0; | |
204 | 190 |
205 const char* getColorOutputName() const; | 191 const char* getColorOutputName() const; |
206 const char* enableSecondaryOutput(); | 192 const char* enableSecondaryOutput(); |
207 | 193 |
208 GrGLUniformManager::UniformHandle getRTHeightUniform() const { return fRTHei
ghtUniform; } | 194 GrGLUniformManager::UniformHandle getRTHeightUniform() const { return fRTHei
ghtUniform; } |
209 GrGLUniformManager::UniformHandle getDstCopyTopLeftUniform() const { | 195 GrGLUniformManager::UniformHandle getDstCopyTopLeftUniform() const { |
210 return fDstCopyTopLeftUniform; | 196 return fDstCopyTopLeftUniform; |
211 } | 197 } |
212 GrGLUniformManager::UniformHandle getDstCopyScaleUniform() const { | 198 GrGLUniformManager::UniformHandle getDstCopyScaleUniform() const { |
213 return fDstCopyScaleUniform; | 199 return fDstCopyScaleUniform; |
214 } | 200 } |
215 GrGLUniformManager::UniformHandle getColorUniform() const { return fColorUni
form; } | 201 GrGLUniformManager::UniformHandle getColorUniform() const { return fColorUni
form; } |
216 GrGLUniformManager::UniformHandle getCoverageUniform() const { return fCover
ageUniform; } | 202 GrGLUniformManager::UniformHandle getCoverageUniform() const { return fCover
ageUniform; } |
217 GrGLUniformManager::UniformHandle getDstCopySamplerUniform() const { | 203 GrGLUniformManager::UniformHandle getDstCopySamplerUniform() const { |
218 return fDstCopySamplerUniform; | 204 return fDstCopySamplerUniform; |
219 } | 205 } |
220 | 206 |
221 bool finish(GrGLuint* outProgramId); | 207 bool finish(GrGLuint* outProgramId); |
222 | 208 |
223 const GrGLContextInfo& ctxInfo() const; | 209 const GrGLContextInfo& ctxInfo() const; |
224 | 210 |
225 protected: | 211 protected: |
226 GrGpuGL* gpu() const { return fGpu; } | 212 GrGpuGL* gpu() const { return fGpu; } |
227 | 213 |
228 void setInputColor(const char* inputColor) { fInputColor = inputColor; } | 214 void setInputColor(const GrGLSLExpr<4>& inputColor) { fInputColor = inputCol
or; } |
229 void setInputCoverage(const char* inputCoverage) { fInputCoverage = inputCov
erage; } | 215 void setInputCoverage(const GrGLSLExpr<4>& inputCoverage) { fInputCoverage =
inputCoverage; } |
230 | 216 |
231 /** Add input/output variable declarations (i.e. 'varying') to the fragment
shader. */ | 217 /** Add input/output variable declarations (i.e. 'varying') to the fragment
shader. */ |
232 GrGLShaderVar& fsInputAppend() { return fFSInputs.push_back(); } | 218 GrGLShaderVar& fsInputAppend() { return fFSInputs.push_back(); } |
233 | 219 |
234 // Generates a name for a variable. The generated string will be name prefix
ed by the prefix | 220 // Generates a name for a variable. The generated string will be name prefix
ed by the prefix |
235 // char (unless the prefix is '\0'). It also mangles the name to be stage-sp
ecific if we're | 221 // char (unless the prefix is '\0'). It also mangles the name to be stage-sp
ecific if we're |
236 // generating stage code. | 222 // generating stage code. |
237 void nameVariable(SkString* out, char prefix, const char* name); | 223 void nameVariable(SkString* out, char prefix, const char* name); |
238 | 224 |
239 // Helper for emitEffects(). | 225 // Helper for emitEffects(). |
240 void createAndEmitEffects(GrGLProgramEffectsBuilder*, | 226 void createAndEmitEffects(GrGLProgramEffectsBuilder*, |
241 const GrEffectStage* effectStages[], | 227 const GrEffectStage* effectStages[], |
242 const EffectKey effectKeys[], | 228 const EffectKey effectKeys[], |
243 int effectCnt, | 229 int effectCnt, |
244 SkString* inOutFSColor, | 230 GrGLSLExpr<4>* inOutFSColor); |
245 GrSLConstantVec* fsInOutColorKnownValue); | |
246 | 231 |
247 virtual bool compileAndAttachShaders(GrGLuint programId) const; | 232 virtual bool compileAndAttachShaders(GrGLuint programId) const; |
248 virtual void bindProgramLocations(GrGLuint programId) const; | 233 virtual void bindProgramLocations(GrGLuint programId) const; |
249 | 234 |
250 void appendDecls(const VarArray&, SkString*) const; | 235 void appendDecls(const VarArray&, SkString*) const; |
251 void appendUniformDecls(ShaderVisibility, SkString*) const; | 236 void appendUniformDecls(ShaderVisibility, SkString*) const; |
252 | 237 |
253 private: | 238 private: |
254 class CodeStage : public SkNoncopyable { | 239 class CodeStage : public SkNoncopyable { |
255 public: | 240 public: |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
337 SkString fFSExtensions; | 322 SkString fFSExtensions; |
338 VarArray fFSInputs; | 323 VarArray fFSInputs; |
339 VarArray fFSOutputs; | 324 VarArray fFSOutputs; |
340 GrGLUniformManager::BuilderUniformArray fUniforms; | 325 GrGLUniformManager::BuilderUniformArray fUniforms; |
341 | 326 |
342 SkString fFSCode; | 327 SkString fFSCode; |
343 | 328 |
344 bool fSetupFragPosition; | 329 bool fSetupFragPosition; |
345 GrGLUniformManager::UniformHandle fDstCopySamplerUniform; | 330 GrGLUniformManager::UniformHandle fDstCopySamplerUniform; |
346 | 331 |
347 SkString fInputColor; | 332 GrGLSLExpr<4> fInputColor; |
348 GrSLConstantVec fKnownColorValue; | 333 GrGLSLExpr<4> fInputCoverage; |
349 SkString fInputCoverage; | |
350 GrSLConstantVec fKnownCoverageValue; | |
351 | 334 |
352 bool fHasCustomColorOutput; | 335 bool fHasCustomColorOutput; |
353 bool fHasSecondaryOutput; | 336 bool fHasSecondaryOutput; |
354 | 337 |
355 GrGLUniformManager::UniformHandle fRTHeightUniform; | 338 GrGLUniformManager::UniformHandle fRTHeightUniform; |
356 GrGLUniformManager::UniformHandle fDstCopyTopLeftUniform; | 339 GrGLUniformManager::UniformHandle fDstCopyTopLeftUniform; |
357 GrGLUniformManager::UniformHandle fDstCopyScaleUniform; | 340 GrGLUniformManager::UniformHandle fDstCopyScaleUniform; |
358 GrGLUniformManager::UniformHandle fColorUniform; | 341 GrGLUniformManager::UniformHandle fColorUniform; |
359 GrGLUniformManager::UniformHandle fCoverageUniform; | 342 GrGLUniformManager::UniformHandle fCoverageUniform; |
360 | 343 |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
406 */ | 389 */ |
407 bool hasExplicitLocalCoords() const { return (fLocalCoordsVar != fPositionVa
r); } | 390 bool hasExplicitLocalCoords() const { return (fLocalCoordsVar != fPositionVa
r); } |
408 | 391 |
409 bool addEffectAttribute(int attributeIndex, GrSLType type, const SkString& n
ame); | 392 bool addEffectAttribute(int attributeIndex, GrSLType type, const SkString& n
ame); |
410 const SkString* getEffectAttributeName(int attributeIndex) const; | 393 const SkString* getEffectAttributeName(int attributeIndex) const; |
411 | 394 |
412 virtual GrGLProgramEffects* createAndEmitEffects( | 395 virtual GrGLProgramEffects* createAndEmitEffects( |
413 const GrEffectStage* effectStages[], | 396 const GrEffectStage* effectStages[], |
414 const EffectKey effectKeys[], | 397 const EffectKey effectKeys[], |
415 int effectCnt, | 398 int effectCnt, |
416 SkString* inOutFSColor, | 399 GrGLSLExpr<4>* inOutFSColor) SK_OVERRIDE; |
417 GrSLConstantVec* fsInOutColorKnownValue) SK_OVERRIDE; | |
418 | 400 |
419 GrGLUniformManager::UniformHandle getViewMatrixUniform() const { | 401 GrGLUniformManager::UniformHandle getViewMatrixUniform() const { |
420 return fViewMatrixUniform; | 402 return fViewMatrixUniform; |
421 } | 403 } |
422 | 404 |
423 protected: | 405 protected: |
424 virtual bool compileAndAttachShaders(GrGLuint programId) const SK_OVERRIDE; | 406 virtual bool compileAndAttachShaders(GrGLuint programId) const SK_OVERRIDE; |
425 virtual void bindProgramLocations(GrGLuint programId) const SK_OVERRIDE; | 407 virtual void bindProgramLocations(GrGLuint programId) const SK_OVERRIDE; |
426 | 408 |
427 private: | 409 private: |
(...skipping 28 matching lines...) Expand all Loading... |
456 public: | 438 public: |
457 GrGLFragmentOnlyShaderBuilder(GrGpuGL*, GrGLUniformManager&, const GrGLProgr
amDesc&); | 439 GrGLFragmentOnlyShaderBuilder(GrGpuGL*, GrGLUniformManager&, const GrGLProgr
amDesc&); |
458 | 440 |
459 int getNumTexCoordSets() const { return fNumTexCoordSets; } | 441 int getNumTexCoordSets() const { return fNumTexCoordSets; } |
460 int addTexCoordSets(int count) { return (fNumTexCoordSets += count) - count;
} | 442 int addTexCoordSets(int count) { return (fNumTexCoordSets += count) - count;
} |
461 | 443 |
462 virtual GrGLProgramEffects* createAndEmitEffects( | 444 virtual GrGLProgramEffects* createAndEmitEffects( |
463 const GrEffectStage* effectStages[], | 445 const GrEffectStage* effectStages[], |
464 const EffectKey effectKeys[], | 446 const EffectKey effectKeys[], |
465 int effectCnt, | 447 int effectCnt, |
466 SkString* inOutFSColor, | 448 GrGLSLExpr<4>* inOutFSColor) SK_OVERRIDE; |
467 GrSLConstantVec* fsInOutColorKnownValue) SK_OVERRIDE; | |
468 | 449 |
469 private: | 450 private: |
470 int fNumTexCoordSets; | 451 int fNumTexCoordSets; |
471 | 452 |
472 typedef GrGLShaderBuilder INHERITED; | 453 typedef GrGLShaderBuilder INHERITED; |
473 }; | 454 }; |
474 | 455 |
475 #endif | 456 #endif |
OLD | NEW |