| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2014 Google Inc. | 2 * Copyright 2014 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 GrGLProgramBuilder_DEFINED | 8 #ifndef GrGLProgramBuilder_DEFINED |
| 9 #define GrGLProgramBuilder_DEFINED | 9 #define GrGLProgramBuilder_DEFINED |
| 10 | 10 |
| (...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 274 const GrGLProgramDesc& fDesc; | 274 const GrGLProgramDesc& fDesc; |
| 275 GrGpuGL* fGpu; | 275 GrGpuGL* fGpu; |
| 276 UniformInfoArray fUniforms; | 276 UniformInfoArray fUniforms; |
| 277 | 277 |
| 278 friend class GrGLShaderBuilder; | 278 friend class GrGLShaderBuilder; |
| 279 friend class GrGLVertexShaderBuilder; | 279 friend class GrGLVertexShaderBuilder; |
| 280 friend class GrGLFragmentShaderBuilder; | 280 friend class GrGLFragmentShaderBuilder; |
| 281 friend class GrGLGeometryShaderBuilder; | 281 friend class GrGLGeometryShaderBuilder; |
| 282 }; | 282 }; |
| 283 | 283 |
| 284 //////////////////////////////////////////////////////////////////////////////// | |
| 285 | |
| 286 class GrGLFullProgramBuilder : public GrGLProgramBuilder { | |
| 287 public: | |
| 288 GrGLFullProgramBuilder(GrGpuGL*, const GrGLProgramDesc&); | |
| 289 | |
| 290 /** Add a varying variable to the current program to pass values between vert
ex and fragment | |
| 291 shaders. If the last two parameters are non-NULL, they are filled in wit
h the name | |
| 292 generated. */ | |
| 293 void addVarying(GrSLType type, | |
| 294 const char* name, | |
| 295 const char** vsOutName = NULL, | |
| 296 const char** fsInName = NULL, | |
| 297 GrGLShaderVar::Precision fsPrecision=GrGLShaderVar::kDefault
_Precision); | |
| 298 | |
| 299 /** Add a separable varying input variable to the current program. | |
| 300 * A separable varying (fragment shader input) is a varying that can be used
also when vertex | |
| 301 * shaders are not used. With a vertex shader, the operation is same as with
other | |
| 302 * varyings. Without a vertex shader, such as with NV_path_rendering, GL API
s are used to | |
| 303 * populate the variable. The APIs can refer to the variable through the ret
urned handle. | |
| 304 */ | |
| 305 VaryingHandle addSeparableVarying(GrSLType type, | |
| 306 const char* name, | |
| 307 const char** vsOutName, | |
| 308 const char** fsInName); | |
| 309 | |
| 310 GrGLVertexShaderBuilder* getVertexShaderBuilder() { return &fVS; } | |
| 311 | |
| 312 private: | |
| 313 virtual void emitCodeBeforeEffects(GrGLSLExpr4* color, | |
| 314 GrGLSLExpr4* coverage) SK_OVERRIDE; | |
| 315 | |
| 316 virtual void emitGeometryProcessor(const GrEffectStage* geometryProcessor, | |
| 317 GrGLSLExpr4* coverage) SK_OVERRIDE; | |
| 318 | |
| 319 virtual GrGLProgramEffects* createAndEmitEffects(const GrEffectStage* effect
Stages[], | |
| 320 int effectCnt, | |
| 321 const GrGLProgramDesc::Effe
ctKeyProvider&, | |
| 322 GrGLSLExpr4* inOutFSColor)
SK_OVERRIDE; | |
| 323 | |
| 324 /* | |
| 325 * These functions are temporary and will eventually operate not on effects
but on | |
| 326 * geometry processors | |
| 327 */ | |
| 328 void createAndEmitEffect(GrGLProgramEffectsBuilder*, | |
| 329 const GrEffectStage* effectStage, | |
| 330 const GrGLProgramDesc::EffectKeyProvider&, | |
| 331 GrGLSLExpr4* inOutFSColor); | |
| 332 | |
| 333 GrGLProgramEffects* createAndEmitEffect(const GrEffectStage* geometryProcess
or, | |
| 334 const GrGLProgramDesc::EffectKeyProv
ider&, | |
| 335 GrGLSLExpr4* inOutFSColor); | |
| 336 | |
| 337 virtual void emitCodeAfterEffects() SK_OVERRIDE; | |
| 338 | |
| 339 virtual bool compileAndAttachShaders(GrGLuint programId, | |
| 340 SkTDArray<GrGLuint>* shaderIds) const S
K_OVERRIDE; | |
| 341 | |
| 342 virtual void bindProgramLocations(GrGLuint programId) SK_OVERRIDE; | |
| 343 | |
| 344 GrGLGeometryShaderBuilder fGS; | |
| 345 GrGLVertexShaderBuilder fVS; | |
| 346 | |
| 347 typedef GrGLProgramBuilder INHERITED; | |
| 348 }; | |
| 349 | |
| 350 //////////////////////////////////////////////////////////////////////////////// | |
| 351 | |
| 352 class GrGLFragmentOnlyProgramBuilder : public GrGLProgramBuilder { | |
| 353 public: | |
| 354 GrGLFragmentOnlyProgramBuilder(GrGpuGL*, const GrGLProgramDesc&); | |
| 355 | |
| 356 int addTexCoordSets(int count); | |
| 357 | |
| 358 private: | |
| 359 virtual void emitCodeBeforeEffects(GrGLSLExpr4* color, | |
| 360 GrGLSLExpr4* coverage) SK_OVERRIDE {} | |
| 361 | |
| 362 virtual void emitGeometryProcessor(const GrEffectStage* geometryProcessor, | |
| 363 GrGLSLExpr4* coverage) SK_OVERRIDE { | |
| 364 SkASSERT(NULL == geometryProcessor); | |
| 365 } | |
| 366 | |
| 367 virtual GrGLProgramEffects* createAndEmitEffects(const GrEffectStage* effect
Stages[], | |
| 368 int effectCnt, | |
| 369 const GrGLProgramDesc::Effe
ctKeyProvider&, | |
| 370 GrGLSLExpr4* inOutFSColor)
SK_OVERRIDE; | |
| 371 | |
| 372 virtual void emitCodeAfterEffects() SK_OVERRIDE {} | |
| 373 | |
| 374 typedef GrGLProgramBuilder INHERITED; | |
| 375 }; | |
| 376 | |
| 377 #endif | 284 #endif |
| OLD | NEW |