/*********************************************************************//**
*	\brief Modul pro vykreslovani sceny.
*	Tento modul se stara o vykreslovani sceny. K teto operaci pouziva
*	BSP strom a prirazene informace o  vzajemne viditelnosti listu.
*	Umoznuje vykreslovat pomoci techto informaci a take ve smeru
*	Back to Front diky BSP stromu.
*
*	\author Michal Jirous
*	\date 11.02.2009
*	\file level_render.h
**********************************************************************/


#ifndef __LEVEL_RENDER_H__
#define __LEVEL_RENDER_H__

#include "game_frustum.h"

#include <SDL/SDL_opengl.h>
#include "level_structs.h"
#include "ent_baseentity.h"


/** @brief Implementace tridy, ktera zajistuje vykreslovani sceny. */
class SceneRenderer
{
	bool m_bAlphaRendering;
	

	std::list<CBaseEntity*> m_BlendList;
	void renderCluster( const BSPLeaf &leaf, const Frustum &frustum, const Point &cameraPosition ) const;
	BSPLeaf & findCameraLeaf( const Point &cameraPosition ) const;
	
	void BSPTreeBTFRender( RenderData &renderData, int node )  const;
public:
	SceneRenderer();
	void renderFace( const Face &face ) const;
	void draw( RenderData &renderData );	/*!< @brief Hlavni vykreslovaci funkce sceny. */
	void backToFrontRendering( RenderData &renderData, size_t modelId ) const;	/*!< @brief Vykreslovani scene od zadu do pradu (Back to Front). */
	void setAlphaRendering( bool a ) { m_bAlphaRendering = a; }	/*!< @Nastaveni typu renderovani. */
};

extern SceneRenderer renderer;	/*!< @brief Globalni vykreslovaci modul. */


#endif /*__LEVEL_RENDER_H__*/

