| 
									
										
										
										
											2014-02-10 13:54:46 -05:00
										 |  |  | #pragma once
 | 
					
						
							| 
									
										
										
										
											2010-10-03 08:20:24 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-26 22:47:50 -06:00
										 |  |  | #include <vector>
 | 
					
						
							| 
									
										
										
										
											2014-09-07 20:06:58 -05:00
										 |  |  | #include "Common/CommonTypes.h"
 | 
					
						
							| 
									
										
										
										
											2013-02-26 22:47:50 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-15 21:44:46 +01:00
										 |  |  | enum PrimitiveType { | 
					
						
							|  |  |  | 	PRIMITIVE_POINTS, | 
					
						
							|  |  |  | 	PRIMITIVE_LINES, | 
					
						
							|  |  |  | 	PRIMITIVE_TRIANGLES, | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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
 | 
					
						
							| 
									
										
										
										
											2013-10-29 01:23:17 -04:00
										 |  |  | 	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; | 
					
						
							| 
									
										
										
										
											2013-10-29 01:23:17 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											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-10-29 01:23:17 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											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 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); | 
					
						
							| 
									
										
										
										
											2014-09-11 13:00:40 -04:00
										 |  |  | 	virtual void CreateDeviceObjects(){} | 
					
						
							|  |  |  | 	virtual void DestroyDeviceObjects(){} | 
					
						
							| 
									
										
										
										
											2013-10-29 01:23:17 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-03 08:20:24 +00:00
										 |  |  | protected: | 
					
						
							| 
									
										
										
										
											2014-01-23 14:27:02 +01:00
										 |  |  | 	virtual void vDoState(PointerWrap& p) {  } | 
					
						
							| 
									
										
										
										
											2012-01-04 00:42:22 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-15 21:44:46 +01:00
										 |  |  | 	static PrimitiveType current_primitive_type; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-23 15:27:18 +01:00
										 |  |  | 	virtual void ResetBuffer(u32 stride) = 0; | 
					
						
							| 
									
										
										
										
											2013-10-29 01:23:17 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-23 13:11:38 +01:00
										 |  |  | private: | 
					
						
							|  |  |  | 	static bool IsFlushed; | 
					
						
							| 
									
										
										
										
											2013-10-29 01:23:17 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-19 22:24:27 +00:00
										 |  |  | 	//virtual void Draw(u32 stride, bool alphapass) = 0;
 | 
					
						
							|  |  |  | 	// temp
 | 
					
						
							| 
									
										
										
										
											2014-02-03 16:56:17 +01:00
										 |  |  | 	virtual void vFlush(bool useDstAlpha) = 0; | 
					
						
							| 
									
										
										
										
											2010-10-03 08:20:24 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern VertexManager *g_vertex_manager; |