GrGLVertexEffect.h revision 261dc569b6a53729bea6e4e7a0cf2afa980eb82d
1/*
2 * Copyright 2013 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#ifndef GrGLVertexEffect_DEFINED
9#define GrGLVertexEffect_DEFINED
10
11#include "GrGLEffect.h"
12
13/**
14 * If a GL effect needs a GrGLFullShaderBuilder* object to emit vertex code, then it must inherit
15 * from this class. Since paths don't have vertices, this class is only meant to be used internally
16 * by skia, for special cases.
17 */
18class GrGLVertexEffect : public GrGLEffect {
19public:
20    GrGLVertexEffect(const GrBackendEffectFactory& factory)
21        : INHERITED(factory) { fIsVertexEffect = true; }
22
23    /**
24     * This is similar to emitCode() in the base class, except it takes a full shader builder.
25     * This allows the effect subclass to emit vertex code.
26     */
27    virtual void emitCode(GrGLFullShaderBuilder* builder,
28                          const GrDrawEffect& drawEffect,
29                          EffectKey key,
30                          const char* outputColor,
31                          const char* inputColor,
32                          const TransformedCoordsArray& coords,
33                          const TextureSamplerArray& samplers) = 0;
34
35    /**
36     * Provide a default override for base class's emitCode() function.
37     */
38    virtual void emitCode(GrGLShaderBuilder* builder,
39                          const GrDrawEffect& drawEffect,
40                          EffectKey key,
41                          const char* outputColor,
42                          const char* inputColor,
43                          const TransformedCoordsArray& coords,
44                          const TextureSamplerArray& samplers) SK_OVERRIDE {
45        GrCrash("GrGLVertexEffect requires GrGLFullShaderBuilder* overload for emitCode().");
46    }
47
48private:
49    typedef GrGLEffect INHERITED;
50};
51
52#endif
53