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 |