
/*
 * Copyright 2012 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#ifndef GrGLPath_DEFINED
#define GrGLPath_DEFINED

#include "../GrPath.h"
#include "gl/GrGLFunctions.h"

class GrGLGpu;

/**
 * Currently this represents a path built using GL_NV_path_rendering. If we
 * support other GL path extensions then this would have to have a type enum
 * and/or be subclassed.
 */

class GrGLPath : public GrPath {
public:
    static void InitPathObject(GrGLGpu*,
                               GrGLuint pathID,
                               const SkPath&,
                               const SkStrokeRec&);

    GrGLPath(GrGLGpu* gpu, const SkPath& path, const SkStrokeRec& stroke);
    GrGLuint pathID() const { return fPathID; }

protected:
    void onRelease() SK_OVERRIDE;
    void onAbandon() SK_OVERRIDE;

private:
    // TODO: Figure out how to get an approximate size of the path in Gpu memory.
    size_t onGpuMemorySize() const SK_OVERRIDE { return 100; }

    GrGLuint fPathID;

    typedef GrPath INHERITED;
};

#endif
