#include <maya/MPxGeometryOverride.h>
#include <maya/MIntArray.h>
#include <maya/MStateManager.h>
#include <maya/MTextureManager.h>
#include <set>
class apiMesh;
class apiMeshGeom;
{
    class MIndexBuffer;
    class MVertexBuffer;
    class MVertexBufferDescriptor;
}
{
public:
    static MPxGeometryOverride* Creator(
const MObject& obj)
 
    {
        return new apiMeshGeometryOverride(obj);
    }
    virtual ~apiMeshGeometryOverride();
    static MStatus registerComponentConverters();
 
    static MStatus deregisterComponentConverters();
 
protected:
    bool enableActiveComponentDisplay(
const MDagPath &path) 
const;
 
    
    
        unsigned int activeVertexCount,
        unsigned int totalVerts,
        bool debugPopulateGeometry);
    void cloneVertexBuffer(
        unsigned int bufferSize,
        bool debugPopulateGeometry);
    
        unsigned int totalVerts);
        unsigned int numTriangles,
        unsigned int activeVertexCount,
        bool debugPopulateGeometry);
        unsigned int totalVerts,
        bool fromSelection);
        unsigned int numTriangles,
        bool fromSelection);
        unsigned int numTriangles);
    apiMeshGeometryOverride(
const MObject& obj);
    apiMesh* fMesh;
    apiMeshGeom* fMeshGeom;
    std::set<int> fActiveVerticesSet;
    std::set<int> fActiveEdgesSet;
    std::set<int> fActiveFacesSet;
    bool fCastsShadows;
    bool fReceivesShadows;
    
    static const MString sWireframeItemName;
 
    static const MString sShadedTemplateItemName;
 
    static const MString sSelectedWireframeItemName;
 
    static const MString sVertexItemName;
 
    static const MString sActiveVertexItemName;
 
    static const MString sVertexIdItemName;
 
    static const MString sVertexPositionItemName;
 
    static const MString sShadedModeFaceCenterItemName;
 
    static const MString sWireframeModeFaceCenterItemName;
 
    static const MString sShadedProxyItemName;
 
    static const MString sAffectedEdgeItemName;
 
    static const MString sAffectedFaceItemName;
 
    static const MString sEdgeSelectionItemName;
 
    static const MString sFaceSelectionItemName;
 
    
    
    
    
    static const MString sActiveVertexStreamName;
 
    bool fDrawSharedActiveVertices;
    bool fDrawActiveVerticesWithRamp;
    
    static const MString sFaceCenterStreamName;
 
    bool fDrawFaceCenters;
    
    bool fUseCustomColors;
    
    
    int fProxyShader;
    
    bool fInternalItems_NoShadowCast;
    bool fInternalItems_NoShadowReceive;
    bool fInternalItems_NoPostEffects;
    bool fExternalItems_NoShadowCast;
    bool fExternalItems_NoShadowReceive;
    bool fExternalItems_NoPostEffects;
    bool fExternalItemsNonTri_NoShadowCast;
    bool fExternalItemsNonTri_NoShadowReceive;
    bool fExternalItemsNonTri_NoPostEffects;
};