ImmediateModeRenderer/ImmediateModeRenderer.h


//**************************************************************************/

// Copyright (c) 2008 Autodesk, Inc.

// All rights reserved.

//

// Use of this software is subject to the terms of the Autodesk license

// agreement provided at the time of installation or download, or which

// otherwise accompanies this software in either electronic or hard copy form.

//

//**************************************************************************/

// DESCRIPTION:

// CREATED: April 2010

//**************************************************************************/



#if defined(JAMBUILD)

#include <Mudbox/mudbox.h>

#include <Mudbox/MudBoxGL.h>

#else

#include "../../include/Mudbox/mudbox.h"

#include "../../include/Mudbox/MudBoxGL.h"
#endif



using namespace mudbox;



class ImmediateModeRenderer : public MeshRenderer

{

    DECLARE_CLASS;



public:



    ImmediateModeRenderer( void );

    ~ImmediateModeRenderer( void );



    // Overrides for Node class

    virtual void OnNodeEvent( const Attribute &, NodeEventType );

    virtual void Serialize( Stream & );



    // Overrides for MeshRenderer class



    virtual void Initialize( void );

    virtual void SetMesh( Mesh *pMesh );

    virtual void Render( 

        const Selector *pSelector = 0, 

        bool bSkipMaterials = false, 

        const Camera *pCamera = 0, 

        const AxisAlignedBoundingBox &bUVFilter = AxisAlignedBoundingBox() 

        );



    virtual unsigned int RenderData( const Selector *pSelector, unsigned int iStart, const Camera *pCamera );

    virtual void DecodeData( unsigned int iData, unsigned int &iFaceIndex, unsigned int &iVertexIndex );



    virtual void OnVertexPositionChange( unsigned int iVertexIndex, unsigned int iFaceIndex );

    virtual void OnVertexStateChange( unsigned int iVertexIndex, unsigned int iFaceIndex );

    virtual void OnMeshChange( void );



    virtual void SetLODLevel( float fLevel );

    virtual float LODLevel( void ) const;



    virtual const AxisAlignedBoundingBox &ActiveUVArea( void ) const;



    virtual void SetWireFrameMode( bool bMode );

    virtual bool WireFrameMode( void ) const;

    virtual void SetColorMode( bool bMode );

    virtual bool ColorMode( void ) const;

    virtual void SetWireLevel( unsigned int iLevel );

    virtual unsigned int WireLevel( void ) const;

    virtual void SetTextureCoordinateMode( bool bMode );

    virtual bool TextureCoordinateMode( void ) const;

    virtual void SetTangentMode( bool bMode );

    virtual bool TangentMode( void ) const;



    virtual bool ReadyForClientRender() { return true;}



    virtual void SetFacetedMode( bool bMode );

    virtual bool FacetedMode( void ) const;



private:



    void renderTriangle(int index);

    void renderQuad(int index);



    Mesh *m_pMesh;



    float m_fPointSize;

    float m_fLineWidth;



    GLenum m_ePolygonMode;



    bool m_bTCMode;



    AxisAlignedBoundingBox m_ActiveUVArea;



    // Get color depth of render target

    GLint m_iRedBits, m_iGreenBits, m_iBlueBits;

};