#ifndef RENDERER_HPP
#define RENDERER_HPP

#include "gl.hpp"
#include "scene.hpp"
#include "settings.hpp"

using namespace std;

//-------------
class CRenderer
{
  private:
    const CSettings &lSettings;
    float lRatio;
    CScene *lScene;

    GLuint lShVertex;
    GLuint lShFragment;
    GLuint lShProgram;

    GLint lShFocus;  // A vetítési sík távolsága a fókuszponttól.
    GLint lShRotX;   // Kamera forgatása függőlegesen.
    GLint lShRotZ;   // Kamera forgatása vízszintesen.
    GLint lShDistance;  // A kamera távolsága a tárgytól.
    GLint lShOrigin;    // A kamera tárgyának pozíciója a világban.

    GLint lShVertices;   // (1) A csúcsok helyét tartalmazó textúra.
    GLint lShNormals;    // (2) A normálokat tartalmazó textúra.
    GLint lShFaces;      // (3) A lapokat alkotó csúcsok indexeit tartalmazó textúra.
    GLint lShObjBoxes;   // (4) A tárgyak befoglaló dobozát tartalmazó textúra.
    GLint lShObjRanges;  // (5) A tárgyak lapjainak tartományát leíró textúra.
    GLint lShMaterials;  // (6) Anyagjellemzőket leíró textúra.
    GLint lShObjCount;   // Hány tárgy van.
    GLint lShLightPos;   // A fény helye.

  public:
    CRenderer(const CSettings &);
    ~CRenderer();

    GLuint LoadShader(GLenum, const string &) const;
    bool DebugShader(GLuint, const string &) const;

    void Draw(float) const;
};

#endif // RENDERER_HPP
