| 
									
										
										
										
											2010-10-03 08:20:24 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #ifndef _VERTEXMANAGERBASE_H
 | 
					
						
							|  |  |  | #define _VERTEXMANAGERBASE_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-12 17:48:20 +01:00
										 |  |  | #include "Common.h"
 | 
					
						
							| 
									
										
										
										
											2013-02-26 22:47:50 -06:00
										 |  |  | #include <vector>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-26 09:25:08 +00:00
										 |  |  | class NativeVertexFormat; | 
					
						
							| 
									
										
										
										
											2012-01-04 00:42:22 -08:00
										 |  |  | class PointerWrap; | 
					
						
							| 
									
										
										
										
											2010-11-26 09:25:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-03 08:20:24 +00:00
										 |  |  | class VertexManager | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2013-02-21 23:12:53 -06:00
										 |  |  | private: | 
					
						
							| 
									
										
										
										
											2013-03-12 17:48:20 +01:00
										 |  |  | 	static const u32 SMALLEST_POSSIBLE_VERTEX = sizeof(float)*3;                 // 3 pos
 | 
					
						
							|  |  |  | 	static const u32 LARGEST_POSSIBLE_VERTEX = sizeof(float)*45 + sizeof(u32)*2; // 3 pos, 3*3 normal, 2*u32 color, 8*4 tex, 1 posMat 
 | 
					
						
							| 
									
										
										
										
											2013-02-21 23:12:53 -06:00
										 |  |  | 	 | 
					
						
							|  |  |  | 	static const u32 MAX_PRIMITIVES_PER_COMMAND = (u16)-1; | 
					
						
							|  |  |  | 	 | 
					
						
							| 
									
										
										
										
											2010-10-03 08:20:24 +00:00
										 |  |  | public: | 
					
						
							| 
									
										
										
										
											2013-03-12 17:48:20 +01:00
										 |  |  | 	static const u32 MAXVBUFFERSIZE = ROUND_UP_POW2 (MAX_PRIMITIVES_PER_COMMAND * LARGEST_POSSIBLE_VERTEX); | 
					
						
							| 
									
										
										
										
											2013-02-21 23:12:53 -06:00
										 |  |  | 	 | 
					
						
							|  |  |  | 	// We may convert triangle-fans to triangle-lists, almost 3x as many indices.
 | 
					
						
							| 
									
										
										
										
											2013-03-12 17:48:20 +01:00
										 |  |  | 	static const u32 MAXIBUFFERSIZE = ROUND_UP_POW2 (MAX_PRIMITIVES_PER_COMMAND * 3); | 
					
						
							| 
									
										
										
										
											2010-10-03 08:20:24 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	VertexManager(); | 
					
						
							| 
									
										
										
										
											2013-02-21 23:12:53 -06:00
										 |  |  | 	// needs to be virtual for DX11's dtor
 | 
					
						
							|  |  |  | 	virtual ~VertexManager(); | 
					
						
							| 
									
										
										
										
											2010-10-03 08:20:24 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-21 19:10:00 -06:00
										 |  |  | 	static void AddVertices(int _primitive, u32 _numVertices); | 
					
						
							| 
									
										
										
										
											2010-10-03 08:20:24 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-21 12:36:29 +01:00
										 |  |  | 	static u8 *s_pCurBufferPointer; | 
					
						
							| 
									
										
										
										
											2013-02-22 01:41:52 -06:00
										 |  |  | 	static u8 *s_pBaseBufferPointer; | 
					
						
							| 
									
										
										
										
											2013-02-21 12:36:29 +01:00
										 |  |  | 	static u8 *s_pEndBufferPointer; | 
					
						
							| 
									
										
										
										
											2010-10-03 08:20:24 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-26 22:47:50 -06:00
										 |  |  | 	static u32 GetRemainingSize(); | 
					
						
							|  |  |  | 	static void PrepareForAdditionalData(int primitive, u32 count, u32 stride); | 
					
						
							|  |  |  | 	static u32 GetRemainingIndices(int primitive); | 
					
						
							| 
									
										
										
										
											2010-10-03 08:20:24 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	static void Flush(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-26 09:25:08 +00:00
										 |  |  | 	virtual ::NativeVertexFormat* CreateNativeVertexFormat() = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-01-04 00:42:22 -08:00
										 |  |  | 	static void DoState(PointerWrap& p); | 
					
						
							| 
									
										
										
										
											2012-10-20 10:22:15 -03:00
										 |  |  | 	virtual void CreateDeviceObjects(){}; | 
					
						
							|  |  |  | 	virtual void DestroyDeviceObjects(){}; | 
					
						
							| 
									
										
										
										
											2013-02-22 01:41:52 -06:00
										 |  |  | 	 | 
					
						
							| 
									
										
										
										
											2010-10-03 08:20:24 +00:00
										 |  |  | protected: | 
					
						
							| 
									
										
										
										
											2013-03-19 21:51:12 -04:00
										 |  |  | 	u16* GetTriangleIndexBuffer() { return &TIBuffer[0]; } | 
					
						
							|  |  |  | 	u16* GetLineIndexBuffer() { return &LIBuffer[0]; } | 
					
						
							|  |  |  | 	u16* GetPointIndexBuffer() { return &PIBuffer[0]; } | 
					
						
							|  |  |  | 	u8* GetVertexBuffer() { return &s_pBaseBufferPointer[0]; } | 
					
						
							| 
									
										
										
										
											2010-10-03 08:20:24 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-01-04 00:42:22 -08:00
										 |  |  | 	virtual void vDoState(PointerWrap& p) { DoStateShared(p); } | 
					
						
							|  |  |  | 	void DoStateShared(PointerWrap& p); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-03 08:20:24 +00:00
										 |  |  | private: | 
					
						
							| 
									
										
										
										
											2013-02-22 01:41:52 -06:00
										 |  |  | 	bool IsFlushed() const; | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	void ResetBuffer(); | 
					
						
							|  |  |  | 	 | 
					
						
							| 
									
										
										
										
											2010-10-19 22:24:27 +00:00
										 |  |  | 	//virtual void Draw(u32 stride, bool alphapass) = 0;
 | 
					
						
							|  |  |  | 	// temp
 | 
					
						
							| 
									
										
										
										
											2010-10-03 08:20:24 +00:00
										 |  |  | 	virtual void vFlush() = 0; | 
					
						
							| 
									
										
										
										
											2013-02-21 12:36:29 +01:00
										 |  |  | 	 | 
					
						
							| 
									
										
										
										
											2013-02-26 22:47:50 -06:00
										 |  |  | 	std::vector<u8> LocalVBuffer; | 
					
						
							|  |  |  | 	std::vector<u16> TIBuffer; | 
					
						
							|  |  |  | 	std::vector<u16> LIBuffer; | 
					
						
							|  |  |  | 	std::vector<u16> PIBuffer; | 
					
						
							| 
									
										
										
										
											2010-10-03 08:20:24 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern VertexManager *g_vertex_manager; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif
 |