Daniele Bartolini 12 лет назад
Родитель
Сommit
5e00a80ee8
1 измененных файлов с 10 добавлено и 4 удалено
  1. 10 4
      engine/renderers/backend/RenderContext.h

+ 10 - 4
engine/renderers/backend/RenderContext.h

@@ -36,9 +36,13 @@ OTHER DEALINGS IN THE SOFTWARE.
 namespace crown
 {
 
-#define MAX_RENDER_LAYERS						32
+#define MAX_RENDER_LAYERS						8
 #define MAX_RENDER_STATES						1024
 
+// Layer flags
+#define RENDER_LAYER_MASK						0xE000000000000000
+#define RENDER_LAYER_SHIFT						61
+
 // State flags
 #define STATE_NONE								0x0000000000000000
 
@@ -140,6 +144,7 @@ struct ClearState
 {
 	void clear()
 	{
+		m_flags = 0;
 		m_color = Color4::GRAY;
 		m_depth = 1.0f;
 	}
@@ -197,12 +202,12 @@ struct RenderKey
 
 	uint64_t encode()
 	{
-		return uint64_t(m_layer) << 56;
+		return uint64_t(m_layer) << RENDER_LAYER_SHIFT;
 	}
 
 	void decode(uint64_t key)
 	{
-		m_layer = (key >> 56) & 0xFF;
+		m_layer = (key & RENDER_LAYER_MASK) >> RENDER_LAYER_SHIFT;
 	}
 
 public:
@@ -313,6 +318,7 @@ struct RenderContext
 
 	void commit(uint8_t layer)
 	{
+		CE_ASSERT(layer < MAX_RENDER_LAYERS, "Layer out of bounds");
 		m_render_key.m_layer = layer;
 
 		m_states[m_num_states] = m_state;
@@ -347,7 +353,6 @@ public:
 	// Per-state data
 	uint32_t m_num_states;
 	RenderState m_states[MAX_RENDER_STATES];
-	ClearState m_clears[MAX_RENDER_STATES];
 	uint64_t m_keys[MAX_RENDER_STATES];
 
 	// Per-layer data
@@ -356,6 +361,7 @@ public:
 	Matrix4x4 m_projection_matrices[MAX_RENDER_LAYERS];
 	ViewRect m_viewports[MAX_RENDER_LAYERS];
 	ViewRect m_scissors[MAX_RENDER_LAYERS];
+	ClearState m_clears[MAX_RENDER_LAYERS];
 
 	CommandBuffer m_commands;
 	ConstantBuffer m_constants;