This commit is contained in:
Isuru Samarathunga
2025-10-31 15:06:23 +05:30
parent b8b9f6aa82
commit 9ff1d10d00
85 changed files with 1127 additions and 522 deletions

View File

@ -30,6 +30,7 @@ namespace ia::iae
{
Map<String, Handle> ResourceManager::s_images;
Map<String, Handle> ResourceManager::s_sounds;
Map<String, RefPtr<TileSet>> ResourceManager::s_tileSets;
Vector<ResourceManager::ImageResource> ResourceManager::s_imageHandles;
VOID ResourceManager::Initialize()
@ -59,11 +60,12 @@ namespace ia::iae
return result;
}
Handle ResourceManager::CreateImage(IN CONST String &name, IN PCUINT8 rgbaData, IN INT32 width, IN INT32 height)
Handle ResourceManager::CreateImage(IN CONST String &name, IN PCUINT8 rgbaData, IN INT32 width, IN INT32 height,
IN INT32 stride)
{
const auto texture =
GPUResourceManager::CreateTexture(SDL_GPU_TEXTUREUSAGE_SAMPLER | SDL_GPU_TEXTUREUSAGE_COLOR_TARGET, width,
height, rgbaData, SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM, true);
const auto texture = GPUResourceManager::CreateTexture(
SDL_GPU_TEXTUREUSAGE_SAMPLER | SDL_GPU_TEXTUREUSAGE_COLOR_TARGET, width, height,
(stride == -1) ? width : stride, rgbaData, SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM, true);
s_imageHandles.pushBack(ImageResource{.OriginalWidth = width,
.OriginalHeight = height,
.OriginalPixelData = new UINT8[width * height * 4],
@ -154,8 +156,8 @@ namespace ia::iae
s_imageHandles[image].OriginalHeight, s_imageHandles[image].OriginalWidth * 4,
nullptr, newWidth, newHeight, newWidth * 4, stbir_pixel_layout::STBIR_RGBA);
const auto texture = GPUResourceManager::CreateTexture(
SDL_GPU_TEXTUREUSAGE_SAMPLER | SDL_GPU_TEXTUREUSAGE_COLOR_TARGET, newWidth, newHeight, newPixelData,
SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM, true);
SDL_GPU_TEXTUREUSAGE_SAMPLER | SDL_GPU_TEXTUREUSAGE_COLOR_TARGET, newWidth, newHeight, newWidth,
newPixelData, SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM, true);
GPUResourceManager::DestroyTexture(s_imageHandles[image].Handle);
s_imageHandles[image].Handle = texture;
s_imageHandles[image].Width = newWidth;
@ -198,6 +200,44 @@ namespace ia::iae
for (auto &t : s_images)
t->Value = RescaleImage(t->Value, factor);
}
Handle ResourceManager::CreateTileSet(IN CONST String &name, IN Handle image, IN INT32 tileWidth,
IN INT32 tileHeight)
{
Vector<Handle> tileImages;
const auto extent = GetImageExtent(image);
for (INT32 y = 0; y < extent.y; y += tileHeight)
{
for (INT32 x = 0; x < extent.x; x += tileWidth)
{
const auto w = s_imageHandles[image].OriginalWidth;
tileImages.pushBack(CreateImage(BuildString(name, "_Tile", x, y),
&s_imageHandles[image].OriginalPixelData[(x + y * w) * 4], tileWidth,
tileHeight, w));
}
}
return CreateTileSet(name, tileImages, tileWidth, tileHeight);
}
Handle ResourceManager::CreateTileSet(IN CONST String &name, IN CONST Vector<Handle> &images, IN INT32 tileWidth,
IN INT32 tileHeight)
{
auto result = MakeRefPtr<TileSet>(images, tileWidth, tileHeight);
s_tileSets[name] = result;
return (Handle) (result.get());
}
Handle ResourceManager::GetTileSet(IN CONST String &name)
{
return (Handle) (s_tileSets[name].get());
}
VOID ResourceManager::DestroyTileSet(IN CONST String &name)
{
s_tileSets[name].reset();
}
} // namespace ia::iae
namespace ia::iae
@ -262,4 +302,25 @@ namespace ia::iae
{
return ResourceManager::CombineImages(images, unitWidth, unitHeight, unitCountX, unitCountY);
}
Handle Engine::CreateTileSet(IN CONST String &name, IN Handle image, IN INT32 tileWidth, IN INT32 tileHeight)
{
return ResourceManager::CreateTileSet(name, image, tileWidth, tileHeight);
}
Handle Engine::CreateTileSet(IN CONST String &name, IN CONST Vector<Handle> &images, IN INT32 tileWidth,
IN INT32 tileHeight)
{
return ResourceManager::CreateTileSet(name, images, tileWidth, tileHeight);
}
Handle Engine::GetTileSet(IN CONST String &name)
{
return ResourceManager::GetTileSet(name);
}
VOID Engine::DestroyTileSet(IN CONST String &name)
{
ResourceManager::DestroyTileSet(name);
}
} // namespace ia::iae