Fixes
This commit is contained in:
@ -50,9 +50,11 @@ namespace ia::iae
|
||||
INT32 RDC::s_primitiveInstanceCount{};
|
||||
GeometryVertex RDC::s_primitiveInstances[RDC::MAX_PRIMITIVE_COUNT];
|
||||
|
||||
Vector<RDC_Texture*> g_managedBakedTextures;
|
||||
|
||||
VOID RDC::Initialize(IN IVec2 viewportExtent, IN SDL_Window *windowHandle, IN BOOL isDebugMode)
|
||||
{
|
||||
if(s_windowHandle)
|
||||
if (s_windowHandle)
|
||||
return;
|
||||
|
||||
EmbeddedResources::Initialize();
|
||||
@ -77,6 +79,9 @@ namespace ia::iae
|
||||
|
||||
RDC_Device::DestroyGeometry(s_quadGeometry);
|
||||
|
||||
for (const auto &t : g_managedBakedTextures)
|
||||
delete t;
|
||||
|
||||
SDL_ReleaseGPUSampler(RDC_Device::GetHandle(), s_linearClampSampler);
|
||||
SDL_ReleaseGPUSampler(RDC_Device::GetHandle(), s_linearRepeatSampler);
|
||||
|
||||
@ -190,29 +195,26 @@ namespace ia::iae
|
||||
RDC_Device::WaitForIdle();
|
||||
}
|
||||
|
||||
Vec2 RDC::DrawSpriteTopLeft(IN Handle _image, IN INT32 tileIndexX, IN INT32 tileIndexY, IN Vec2 position,
|
||||
Vec2 RDC::DrawSpriteTopLeft(IN ImageView *imageView, IN INT32 tileIndexX, IN INT32 tileIndexY, IN Vec2 position,
|
||||
IN Vec2 scale, IN FLOAT32 rotation, IN BOOL flipH, IN BOOL flipV, IN Vec2 uvOffset)
|
||||
{
|
||||
const auto image = (ImageData *) _image;
|
||||
|
||||
const auto _s = Vec2{scale.x * image->TileWidth, scale.y * image->TileHeight};
|
||||
const auto _s = Vec2{scale.x * imageView->TileWidth, scale.y * imageView->TileHeight};
|
||||
Mat4 transform = glm::translate(glm::mat4(1.0f), glm::vec3{position.x, position.y, 0});
|
||||
transform = glm::rotate(transform, rotation, glm::vec3(0.0f, 0.0f, 1.0f));
|
||||
transform = glm::scale(transform, glm::vec3(_s, 1.0f));
|
||||
s_spriteInstances[s_spriteInstanceCount++] = {
|
||||
.Transform = transform,
|
||||
.TexCoords = s_dynamicSpriteAtlas ? s_dynamicSpriteAtlas->GetTextureCoordinates(
|
||||
_image, tileIndexX, tileIndexY, flipH, flipV, uvOffset)
|
||||
imageView, tileIndexX, tileIndexY, flipH, flipV, uvOffset)
|
||||
: Vec4{0.0f, 0.0f, 1.0f, 1.0f},
|
||||
.Color = {1.0f, 1.0f, 1.0f, 1.0f}};
|
||||
return _s;
|
||||
}
|
||||
|
||||
Vec2 RDC::DrawSpriteCentered(IN Handle _image, IN INT32 tileIndexX, IN INT32 tileIndexY, IN Vec2 position,
|
||||
Vec2 RDC::DrawSpriteCentered(IN ImageView *imageView, IN INT32 tileIndexX, IN INT32 tileIndexY, IN Vec2 position,
|
||||
IN Vec2 scale, IN FLOAT32 rotation, IN BOOL flipH, IN BOOL flipV, IN Vec2 uvOffset)
|
||||
{
|
||||
const auto image = (ImageData *) _image;
|
||||
const auto _s = Vec2{scale.x * image->TileWidth, scale.y * image->TileHeight};
|
||||
const auto _s = Vec2{scale.x * imageView->TileWidth, scale.y * imageView->TileHeight};
|
||||
Mat4 transform =
|
||||
glm::translate(glm::mat4(1.0f), glm::vec3{position.x - _s.x / 2.0f, position.y - _s.y / 2.0f, 0});
|
||||
transform = glm::rotate(transform, rotation, glm::vec3(0.0f, 0.0f, 1.0f));
|
||||
@ -220,7 +222,7 @@ namespace ia::iae
|
||||
s_spriteInstances[s_spriteInstanceCount++] = {
|
||||
.Transform = transform,
|
||||
.TexCoords = s_dynamicSpriteAtlas ? s_dynamicSpriteAtlas->GetTextureCoordinates(
|
||||
_image, tileIndexX, tileIndexY, flipH, flipV, uvOffset)
|
||||
imageView, tileIndexX, tileIndexY, flipH, flipV, uvOffset)
|
||||
: Vec4{0.0f, 0.0f, 1.0f, 1.0f},
|
||||
.Color = {1.0f, 1.0f, 1.0f, 1.0f}};
|
||||
return _s;
|
||||
@ -263,34 +265,50 @@ namespace ia::iae
|
||||
s_viewMatrix = glm::lookAtLH(glm::vec3{s_cameraPosition, -1.0f}, {s_cameraPosition, 0.0f}, {0.0f, 1.0f, 0.0f});
|
||||
}
|
||||
|
||||
Handle RDC::CreateImage(IN PCUINT8 rgbaData, IN INT32 width, IN INT32 height, IN INT32 tileCountX,
|
||||
IN INT32 tileCountY)
|
||||
Image *RDC::CreateImage(IN PCUINT8 rgbaData, IN INT32 width, IN INT32 height)
|
||||
{
|
||||
const auto pixelDataSize = width * height * 4;
|
||||
|
||||
const auto image = new ImageData{
|
||||
.Pixels = new UINT8[pixelDataSize],
|
||||
.Width = width,
|
||||
.Height = height,
|
||||
.TileWidth = width / tileCountX,
|
||||
.TileHeight = height / tileCountY,
|
||||
const auto image = new Image{.Pixels = new UINT8[pixelDataSize], .Width = width, .Height = height};
|
||||
|
||||
ia_memcpy(image->Pixels, rgbaData, pixelDataSize);
|
||||
|
||||
return image;
|
||||
}
|
||||
|
||||
ImageView *RDC::CreateImageView(IN Image *image, IN INT32 tileCountX, IN INT32 tileCountY)
|
||||
{
|
||||
const auto imageView = new ImageView{
|
||||
.ImagePtr = image,
|
||||
.TileWidth = image->Width / tileCountX,
|
||||
.TileHeight = image->Height / tileCountY,
|
||||
.TileCountX = tileCountX,
|
||||
.TileCountY = tileCountY,
|
||||
};
|
||||
|
||||
ia_memcpy(image->Pixels, rgbaData, pixelDataSize);
|
||||
|
||||
return (Handle) image;
|
||||
return imageView;
|
||||
}
|
||||
|
||||
VOID RDC::DestroyImage(IN Handle _image)
|
||||
VOID RDC::DestroyImage(IN Image *image)
|
||||
{
|
||||
const auto image = (ImageData *) _image;
|
||||
delete[] image->Pixels;
|
||||
delete image;
|
||||
}
|
||||
|
||||
VOID RDC::CompileTextures(IN CONST Vector<Handle> &images)
|
||||
VOID RDC::DestroyImageView(IN ImageView *imageView)
|
||||
{
|
||||
delete imageView;
|
||||
}
|
||||
|
||||
Handle RDC::BakeTexture(IN Image *image)
|
||||
{
|
||||
const auto texture = new RDC_Texture(RDC_Texture::EType::SAMPLED, image->Width, image->Height);
|
||||
texture->SetImageData(image->Pixels);
|
||||
g_managedBakedTextures.pushBack(texture);
|
||||
return (Handle)texture->GetHandle();
|
||||
}
|
||||
|
||||
VOID RDC::CompileTextures(IN CONST Vector<Image *> &images)
|
||||
{
|
||||
if (!images.size())
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user