/*
 * 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 GrVertexEffect_DEFINED
#define GrVertexEffect_DEFINED

#include "GrEffect.h"

/**
 * If an effect needs specialized vertex shader code, then it must inherit from this class.
 * Otherwise it won't be able to add vertex attribs, and it might be given a vertexless shader
 * program in emitCode.
 */
class GrVertexEffect : public GrEffect {
public:
    GrVertexEffect() { fRequiresVertexShader = true; }

protected:
    /**
     * Subclasses call this from their constructor to register vertex attributes (at most
     * kMaxVertexAttribs). This must only be called from the constructor because GrEffects are
     * immutable.
     */
    void addVertexAttrib(GrSLType type) {
        SkASSERT(fVertexAttribTypes.count() < kMaxVertexAttribs);
        fVertexAttribTypes.push_back(type);
    }

private:
    typedef GrEffect INHERITED;
};

#endif
