/*****************************************************************************
 * $LastChangedDate: 2009-11-22 22:39:11 -0500 (Sun, 22 Nov 2009) $
 * @file
 * @author  Jim E. Brooks  http://www.palomino3d.org
 * @brief   Algorithms to paint SkyDome.
 *//*
 * LEGAL:   COPYRIGHT (C) 2008 JIM E. BROOKS
 *          THIS SOURCE CODE IS RELEASED UNDER THE TERMS
 *          OF THE GNU GENERAL PUBLIC LICENSE VERSION 2 (GPL 2).
 *****************************************************************************/

#ifndef SKY_SKY_DOME_PAINTER_HH
#define SKY_SKY_DOME_PAINTER_HH 1

#include "sky/sky_dome.hh"

namespace sky {

////////////////////////////////////////////////////////////////////////////////
/// @brief Algorithms to paint SkyDome.
///
/// SkyDomePainter class is a collection of functions.
///
/// SkyDome vs. SkyDomePainter:
/// ---------------------------
/// To separate code and data (and for factoring), SkyDome is a data,
/// while SkyDomePainter is a specific algorithm applied to data.
///
class SkyDomePainter
{
PREVENT_COPYING(SkyDomePainter)
// ctor/dtor/data omitted.
public:
    CLASS_METHOD void       Paint( SkyDome& skyDome, const fp hour );

private:
    CLASS_METHOD void       PaintDome( SkyDome& skyDome, const fp hour );
    CLASS_METHOD void       PaintHorizon( SkyDome& skyDome, const fp hour );
    CLASS_METHOD void       PaintSunAura( SkyDome& skyDome, const fp hour );
    CLASS_METHOD RGBA       ComputeSkyColor( const fp hour );
};

} // namespace sky

#endif // SKY_SKY_DOME_PAINTER_HH
