Переглянути джерело

CE_ASSERT() when object does not exist

Daniele Bartolini 12 роки тому
батько
коміт
02160c26c5
1 змінених файлів з 35 додано та 9 видалено
  1. 35 9
      engine/renderers/Renderer.h

+ 35 - 9
engine/renderers/Renderer.h

@@ -140,6 +140,8 @@ public:
 	/// originally specified to Renderer::create_vertex_buffer() (or Renderer::create_dynamic_vertex_buffer())
 	inline void update_vertex_buffer(VertexBufferId id, size_t offset, size_t count, const void* vertices)
 	{
+		CE_ASSERT(m_vertex_buffers.has(id), "Vertex buffer does not exist");
+
 		m_submit->m_commands.write(CommandType::UPDATE_VERTEX_BUFFER);
 		m_submit->m_commands.write(id);
 		m_submit->m_commands.write(offset);
@@ -150,6 +152,8 @@ public:
 	/// Destroys the given vertex buffer @a id.
 	inline void destroy_vertex_buffer(VertexBufferId id)
 	{
+		CE_ASSERT(m_vertex_buffers.has(id), "Vertex buffer does not exist");
+
 		m_submit->m_commands.write(CommandType::DESTROY_VERTEX_BUFFER);
 		m_submit->m_commands.write(id);
 	}
@@ -189,6 +193,8 @@ public:
 	/// originally specified to Renderer::create_index_buffer() (or Renderer::create_dynamic_index_buffer())
 	inline void update_index_buffer(IndexBufferId id, size_t offset, size_t count, const void* indices)
 	{
+		CE_ASSERT(m_index_buffers.has(id), "Index buffer does not exist");
+
 		m_submit->m_commands.write(CommandType::UPDATE_INDEX_BUFFER);
 		m_submit->m_commands.write(id);
 		m_submit->m_commands.write(offset);
@@ -199,6 +205,8 @@ public:
 	/// Destroys the @a id index buffer.
 	inline void destroy_index_buffer(IndexBufferId id)
 	{
+		CE_ASSERT(m_index_buffers.has(id), "Index buffer does not exist");
+
 		m_submit->m_commands.write(CommandType::DESTROY_INDEX_BUFFER);
 		m_submit->m_commands.write(id);
 	}
@@ -224,6 +232,8 @@ public:
 	/// to Renderer::create_texture()
 	inline void update_texture(TextureId id, uint32_t x, uint32_t y, uint32_t width, uint32_t height, const void* data)
 	{
+		CE_ASSERT(m_textures.has(id), "Texture does not exist");
+
 		m_submit->m_commands.write(CommandType::UPDATE_TEXTURE);
 		m_submit->m_commands.write(id);
 		m_submit->m_commands.write(x);
@@ -236,6 +246,8 @@ public:
 	/// Destroys the texture @æ id.
 	inline void destroy_texture(TextureId id)
 	{
+		CE_ASSERT(m_textures.has(id), "Texture does not exist");
+
 		m_submit->m_commands.write(CommandType::DESTROY_TEXTURE);
 		m_submit->m_commands.write(id);
 	}
@@ -256,6 +268,8 @@ public:
 	/// Destroy the shader @a id.
 	inline void destroy_shader(ShaderId id)
 	{
+		CE_ASSERT(m_shaders.has(id), "Shader does not exist");
+
 		m_submit->m_commands.write(CommandType::DESTROY_SHADER);
 		m_submit->m_commands.write(id);
 	}
@@ -276,6 +290,8 @@ public:
 	/// Destroys the gpu program @a id.
 	inline void destroy_gpu_program(GPUProgramId id)
 	{
+		CE_ASSERT(m_gpu_programs.has(id), "GPU program does not exist");
+
 		m_submit->m_commands.write(CommandType::DESTROY_GPU_PROGRAM);
 		m_submit->m_commands.write(id);
 	}
@@ -304,6 +320,8 @@ public:
 	/// Destroys the uniform @a id.
 	inline void destroy_uniform(UniformId id)
 	{
+		CE_ASSERT(m_uniforms.has(id), "Uniform does not exist");
+
 		m_submit->m_commands.write(CommandType::DESTROY_UNIFORM);
 		m_submit->m_commands.write(id);
 	}
@@ -601,34 +619,42 @@ public:
 		m_submit->set_pose(pose);
 	}
 
-	inline void set_program(GPUProgramId program)
+	inline void set_program(GPUProgramId id)
 	{
-		m_submit->set_program(program);
+		CE_ASSERT(m_gpu_programs.has(id), "GPU program does not exist");
+		m_submit->set_program(id);
 	}
 
-	inline void set_vertex_buffer(VertexBufferId vb)
+	inline void set_vertex_buffer(VertexBufferId id)
 	{
-		m_submit->set_vertex_buffer(vb);
+		CE_ASSERT(m_vertex_buffers.has(id), "Vertex buffer does not exist");
+		m_submit->set_vertex_buffer(id);
 	}
 
-	inline void set_index_buffer(IndexBufferId ib)
+	inline void set_index_buffer(IndexBufferId id)
 	{
-		m_submit->set_index_buffer(ib);
+		CE_ASSERT(m_index_buffers.has(id), "Index buffer does not exist");
+		m_submit->set_index_buffer(id);
 	}
 
 	inline void set_uniform(UniformId id, UniformType::Enum type, const void* value, uint8_t num)
 	{
+		CE_ASSERT(m_uniforms.has(id), "Uniform does not exist");
+		CE_ASSERT_NOT_NULL(value);
 		m_submit->set_uniform(id, type, value, num);
 	}
 
 	inline void set_texture(uint8_t unit, UniformId sampler_uniform, TextureId texture, uint32_t flags)
 	{
+		CE_ASSERT(m_uniforms.has(sampler_uniform), "Uniform does not exist");
+		CE_ASSERT(m_textures.has(texture), "Texture does not exist");
 		m_submit->set_texture(unit, sampler_uniform, texture, flags);
 	}
 
-	inline void set_layer_render_target(uint8_t layer, RenderTargetId target)
+	inline void set_layer_render_target(uint8_t layer, RenderTargetId id)
 	{
-		m_submit->set_layer_render_target(layer, target);
+		CE_ASSERT(m_render_targets.has(id), "Render target does not exist");
+		m_submit->set_layer_render_target(layer, id);
 	}
 
 	inline void set_layer_clear(uint8_t layer, uint8_t flags, const Color4& color, float depth)
@@ -728,7 +754,7 @@ protected:
 	IdTable<CROWN_MAX_SHADERS> m_shaders;
 	IdTable<CROWN_MAX_GPU_PROGRAMS> m_gpu_programs;
 	IdTable<CROWN_MAX_UNIFORMS> m_uniforms;
-	// IdTable<CROWN_MAX_RENDER_TARGETS> m_render_targets;
+	IdTable<CROWN_MAX_RENDER_TARGETS> m_render_targets;
 
 	bool m_is_initialized;
 	bool m_should_run;