#pragma once

#include <Stuff\Stuff.hpp>

//
//-------------------------
// Element Renderer classes
//-------------------------
//
namespace ElementRenderer {
	enum
	{
		ElementClassID = Stuff::FirstElementRendererClassID,
			GroupElementClassID,
				CameraElementClassID,
			ShapeElementClassID,
			ListElementClassID,
				SwitchElementClassID,
					LODElementClassID,
			PointCloudElementClassID,
			TriangleCloudElementClassID,
			ScalableShapeElementClassID,
			ScreenQuadsElementClassID,
			gosFXElementClassID,

			GridElementClassID,

			LineCloudElementClassID,
			LightElementClassID,
			MultiLODElementClassID,
			ShapeLODElementClassID,
			TreeElementClassID,

		FirstFreeElementRendererClassID
	};

	enum {CurrentERFVersion = 14};

	int
		ReadERFVersion(Stuff::MemoryStream *erf_stream);
	void
		WriteERFVersion(Stuff::MemoryStream *erf_stream);

	void InitializeClasses(Stuff::NotationFile *startup_ini=NULL);
	void TerminateClasses(Stuff::NotationFile *startup_ini=NULL);

	extern HGOSHEAP g_LibraryHeap;
	extern HGOSHEAP g_Heap;

	DECLARE_TIMER(extern, Total_Video);
	DECLARE_TIMER(extern, Graph_Traversal);
	DECLARE_TIMER(extern, Setup_Sky);
	DECLARE_TIMER(extern, Draw_Shapes);
	DECLARE_TIMER(extern, Draw_Scalable);
	DECLARE_TIMER(extern, Draw_Effects);
	DECLARE_TIMER(extern, Draw_Quads);
	DECLARE_TIMER(extern, Render);

}

#include "Element.hpp"
