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

Side by Side Diff: src/gpu/gl/builders/GrGLProgramBuilder.h

Issue 576543005: Breaking out full program and frag only (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: 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
OLDNEW
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
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
OLDNEW
« no previous file with comments | « src/gpu/gl/builders/GrGLFullProgramBuilder.cpp ('k') | src/gpu/gl/builders/GrGLProgramBuilder.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698