Ver código fonte

Sort render keys

Daniele Bartolini 12 anos atrás
pai
commit
8be3187f43
2 arquivos alterados com 27 adições e 23 exclusões
  1. 23 23
      engine/renderers/RenderContext.h
  2. 4 0
      engine/renderers/gl/GLRenderer.cpp

+ 23 - 23
engine/renderers/RenderContext.h

@@ -37,31 +37,31 @@ OTHER DEALINGS IN THE SOFTWARE.
 namespace crown
 {
 
-#define MAX_RENDER_LAYERS			32
-#define MAX_RENDER_STATES			1024
+#define MAX_RENDER_LAYERS						32
+#define MAX_RENDER_STATES						1024
 
 // State flags
-#define STATE_NONE					0x0000000000000000
-
-#define STATE_DEPTH_WRITE			0x0000000000000001
-#define STATE_COLOR_WRITE			0x0000000000000002
-#define STATE_ALPHA_WRITE			0x0000000000000004
-
-#define STATE_CULL_CW				0x0000000000000010
-#define STATE_CULL_CCW				0x0000000000000020
-
-#define STATE_TEXTURE_0				0x0000000000000100
-#define STATE_TEXTURE_1				0x0000000000000200
-#define STATE_TEXTURE_2				0x0000000000000400
-#define STATE_TEXTURE_3				0x0000000000000800
-#define STATE_TEXTURE_MASK			0x0000000000000F00
-#define STATE_MAX_TEXTURES			4
-
-#define STATE_PRIMITIVE_TRIANGLES	0x0000000000000000
-#define STATE_PRIMITIVE_POINTS		0x0000000000001000
-#define STATE_PRIMITIVE_LINES		0x0000000000002000
-#define STATE_PRIMITIVE_MASK		0x000000000000F000
-#define STATE_PRIMITIVE_SHIFT		12
+#define STATE_NONE								0x0000000000000000
+
+#define STATE_DEPTH_WRITE						0x0000000000000001
+#define STATE_COLOR_WRITE						0x0000000000000002
+#define STATE_ALPHA_WRITE						0x0000000000000004
+
+#define STATE_CULL_CW							0x0000000000000010
+#define STATE_CULL_CCW							0x0000000000000020
+
+#define STATE_TEXTURE_0							0x0000000000000100
+#define STATE_TEXTURE_1							0x0000000000000200
+#define STATE_TEXTURE_2							0x0000000000000400
+#define STATE_TEXTURE_3							0x0000000000000800
+#define STATE_TEXTURE_MASK						0x0000000000000F00
+#define STATE_MAX_TEXTURES						4
+
+#define STATE_PRIMITIVE_TRIANGLES				0x0000000000000000
+#define STATE_PRIMITIVE_POINTS					0x0000000000001000
+#define STATE_PRIMITIVE_LINES					0x0000000000002000
+#define STATE_PRIMITIVE_MASK					0x000000000000F000
+#define STATE_PRIMITIVE_SHIFT					12
 
 #define STATE_BLEND_FUNC_ZERO					0x0000000000010000			
 #define STATE_BLEND_FUNC_ONE					0x0000000000020000

+ 4 - 0
engine/renderers/gl/GLRenderer.cpp

@@ -245,11 +245,15 @@ public:
 		//old_rt.id = INVALID_ID;
 		uint8_t layer = 0xFF;
 
+		// Sort render keys
+		std::sort(context.m_keys, context.m_keys + context.m_num_states);
+
 		for (uint32_t s = 0; s < context.m_num_states; s++)
 		{
 			const uint64_t key_s = context.m_keys[s];
 			RenderKey key;
 			key.decode(key_s);
+
 			const RenderState& cur_state = context.m_states[s];
 			const uint64_t flags = cur_state.m_flags;
 			//const RenderTargetId& cur_rt = context.m_targets[layer];