aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/gl/GrGLGeometryProcessor.h
blob: b61535e098199a867b5962fa07fa1442e45a46ed (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/*
 * Copyright 2013 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#ifndef GrGLGeometryProcessor_DEFINED
#define GrGLGeometryProcessor_DEFINED

#include "GrGLProcessor.h"

class GrGLGPBuilder;

/**
 * If a GL effect needs a GrGLFullShaderBuilder* object to emit vertex code, then it must inherit
 * from this class. Since paths don't have vertices, this class is only meant to be used internally
 * by skia, for special cases.
 */
class GrGLGeometryProcessor : public GrGLProcessor {
public:
    GrGLGeometryProcessor(const GrBackendProcessorFactory& factory)
        : INHERITED(factory) {}

    struct EmitArgs {
        EmitArgs(GrGLGPBuilder* pb,
                 const GrGeometryProcessor& gp,
                 const GrProcessorKey& key,
                 const char* output,
                 const char* input,
                 const TextureSamplerArray& samplers)
            : fPB(pb), fGP(gp), fKey(key), fOutput(output), fInput(input), fSamplers(samplers) {}
        GrGLGPBuilder* fPB;
        const GrGeometryProcessor& fGP;
        const GrProcessorKey& fKey;
        const char* fOutput;
        const char* fInput;
        const TextureSamplerArray& fSamplers;
    };
    /**
     * This is similar to emitCode() in the base class, except it takes a full shader builder.
     * This allows the effect subclass to emit vertex code.
     */
    virtual void emitCode(const EmitArgs&) = 0;

private:
    typedef GrGLProcessor INHERITED;
};

#endif