/* ----------------------------------------------------------------------------- GSFramework Copyright 2001-2013 Emmanuel Julien. All Rights Reserved. ----------------------------------------------------------------------------- */ #ifndef __NGEOMETRYTEMPLATE__ #define __NGEOMETRYTEMPLATE__ #include "core/geometry.h" #include "container/nlist.h" namespace GS { namespace Core { /*! @short Geometry template class. @author Thomas Simonnet (scorpheus) @author Emmanuel Julien (ejulien@nworks.fr) */ class GeometryTemplate { /// Polygon template. struct Polygon { List vertex; List normal; List color; List uv[__UV_PER_GEOMETRY__]; ushort material; }; /// Polygon vertex. struct PolygonVertex { uint ipoly; uint ivertex; }; Vector4 GetVertex(const PolygonVertex &); Vector4 GetNormal(const PolygonVertex &); Vector2 GetUV(uint channel, const PolygonVertex &); Color GetColor(const Color &); float merge_threshold; AutoPtr polygon; AutoList polygons; List materials; public: /*! @name Polygon declaration. @{ */ void Clear(); void BeginPolygon(); void PushVertex(const Vector4 &); void PushNormal(const Vector4 &); void PushUV(uint channel, const Vector2 &); void PushColor(const Color &); void EndPolygon(ushort material_index); /*! @} @name Material table declaration. @{ */ void ClearMaterials(); void PushMaterial(const char *uri); /// @} /// Set the vertex merge threshold. void SetVertexMergeThreshold(float threshold) { merge_threshold = threshold; } /// Instantiate the current template description. Geometry *Instantiate(const char *name); GeometryTemplate(); }; } // Core } // GS #endif // __NGEOMETRYTEMPLATE__