#pragma once #define MLR_GOSVERTEXPOOL_HPP #include #include #include #include namespace MidLevelRenderer { //########################################################################## //###################### GOSVertexPool ############################### //########################################################################## class GOSVertexPool { public: GOSVertexPool(); void Reset(); // //------------------------------------------------------------------------------------------------------------ // int GetLength () { Check_Object(this); return vertices.GetLength()-1; } unsigned GetLast () { Check_Object(this); return lastUsed; } int Increase (int add=1) { Check_Object(this); lastUsed += add; Verify(lastUsed vertices; // , Max_Number_Vertices_Per_Frame+4*Max_Number_ScreenQuads_Per_Frame Stuff::DynamicArrayOf vertices2uv; // , Max_Number_Vertices_Per_Frame+4*Max_Number_ScreenQuads_Per_Frame Stuff::DynamicArrayOf vertices3uv; // , Max_Number_Vertices_Per_Frame+4*Max_Number_ScreenQuads_Per_Frame Stuff::DynamicArrayOf indices; // , Max_Number_Vertices_Per_Frame Stuff::DynamicArrayOf verticesDB; // , Max_Number_Vertices_Per_Mesh Stuff::DynamicArrayOf vertices2uvDB; // , Max_Number_Vertices_Per_Mesh Stuff::DynamicArrayOf vertices3uvDB; // , Max_Number_Vertices_Per_Mesh Stuff::DynamicArrayOf indicesDB; // , Max_Number_Vertices_Per_Mesh private: GOSVertexPool(const GOSVertexPool&); }; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ inline GOSVertexPool::GOSVertexPool() { Verify(gos_GetCurrentHeap() == ClipperHeap); lastUsed = 0; lastUsed2uv = 0; lastUsed3uv = 0; lastUsedIndex = 0; gos_PushCurrentHeap(StaticHeap); vertices.SetLength(Limits::Max_Size_Of_Vertex_Buffer); vertices2uv.SetLength(Limits::Max_Size_Of_Vertex_Buffer); vertices3uv.SetLength(Limits::Max_Size_Of_Vertex_Buffer); indices.SetLength(Limits::Max_Size_Of_Index_Buffer); verticesDB.SetLength(Limits::Max_Size_Of_Vertex_Buffer); vertices2uvDB.SetLength(Limits::Max_Size_Of_Vertex_Buffer); vertices3uvDB.SetLength(Limits::Max_Size_Of_Vertex_Buffer); indicesDB.SetLength(Limits::Max_Size_Of_Index_Buffer); gos_PopCurrentHeap(); } inline void GOSVertexPool::Reset() { Check_Object(this); lastUsed = 0; lastUsed2uv = 0; lastUsedIndex = 0; } }