/* -----------------------------------------------------------------------------
	GSFramework
	Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
----------------------------------------------------------------------------- */


#ifndef	__NSCENERENDERERENVINTERFACE__
#define	__NSCENERENDERERENVINTERFACE__


		#include "core/renderer_environment_interface.h"


namespace GS {
	namespace S3D {
		class Scene;

/*
	@short	Scene renderer environment.
	Used to query environment informations.
*/
struct	IEnvironment : public Render::IEnvironment
{
		Scene		*scene;

virtual	float		GetClock() const;

virtual	float		GetTimeOfDay() const;
virtual	Render::Shader *GetSkyboxShader() const;
virtual	bool		GetSkyboxLayers(Render::sTexture [2]) const;

virtual	Color		GetClearColor() const;
virtual	Color		GetAmbientColor() const;
virtual	void		GetEnvironmentProbe(Render::sTexture &/*radiance*/, Render::sTexture &/*irradiance*/) const;

virtual	Core::Camera *GetCurrentCamera() const;

virtual	void		GetLightsInFrustum(const Vector4 &/*world_pos*/, const Frustum &/*frustum*/, List <Core::Light *> &/*list*/, uint /*limit*/ = 0) const;
virtual	void		GetClosestLights(const Vector4 &/*world_pos*/, List <Core::Light *> &/*list*/, uint /*limit*/ = 0) const;

virtual	bool		IsFogEnabled() const;
virtual	bool		GetFogConfiguration(Color &color, float &fog_near, float &fog_far) const;

virtual	void		OnRenderUser(Render::Renderer *) const;

		IEnvironment(Scene *s) : scene(s) {}
};

	} // S3D
} // GS


#endif	// __NSCENERENDERERENVINTERFACE__
