/*****************************************************************************
 * $LastChangedDate: 2010-03-26 15:04:03 -0400 (Fri, 26 Mar 2010) $
 * @file
 * @author  Jim E. Brooks  http://www.palomino3d.org
 * @brief   Abstract light class.
 *//*
 * LEGAL:   COPYRIGHT (C) 2009 JIM E. BROOKS
 *          THIS SOURCE CODE IS RELEASED UNDER THE TERMS
 *          OF THE GNU GENERAL PUBLIC LICENSE VERSION 2 (GPL 2).
 *****************************************************************************/

#ifndef SHADER_LIGHT_BASE_HH
#define SHADER_LIGHT_BASE_HH 1

#include "gfx/osg.hh"
#include "gfx/rgba.hh"
using namespace gfx;
#include "math/vertex.hh"
using namespace math;
#include "shader/defs.hh"
#include <osg/Fog>

namespace shader {

////////////////////////////////////////////////////////////////////////////////
/// @brief Abstract light class.
///
class BaseLight
{
PREVENT_COPYING(BaseLight)
protected:
                BaseLight( void ) { }
    virtual     ~BaseLight() { }

public:
// Individual lights:
    virtual void        SetLightType( const uint lightNum, const shader::defs::eLightType type ) = 0;
    virtual void        SetLightPosition( const uint lightNum, const WorldVertex& pos ) = 0;
    virtual WorldVertex GetLightPosition( const uint lightNum ) = 0;
    virtual void        SetLightColor( const uint lightNum, const RGBA color ) = 0;

// Brightness:
    virtual void        SetLightBrightness( const fp brightness, const shader::defs::eBrightness setting ) = 0;
    virtual fp          GetLightBrightness( void ) = 0;
    virtual void        SetLightBaseAmbient( const RGBA color ) = 0;

// Fog:
    virtual void        SetFogDensity( const fpx fogDensity, const osg::Fog::Mode fogMode ) = 0;
    virtual void        SetFogColor( const RGBA fogColor ) = 0;
    virtual void        SetFogMin( const fp fogMin ) = 0;
};

} // namespace shader

#endif // SHADER_LIGHT_BASE_HH
