// Author: Juan Carlos De Abreu (jcabreur@gmail.com)
//
// This file define an interface for the shadows.

#ifndef SHADOW_SHADOWS_H__
#define SHADOW_SHADOWS_H__

#include "../global.h"
#include "../Base/Memory/MMObject.h"
#include "../Base/Memory/SmartPointer.h"

BEGIN_TEG_NAMESPACE();

class GeometryNode;
class LightNode;

class Shadows : public IMMObject {
public:
  // Constructor
  Shadows();
  virtual ~Shadows();

  // Method to render a shadow for a specific light source and an geometry.
  virtual void render() = 0;
  virtual void render(const SmartPointer<LightNode>& light, std::vector< SmartPointer<GeometryNode> >& models) = 0;

 private:
  DISALLOW_COPY_AND_ASSIGN(Shadows);
};

END_TEG_NAMESPACE();

#endif  // SHADOW_SHADOWS_H__
