2D_Game_Engine
Loading...
Searching...
No Matches
texturesmanager.cpp
Go to the documentation of this file.
1#include <pch.hpp>
2
3#include <texturesmanager.hpp>
4
5std::pair<uint32_t,std::shared_ptr<Texture>> TexturesManager::GetTexture(const std::string &path,int mag_filter,int min_filter){
6 for(auto &[id,texture]:m_Textures){
7 Texture &tex=*texture.texture;
8
9 if(tex.m_LoadedMagFilter==mag_filter && tex.m_LoadedMinFilter==min_filter && tex.m_LoadedFilePath==path){
10 texture.copies++;
11 return {id,texture.texture};
12 }
13 }
14
15 uint32_t id=m_NextID++;
16 std::shared_ptr<Texture> tex=std::make_shared<Texture>(path,mag_filter,min_filter,id);
17
18 m_Textures[id]=TextureInfo(tex);
19 return {id,tex};
20}
21
22std::shared_ptr<Texture> TexturesManager::GetTexture(uint32_t id){
23 auto it=m_Textures.find(id);
24
25 if(it==m_Textures.end()){
26 return nullptr;
27 }
28
29 return it->second.texture;
30}
31
32std::pair<uint32_t,std::shared_ptr<SpriteSheet>> TexturesManager::GetSpriteSheet(const std::string &path,unsigned int tile_width,unsigned int tile_height,int mag_filter,int min_filter){
33 for(auto &[id,texture]:m_SpriteSheets){
34 SpriteSheet &tex=*texture.texture;
35
36 if(tex.m_LoadedMagFilter==mag_filter && tex.m_LoadedMinFilter==min_filter && tex.m_TileWidth==tile_width && tex.m_TileHeight==tile_height && tex.m_LoadedFilePath==path){
37 texture.copies++;
38 return {id,texture.texture};
39 }
40 }
41
42 uint32_t id=m_NextID++;
43 std::shared_ptr<SpriteSheet> tex=std::make_shared<SpriteSheet>(path,tile_width,tile_height,mag_filter,min_filter,id);
44
45 m_SpriteSheets[id]=SpriteSheetInfo(tex);
46 return {id,tex};
47}
48
49std::shared_ptr<SpriteSheet> TexturesManager::GetSpriteSheet(uint32_t id){
50 auto it=m_SpriteSheets.find(id);
51
52 if(it==m_SpriteSheets.end()){
53 return nullptr;
54 }
55
56 return it->second.texture;
57}
58
59void TexturesManager::ReleaseTexture(uint32_t texture_id){
60 auto it=m_Textures.find(texture_id);
61
62 if(it==m_Textures.end()){
63 return;
64 }
65
66 if(--(it->second.copies)==0){
67 m_Textures.erase(it);
68 }
69}
70
71void TexturesManager::ReleaseSpriteSheet(uint32_t texture_id){
72 auto it=m_SpriteSheets.find(texture_id);
73
74 if(it==m_SpriteSheets.end()){
75 return;
76 }
77
78 if(--(it->second.copies)==0){
79 m_SpriteSheets.erase(it);
80 }
81}
82
83std::pair<uint32_t,std::shared_ptr<Texture>> TexturesManager::UpdateTexture(uint32_t texture_id,const std::string &path,int mag_filter,int min_filter){
84 ReleaseTexture(texture_id);
85
86 return GetTexture(path,mag_filter,min_filter);
87}
88
89std::pair<uint32_t,std::shared_ptr<SpriteSheet>> TexturesManager::UpdateSpriteSheet(uint32_t texture_id,const std::string &path,unsigned int tile_width,unsigned int tile_height,int mag_filter,int min_filter){
90 ReleaseSpriteSheet(texture_id);
91
92 return GetSpriteSheet(path,tile_width,tile_height,mag_filter,min_filter);
93}
int m_LoadedMinFilter
Definition texture.hpp:79
std::string m_LoadedFilePath
Definition texture.hpp:78
int m_LoadedMagFilter
Definition texture.hpp:79
std::pair< uint32_t, std::shared_ptr< Texture > > UpdateTexture(uint32_t texture_id, const std::string &path, int mag_filter, int min_filter)
std::pair< uint32_t, std::shared_ptr< SpriteSheet > > GetSpriteSheet(const std::string &path, unsigned int tile_width, unsigned int tile_height, int mag_filter, int min_filter)
void ReleaseSpriteSheet(uint32_t texture_id)
std::pair< uint32_t, std::shared_ptr< SpriteSheet > > UpdateSpriteSheet(uint32_t texture_id, const std::string &path, unsigned int tile_width, unsigned int tile_height, int mag_filter, int min_filter)
void ReleaseTexture(uint32_t texture_id)
std::pair< uint32_t, std::shared_ptr< Texture > > GetTexture(const std::string &path, int mag_filter, int min_filter)