#ifndef BLUECORE_RENDERDEVICE_H
#define BLUECORE_RENDERDEVICE_H

#include "RenderWindow.h"

#include "Utilities/Buffer.h"
#include "Utilities/Referenced.h"
#include "Utilities/sigslot.h"

namespace BlueCore
{

class RenderDevice : public Referenced, public sigslot::has_slots<>
{
  public:

    class RenderItem
    {

    public:
      //virtual void render ( RenderPass pass ) = 0;
      virtual ~RenderItem()
      {};
    };
    
  private:
    int _ViewportWidth, _ViewportHeight;

    void WindowResizeSlot(int width, int height);
    void WindowCloseSlot();

    ref_ptr<RenderWindow> _RenderWindow;

  public:

    RenderDevice(RenderWindow* renderWindow);
    ~RenderDevice();

    int getViewportWidth();
    int getViewportHeight();

    void begin2D();
    void end2D();

    void clear();

    void setAmbientLight(float r, float g, float b);

    void setTexture(unsigned int unit, unsigned int texture);

    sigslot::signal0<> DeviceShutdownSignal;

    //Buffer<ShadowFace> &_ShadowFaces;
};

} // namespaced BlueCore

#endif // BLUECORE_RENDERDEVICE_H
