////////////////////////////////////////////////////////////////////////////////
// Filename: terrainnodeclass.h
////////////////////////////////////////////////////////////////////////////////
#ifndef _TERRAINNODECLASS_H_
#define _TERRAINNODECLASS_H_


///////////////////////
// MY CLASS INCLUDES //
///////////////////////
#include "openglclass.h"


////////////////////////////////////////////////////////////////////////////////
// Class name: TerrainNodeClass
////////////////////////////////////////////////////////////////////////////////
class TerrainNodeClass
{
private:
    struct VertexType
    {
        float x, y, z;
        float tu, tv;
        float nx, ny, nz;
        float tx, ty, tz;
        float bx, by, bz;
        float r, g, b;
    };

    struct LineVertexType
    {
        float x, y, z;
        float r, g, b;
    };

public:
    TerrainNodeClass();
    TerrainNodeClass(const TerrainNodeClass&);
    ~TerrainNodeClass();

    void Initialize(OpenGLClass*, void*, int, int, int, int, int);
    void Shutdown(OpenGLClass*);
    void Render(OpenGLClass*);

    void RenderLines(OpenGLClass*);

private:
    void InitializeBuffers(OpenGLClass*, VertexType*, int, int, int, int, int);
    void ShutdownBuffers(OpenGLClass*);
    void RenderBuffers(OpenGLClass*);

    void BuildLines(OpenGLClass*);
    void ReleaseLines(OpenGLClass*);

private:
    int m_indexCount;
    unsigned int m_vertexArrayId, m_vertexBufferId, m_indexBufferId;
    int m_indexCount2;
    unsigned int m_vertexArrayId2, m_vertexBufferId2, m_indexBufferId2;
    float m_maxX, m_maxY, m_maxZ, m_minX, m_minY, m_minZ;
};

#endif
