#pragma once #include "Mesh.h" #include "Renderer.h" #include #include #include #include struct VERTEX { XMFLOAT3 Position; XMFLOAT3 Normal; XMFLOAT2 TexCoord; }; struct MeshResourceStruct { unsigned int ReferenceCount; shared_ptr MeshPointer; }; typedef map MeshResourceMap; struct MaterialResourceStruct { unsigned int ReferenceCount; shared_ptr MaterialPointer; }; typedef map MaterialResourceMap; typedef map> RendererResourceMap; class ResourceManager { public: ResourceManager(); ~ResourceManager(); shared_ptr GetRenderer(wstring rendererName); shared_ptr GetMesh(wstring modelName); void ReleaseMesh(wstring modelName); void CreateMaterialFromTexture(wstring textureName); void CreateMaterialWithNoTexture(wstring materialName, XMFLOAT4 diffuseColour, XMFLOAT4 specularColour, float shininess, float opacity); void CreateMaterial(wstring materialName, XMFLOAT4 diffuseColour, XMFLOAT4 specularColour, float shininess, float opacity, wstring textureName); shared_ptr GetMaterial(wstring materialName); void ReleaseMaterial(wstring materialName); private: MeshResourceMap _meshResources; MaterialResourceMap _materialResources; RendererResourceMap _rendererResources; ComPtr _device; ComPtr _deviceContext; ComPtr _defaultTexture; shared_ptr CreateNodes(aiNode * sceneNode); shared_ptr LoadModelFromFile(wstring modelName); void InitialiseMaterial(wstring materialName, XMFLOAT4 diffuseColour, XMFLOAT4 specularColour, float shininess, float opacity, wstring textureName); };