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


#ifndef	__NRENDERPRIMITIVE__
#define	__NRENDERPRIMITIVE__


		#include "core/render_data.h"


namespace GS {
	namespace Core
	{
		class Item;
		class Emitter;
		struct Patch;
	}
	namespace Render {

/// Render primitive.
struct	Primitive
{
enum Type
{
	Type_Geometry		=	0,
	Type_Emitter,
	Type_TerrainPatch
};

		Type			type;

		const Core::Item *item;
		sGeometry		geometry;

		union
		{
			Core::Emitter *emitter;
			Core::Patch *patch;
		};

		Primitive(Geometry *g, const Core::Item *i, float) : type(Type_Geometry), item(i), geometry(g), emitter(0) {}
		Primitive(Core::Patch *p, const Core::Item *i, float) : type(Type_TerrainPatch), item(i), patch(p) {}
		Primitive(Core::Emitter *e, const Core::Item *i, float) : type(Type_Emitter), item(i), emitter(e) {}
};

	} // Render
} // GS


#endif	// __NRENDERPRIMITIVE__
