Daniele Bartolini 9 gadi atpakaļ
vecāks
revīzija
4925e2c591

+ 1 - 4
src/world/debug_line.cpp

@@ -239,11 +239,8 @@ void DebugLine::submit()
 	bgfx::allocTransientVertexBuffer(&tvb, _num * 2, _vertex_decl);
 	memcpy(tvb.data, _lines, sizeof(Line) * _num);
 
-	const ShaderData& sd = _shader_manager->get(_shader);
-
 	bgfx::setVertexBuffer(&tvb, 0, _num * 2);
-	bgfx::setState(sd.state);
-	bgfx::submit(1, sd.program);
+	_shader_manager->submit(_shader, 1);
 }
 
 } // namespace crown

+ 1 - 3
src/world/material.cpp

@@ -42,9 +42,7 @@ void Material::bind(ResourceManager& rm, ShaderManager& sm, u8 view) const
 		bgfx::setUniform(buh, (char*)uh + sizeof(uh->uniform_handle));
 	}
 
-	const ShaderData& sd = sm.get(_resource->shader);
-	bgfx::setState(sd.state);
-	bgfx::submit(view, sd.program);
+	sm.submit(_resource->shader, view);
 }
 
 void Material::set_float(StringId32 name, f32 value)

+ 14 - 7
src/world/shader_manager.cpp

@@ -84,7 +84,11 @@ void ShaderManager::offline(StringId64 id, ResourceManager& rm)
 	for (u32 i = 0; i < array::size(shader->_data); ++i)
 	{
 		const ShaderResource::Data& data = shader->_data[i];
-		const ShaderData& sd = get(data.name);
+
+		ShaderData sd;
+		sd.state = BGFX_STATE_DEFAULT;
+		sd.program = BGFX_INVALID_HANDLE;
+		sd = sort_map::get(_shader_map, data.name, sd);
 
 		bgfx::destroyProgram(sd.program);
 
@@ -107,13 +111,16 @@ void ShaderManager::add_shader(StringId32 name, u64 state, bgfx::ProgramHandle p
 	sort_map::sort(_shader_map);
 }
 
-const ShaderData& ShaderManager::get(StringId32 id)
+void ShaderManager::submit(StringId32 shader_id, u8 view_id)
 {
-	CE_ASSERT(sort_map::has(_shader_map, id), "Shader not found");
-	ShaderData deffault;
-	deffault.state = BGFX_STATE_DEFAULT;
-	deffault.program = BGFX_INVALID_HANDLE;
-	return sort_map::get(_shader_map, id, deffault);
+	CE_ASSERT(sort_map::has(_shader_map, shader_id), "Shader not found");
+	ShaderData sd;
+	sd.state = BGFX_STATE_DEFAULT;
+	sd.program = BGFX_INVALID_HANDLE;
+	sd = sort_map::get(_shader_map, shader_id, sd);
+
+	bgfx::setState(sd.state);
+	bgfx::submit(view_id, sd.program);
 }
 
 } // namespace crown

+ 8 - 10
src/world/shader_manager.h

@@ -6,25 +6,25 @@
 #pragma once
 
 #include "container_types.h"
-#include "memory_types.h"
 #include "filesystem_types.h"
+#include "memory_types.h"
 #include "resource_types.h"
 #include "string_id.h"
 #include <bgfx/bgfx.h>
 
 namespace crown
 {
-struct ShaderData
-{
-	u64 state;
-	bgfx::ProgramHandle program;
-};
-
 /// Manages shaders.
 ///
 /// @ingroup World
 struct ShaderManager
 {
+	struct ShaderData
+	{
+		u64 state;
+		bgfx::ProgramHandle program;
+	};
+
 	typedef SortMap<StringId32, ShaderData> ShaderMap;
 	ShaderMap _shader_map;
 
@@ -38,9 +38,7 @@ public:
 	void online(StringId64 id, ResourceManager& rm);
 	void offline(StringId64 id, ResourceManager& rm);
 	void unload(Allocator& a, void* res);
-
-	/// Returns the shader @a id.
-	const ShaderData& get(StringId32 id);
+	void submit(StringId32 shader_id, u8 view_id);
 };
 
 } // namespace crown