Daniele Bartolini hace 10 años
padre
commit
23bc52eb56

+ 2 - 1
src/device.cpp

@@ -244,9 +244,10 @@ World* Device::create_world()
 {
 	World* w = CE_NEW(default_allocator(), World)(default_allocator()
 		, *_resource_manager
-		, *_lua_environment
+		, *_shader_manager
 		, *_material_manager
 		, *_unit_manager
+		, *_lua_environment
 		);
 	array::push_back(_worlds, w);
 	return w;

+ 4 - 5
src/world/material.cpp

@@ -3,7 +3,6 @@
  * License: https://github.com/taylor001/crown/blob/master/LICENSE
  */
 
-#include "device.h"
 #include "material.h"
 #include "material_manager.h"
 #include "material_resource.h"
@@ -20,7 +19,7 @@ namespace crown
 
 using namespace material_resource;
 
-void Material::create(const MaterialResource* mr, MaterialManager& mm)
+void Material::create(const MaterialResource* mr)
 {
 	const uint32_t size = mr->dynamic_data_size;
 	const uint32_t offt = mr->dynamic_data_offset;
@@ -35,7 +34,7 @@ void Material::destroy() const
 	default_allocator().deallocate(data);
 }
 
-void Material::bind() const
+void Material::bind(ResourceManager& rm, ShaderManager& sm) const
 {
 	// Set samplers
 	for (uint32_t i = 0; i < resource->num_textures; ++i)
@@ -47,7 +46,7 @@ void Material::bind() const
 		bgfx::TextureHandle texture;
 		sampler.idx = th->sampler_handle;
 
-		TextureResource* teximg = (TextureResource*) device()->resource_manager()->get(TEXTURE_TYPE, td->id);
+		const TextureResource* teximg = (TextureResource*)rm.get(TEXTURE_TYPE, td->id);
 		texture.idx = teximg->handle.idx;
 
 		bgfx::setTexture(i, sampler, texture);
@@ -63,7 +62,7 @@ void Material::bind() const
 		bgfx::setUniform(buh, (char*)uh + sizeof(uh->uniform_handle));
 	}
 
-	const ShaderManager::ShaderData& sd = device()->shader_manager()->get(resource->shader);
+	const ShaderManager::ShaderData& sd = sm.get(resource->shader);
 	bgfx::setState(sd.state);
 	bgfx::submit(0, sd.program);
 }

+ 2 - 2
src/world/material.h

@@ -15,9 +15,9 @@ namespace crown
 
 struct Material
 {
-	void create(const MaterialResource* mr, MaterialManager& mm);
+	void create(const MaterialResource* mr);
 	void destroy() const;
-	void bind() const;
+	void bind(ResourceManager& rm, ShaderManager& sm) const;
 
 	void set_float(const char* name, float val);
 	void set_vector2(const char* name, const Vector2& val);

+ 3 - 3
src/world/material_manager.cpp

@@ -19,8 +19,8 @@ MaterialManager::MaterialManager(Allocator& a, ResourceManager& rm)
 
 MaterialManager::~MaterialManager()
 {
-	const SortMap<StringId64, Material*>::Entry* begin = sort_map::begin(_materials);
-	const SortMap<StringId64, Material*>::Entry* end = sort_map::end(_materials);
+	auto begin = sort_map::begin(_materials);
+	auto end = sort_map::end(_materials);
 
 	for (; begin != end; ++begin)
 	{
@@ -35,7 +35,7 @@ void MaterialManager::create_material(StringId64 id)
 		return;
 
 	Material* mat = CE_NEW(*_allocator, Material);
-	mat->create((MaterialResource*)_resource_manager->get(MATERIAL_TYPE, id), *this);
+	mat->create((MaterialResource*)_resource_manager->get(MATERIAL_TYPE, id));
 
 	sort_map::set(_materials, id, mat);
 	sort_map::sort(_materials);

+ 4 - 3
src/world/render_world.cpp

@@ -20,10 +20,11 @@
 namespace crown
 {
 
-RenderWorld::RenderWorld(Allocator& a, ResourceManager& rm, MaterialManager& mm, UnitManager& um)
+RenderWorld::RenderWorld(Allocator& a, ResourceManager& rm, ShaderManager& sm, MaterialManager& mm, UnitManager& um)
 	: _marker(MARKER)
 	, _allocator(&a)
 	, _resource_manager(&rm)
+	, _shader_manager(&sm)
 	, _material_manager(&mm)
 	, _debug_drawing(false)
 	, _mesh_map(a)
@@ -494,7 +495,7 @@ void RenderWorld::render(const Matrix4x4& view, const Matrix4x4& projection, uin
 			bgfx::setVertexBuffer(_mesh_data.mesh[i].vbh);
 			bgfx::setIndexBuffer(_mesh_data.mesh[i].ibh);
 
-			_material_manager->get(_mesh_data.material[i])->bind();
+			_material_manager->get(_mesh_data.material[i])->bind(*_resource_manager, *_shader_manager);
 		}
 	}
 
@@ -505,7 +506,7 @@ void RenderWorld::render(const Matrix4x4& view, const Matrix4x4& projection, uin
 		bgfx::setIndexBuffer(_sprite_data.sprite[i].ibh, _sprite_data.frame[i] * 6, 6);
 		bgfx::setTransform(to_float_ptr(_sprite_data.world[i]));
 
-		_material_manager->get(_sprite_data.material[i])->bind();
+		_material_manager->get(_sprite_data.material[i])->bind(*_resource_manager, *_shader_manager);
 	}
 }
 

+ 2 - 1
src/world/render_world.h

@@ -22,7 +22,7 @@ class RenderWorld
 {
 public:
 
-	RenderWorld(Allocator& a, ResourceManager& rm, MaterialManager& mm, UnitManager& um);
+	RenderWorld(Allocator& a, ResourceManager& rm, ShaderManager& sm, MaterialManager& mm, UnitManager& um);
 	~RenderWorld();
 
 	/// Creates a new mesh instance.
@@ -261,6 +261,7 @@ private:
 
 	Allocator* _allocator;
 	ResourceManager* _resource_manager;
+	ShaderManager* _shader_manager;
 	MaterialManager* _material_manager;
 
 	bgfx::UniformHandle _u_light_pos;

+ 2 - 2
src/world/world.cpp

@@ -24,7 +24,7 @@
 namespace crown
 {
 
-World::World(Allocator& a, ResourceManager& rm, LuaEnvironment& env, MaterialManager& mm, UnitManager& um)
+World::World(Allocator& a, ResourceManager& rm, ShaderManager& sm, MaterialManager& mm, UnitManager& um, LuaEnvironment& env)
 	: _marker(MARKER)
 	, _allocator(&a)
 	, _resource_manager(&rm)
@@ -43,7 +43,7 @@ World::World(Allocator& a, ResourceManager& rm, LuaEnvironment& env, MaterialMan
 {
 	_lines = create_debug_line(true);
 	_scene_graph = CE_NEW(*_allocator, SceneGraph)(*_allocator);
-	_render_world = CE_NEW(*_allocator, RenderWorld)(*_allocator, rm, mm, um);
+	_render_world = CE_NEW(*_allocator, RenderWorld)(*_allocator, rm, sm, mm, um);
 	_physics_world = PhysicsWorld::create(*_allocator, rm, um, *_lines);
 	_sound_world = SoundWorld::create(*_allocator);
 }

+ 1 - 1
src/world/world.h

@@ -23,7 +23,7 @@ class World
 {
 public:
 
-	World(Allocator& a, ResourceManager& rm, LuaEnvironment& env, MaterialManager& mm, UnitManager& um);
+	World(Allocator& a, ResourceManager& rm, ShaderManager& sm, MaterialManager& mm, UnitManager& um, LuaEnvironment& env);
 	~World();
 
 	UnitId spawn_unit(const UnitResource& ur, const Vector3& position = VECTOR3_ZERO, const Quaternion& rotation = QUATERNION_IDENTITY);