From 1f9d5426b89af34b5db8bea95d18ed24780864cb Mon Sep 17 00:00:00 2001 From: Isuru Samarathunga Date: Wed, 8 Oct 2025 00:45:02 +0530 Subject: [PATCH] Engine API Enhancements --- Engine/Src/Imp/CPP/Engine.cpp | 17 ++-- Engine/Src/Imp/CPP/Renderer/Renderer.cpp | 15 +++- Engine/Src/Imp/CPP/ResourceManager.cpp | 83 +++++++++++++----- Engine/Src/Imp/CPP/Scene.cpp | 15 ++-- Engine/Src/Imp/CPP/WorldManager.cpp | 60 +++++-------- .../Src/Imp/HPP/Renderer/EmbeddedShader.hpp | 12 +-- Engine/Src/Imp/HPP/ResourceManager.hpp | 18 ++-- Engine/Src/Imp/HPP/WorldManager.hpp | 7 +- Engine/Src/Inc/IAEngine/Engine.hpp | 71 ++++++++------- .../Src/{Imp/HPP => Inc/IAEngine}/Scene.hpp | 31 ++++--- Samples/SpaceInvaders/Resources/UI/Button.png | Bin 0 -> 6854 bytes Samples/SpaceInvaders/Resources/UI/Title.png | Bin 0 -> 16006 bytes Samples/SpaceInvaders/Src/Imp/CPP/Game.cpp | 17 ++-- 13 files changed, 205 insertions(+), 141 deletions(-) rename Engine/Src/{Imp/HPP => Inc/IAEngine}/Scene.hpp (70%) create mode 100644 Samples/SpaceInvaders/Resources/UI/Button.png create mode 100644 Samples/SpaceInvaders/Resources/UI/Title.png diff --git a/Engine/Src/Imp/CPP/Engine.cpp b/Engine/Src/Imp/CPP/Engine.cpp index 9d7be5a..bc1af91 100644 --- a/Engine/Src/Imp/CPP/Engine.cpp +++ b/Engine/Src/Imp/CPP/Engine.cpp @@ -25,6 +25,8 @@ EXTERN GameFunctionTable g_gameFunctions; namespace ia::iae { + EXTERN SDL_Window *g_windowHandle; + BOOL Engine::IsDebugMode() { #if defined(__DEBUG_MODE__) @@ -36,25 +38,28 @@ namespace ia::iae VOID Engine::ResizeDisplay(IN INT32 newWidth, IN INT32 newHeight) { + SDL_SetWindowSize(g_windowHandle, newWidth, newHeight); Renderer::OnScreenResize(newWidth, newHeight); g_gameFunctions.OnResize(newWidth, newHeight); } - Handle Engine::CreateImageFromFile(IN CONST String &path) + Handle Engine::CreateImageFromFile(IN CONST String &name, IN CONST String &path, IN INT32 resizeToWidth, + IN INT32 resizeToHeight) { const auto data = File::ReadToVector(path.c_str()); - return CreateImage(data.data(), data.size()); + const auto handle = CreateImage(name, data.data(), data.size()); + return (resizeToWidth && resizeToHeight) ? ResizeImage(handle, resizeToWidth, resizeToHeight) : handle; } - Handle Engine::CreateSoundFromFile(IN CONST String &path) + Handle Engine::CreateSoundFromFile(IN CONST String &name, IN CONST String &path) { const auto data = File::ReadToVector(path.c_str()); - return CreateSound(data.data(), data.size()); + return CreateSound(name, data.data(), data.size()); } - Handle Engine::CreateSceneFromFile(IN CONST String &path) + RefPtr Engine::CreateSceneFromFile(IN CONST String &path) { const auto data = File::ReadToString(path.c_str()); - return CreateScene(data); + return Scene::Create(data); } } // namespace ia::iae diff --git a/Engine/Src/Imp/CPP/Renderer/Renderer.cpp b/Engine/Src/Imp/CPP/Renderer/Renderer.cpp index af1a2b8..a80af87 100644 --- a/Engine/Src/Imp/CPP/Renderer/Renderer.cpp +++ b/Engine/Src/Imp/CPP/Renderer/Renderer.cpp @@ -19,6 +19,8 @@ #include #include +#include + #include #include @@ -88,7 +90,7 @@ namespace ia::iae DebugDraw::Initialize(); - s_state.ColorTargetInfo.clear_color = SDL_FColor{0.33f, 0.33f, 0.33f, 1.0f}; + s_state.ColorTargetInfo.clear_color = SDL_FColor{0.0f, 0.0f, 0.0f, 1.0f}; s_state.ColorTargetInfo.load_op = SDL_GPU_LOADOP_CLEAR; s_state.ColorTargetInfo.store_op = SDL_GPU_STOREOP_STORE; @@ -138,6 +140,8 @@ namespace ia::iae if (!(s_state.ActiveCommandBuffer = SDL_AcquireGPUCommandBuffer(s_gpuDevice))) THROW_UNKNOWN("Failed to acquire SDL GPU command buffer: ", SDL_GetError()); + const auto clearColor = WorldManager::GetActiveScene()->BackgroundColor().GetAsFloatVec(); + s_state.ColorTargetInfo.clear_color = SDL_FColor{clearColor.x, clearColor.y, clearColor.z, 1.0f}; s_state.ColorTargetInfo.texture = s_renderTargetSceneColor; s_state.DepthStencilTargetInfo.texture = s_renderTargetSceneDepth; s_state.ActiveRenderPass = SDL_BeginGPURenderPass(s_state.ActiveCommandBuffer, &s_state.ColorTargetInfo, 1, @@ -160,6 +164,8 @@ namespace ia::iae DebugDraw::Render(); const auto imDrawData = ImGui::GetDrawData(); ImGui_ImplSDLGPU3_PrepareDrawData(imDrawData, s_state.ActiveCommandBuffer); + s_state.ColorTargetInfo.load_op = SDL_GPU_LOADOP_CLEAR; + s_state.ColorTargetInfo.clear_color = SDL_FColor{0.0f, 0.0f, 0.0f, 0.0f}; s_state.ColorTargetInfo.texture = s_renderTargetDebugDrawColor; s_state.ActiveRenderPass = SDL_BeginGPURenderPass(s_state.ActiveCommandBuffer, &s_state.ColorTargetInfo, 1, nullptr); @@ -174,6 +180,8 @@ namespace ia::iae if (!swapChainTexture) return; + s_state.ColorTargetInfo.clear_color = SDL_FColor{1.0f, 1.0f, 1.0f, 1.0f}; + s_state.ColorTargetInfo.load_op = SDL_GPU_LOADOP_CLEAR; s_state.ColorTargetInfo.texture = swapChainTexture; s_state.ActiveRenderPass = @@ -285,6 +293,11 @@ namespace ia::iae namespace ia::iae { + IVec2 Engine::GetDisplayExtent() + { + return IVec2(Renderer::s_screenWidth, Renderer::s_screenHeight); + } + VOID Engine::SetActiveCamera(IN CameraComponent *cameraComponent) { Renderer::s_state.ActiveCamera = cameraComponent; diff --git a/Engine/Src/Imp/CPP/ResourceManager.cpp b/Engine/Src/Imp/CPP/ResourceManager.cpp index 4bfef19..5f9a421 100644 --- a/Engine/Src/Imp/CPP/ResourceManager.cpp +++ b/Engine/Src/Imp/CPP/ResourceManager.cpp @@ -27,8 +27,8 @@ namespace ia::iae { - Vector ResourceManager::s_images; - Vector ResourceManager::s_sounds; + Map ResourceManager::s_images; + Map ResourceManager::s_sounds; Map ResourceManager::s_imageExtents; VOID ResourceManager::Initialize() @@ -38,36 +38,68 @@ namespace ia::iae VOID ResourceManager::Terminate() { for (const auto &t : s_images) - GPUResourceManager::DestroyTexture((SDL_GPUTexture *) t); + GPUResourceManager::DestroyTexture((SDL_GPUTexture *) t->Value); for (const auto &t : s_sounds) - AudioManager::DestoryAudio(t); + AudioManager::DestoryAudio(t->Value); } - Handle ResourceManager::CreateImage(IN PCUINT8 encodedData, IN SIZE_T encodedDataSize) + Handle ResourceManager::CreateImage(IN CONST String &name, IN PCUINT8 encodedData, IN SIZE_T encodedDataSize) { INT32 w, h, n; const auto rgbaData = stbi_load_from_memory(encodedData, encodedDataSize, &w, &h, &n, STBI_rgb_alpha); - const auto result = CreateImage(rgbaData, w, h); + const auto result = CreateImage(name, rgbaData, w, h); STBI_FREE(rgbaData); return result; } - Handle ResourceManager::CreateImage(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) { const auto handle = (Handle) GPUResourceManager::CreateTexture(SDL_GPU_TEXTUREUSAGE_SAMPLER, width, height, rgbaData, SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM); s_imageExtents[handle] = (((UINT64) width) << 32) | height; - s_images.pushBack(handle); + s_images[name] = handle; return handle; } - Handle ResourceManager::CreateSound(IN PCUINT8 encodedData, IN SIZE_T encodedDataSize) + Handle ResourceManager::CreateSound(IN CONST String &name, IN PCUINT8 encodedData, IN SIZE_T encodedDataSize) { const auto handle = AudioManager::CreateAudio(encodedData, encodedDataSize); - s_sounds.pushBack(handle); + s_sounds[name] = handle; return handle; } + Handle ResourceManager::GetImage(IN CONST String &name) + { + return s_images[name]; + } + + Handle ResourceManager::GetSound(IN CONST String &name) + { + return s_sounds[name]; + } + + String ResourceManager::GetImageName(IN Handle handle) + { + for (const auto &t : s_images) + { + if (handle == t->Value) + return t->Key; + } + THROW_NO_SUCH_KEY(); + return ""; + } + + String ResourceManager::GetSoundName(IN Handle handle) + { + for (const auto &t : s_sounds) + { + if (handle == t->Value) + return t->Key; + } + THROW_NO_SUCH_KEY(); + return ""; + } + VOID ResourceManager::DestroyImage(IN Handle image) { GPUResourceManager::DestroyTexture((SDL_GPUTexture *) image); @@ -84,15 +116,16 @@ namespace ia::iae return {(INT32) (t >> 32), (INT32) t}; } - Handle ResourceManager::RescaleImage(IN Handle image, IN INT32 newWidth, IN INT32 newHeight) + Handle ResourceManager::ResizeImage(IN Handle image, IN INT32 newWidth, IN INT32 newHeight) { const auto currentExtent = GetImageExtent(image); const auto pixelData = GPUResourceManager::GetTexturePixelData((SDL_GPUTexture *) image, currentExtent.x, currentExtent.y); + GPUResourceManager::DestroyTexture((SDL_GPUTexture*)image); const auto newPixelData = stbir_resize_uint8_linear(pixelData.data(), currentExtent.x, currentExtent.y, currentExtent.x * 4, nullptr, newWidth, newHeight, newWidth * 4, stbir_pixel_layout::STBIR_RGBA); - const auto result = CreateImage(newPixelData, newWidth, newHeight); + const auto result = CreateImage(GetImageName(image), newPixelData, newWidth, newHeight); free(newPixelData); return result; } @@ -107,19 +140,29 @@ namespace ia::iae namespace ia::iae { - Handle Engine::CreateImage(IN PCUINT8 encodedData, IN SIZE_T encodedDataSize) + Handle Engine::CreateImage(IN CONST String &name, IN PCUINT8 encodedData, IN SIZE_T encodedDataSize) { - return ResourceManager::CreateImage(encodedData, encodedDataSize); + return ResourceManager::CreateImage(name, encodedData, encodedDataSize); } - Handle Engine::CreateImage(IN PCUINT8 rgbaData, IN INT32 width, IN INT32 height) + Handle Engine::CreateImage(IN CONST String &name, IN PCUINT8 rgbaData, IN INT32 width, IN INT32 height) { - return ResourceManager::CreateImage(rgbaData, width, height); + return ResourceManager::CreateImage(name, rgbaData, width, height); } - Handle Engine::CreateSound(IN PCUINT8 encodedData, IN SIZE_T encodedDataSize) + Handle Engine::CreateSound(IN CONST String &name, IN PCUINT8 encodedData, IN SIZE_T encodedDataSize) { - return ResourceManager::CreateSound(encodedData, encodedDataSize); + return ResourceManager::CreateSound(name, encodedData, encodedDataSize); + } + + Handle Engine::GetImage(IN CONST String &name) + { + return ResourceManager::GetImage(name); + } + + Handle Engine::GetSound(IN CONST String &name) + { + return ResourceManager::GetSound(name); } VOID Engine::DestroyImage(IN Handle image) @@ -137,9 +180,9 @@ namespace ia::iae return ResourceManager::GetImageExtent(image); } - Handle Engine::RescaleImage(IN Handle image, IN INT32 newWidth, IN INT32 newHeight) + Handle Engine::ResizeImage(IN Handle image, IN INT32 newWidth, IN INT32 newHeight) { - return ResourceManager::RescaleImage(image, newWidth, newHeight); + return ResourceManager::ResizeImage(image, newWidth, newHeight); } Handle Engine::CombineImages(IN CONST Vector &images, IN INT32 unitWidth, IN INT32 unitHeight, diff --git a/Engine/Src/Imp/CPP/Scene.cpp b/Engine/Src/Imp/CPP/Scene.cpp index 2c410ad..8147934 100644 --- a/Engine/Src/Imp/CPP/Scene.cpp +++ b/Engine/Src/Imp/CPP/Scene.cpp @@ -15,27 +15,22 @@ // along with this program. If not, see . #include -#include +#include namespace ia::iae { - Scene *Scene::Create() + RefPtr Scene::Create() { - return new Scene(); + return MakeRefPtr(); } - Scene *Scene::Create(IN CONST String &sceneXML) + RefPtr Scene::Create(IN CONST String &sceneXML) { - const auto scene = new Scene(); + const auto scene = MakeRefPtr(); return scene; } - VOID Scene::Destroy(IN Scene *scene) - { - delete scene; - } - VOID Scene::Draw() { for (auto &t : m_nodes) diff --git a/Engine/Src/Imp/CPP/WorldManager.cpp b/Engine/Src/Imp/CPP/WorldManager.cpp index bd390dd..253f1fd 100644 --- a/Engine/Src/Imp/CPP/WorldManager.cpp +++ b/Engine/Src/Imp/CPP/WorldManager.cpp @@ -19,80 +19,74 @@ namespace ia::iae { - Scene *WorldManager::m_activeScene{}; + RefPtr WorldManager::s_activeScene{}; VOID WorldManager::Initialize() { - m_activeScene = Scene::Create(); + s_activeScene = Scene::Create(); } VOID WorldManager::Terminate() { - if (m_activeScene) - Scene::Destroy(m_activeScene); + s_activeScene.reset(); } VOID WorldManager::Draw() { - m_activeScene->Draw(); + s_activeScene->Draw(); } VOID WorldManager::DebugDraw() { - m_activeScene->DebugDraw(); + s_activeScene->DebugDraw(); } VOID WorldManager::Update() { - m_activeScene->Update(); + s_activeScene->Update(); } VOID WorldManager::FixedUpdate() { - m_activeScene->FixedUpdate(); + s_activeScene->FixedUpdate(); } - VOID WorldManager::ChangeActiveScene(IN Scene *scene) + VOID WorldManager::ChangeActiveScene(IN RefPtr scene) { - m_activeScene = scene; + s_activeScene = scene; } VOID WorldManager::AddNodeToActiveScene(IN RefPtr node) { - m_activeScene->AddNode(node); + s_activeScene->AddNode(node); } INode *WorldManager::GetNodeFromActiveScene(IN CONST String &name) { - return m_activeScene->GetNode(name); + return s_activeScene->GetNode(name); } VOID WorldManager::RemoveNodeFromActiveScene(IN CONST String &name) { - m_activeScene->RemoveNode(name); + s_activeScene->RemoveNode(name); + } + + Scene *WorldManager::GetActiveScene() + { + return s_activeScene.get(); } } // namespace ia::iae namespace ia::iae { - Handle Engine::CreateScene(IN CONST String &sceneXML) + Scene *Engine::GetActiveScene() { - return (Handle) Scene::Create(sceneXML); + return WorldManager::GetActiveScene(); } - - Handle Engine::CreateEmptyScene() + + VOID Engine::ChangeActiveScene(IN RefPtr scene) { - return (Handle) Scene::Create(); - } - - VOID Engine::DestroyScene(IN Handle handle) - { - Scene::Destroy((Scene *) handle); - } - - VOID Engine::ChangeActiveScene(IN Handle scene) - { - WorldManager::ChangeActiveScene((Scene *) scene); + WorldManager::ChangeActiveScene(scene); } VOID Engine::AddNodeToActiveScene(IN RefPtr node) @@ -109,14 +103,4 @@ namespace ia::iae { WorldManager::RemoveNodeFromActiveScene(name); } - - VOID Engine::AddNodeToScene(IN Handle scene, IN RefPtr node) - { - ((Scene *) scene)->AddNode(node); - } - - VOID Engine::RemoveNodeFromScene(IN Handle scene, IN CONST String &name) - { - ((Scene *) scene)->RemoveNode(name); - } } // namespace ia::iae \ No newline at end of file diff --git a/Engine/Src/Imp/HPP/Renderer/EmbeddedShader.hpp b/Engine/Src/Imp/HPP/Renderer/EmbeddedShader.hpp index 0aa29d3..84771c7 100644 --- a/Engine/Src/Imp/HPP/Renderer/EmbeddedShader.hpp +++ b/Engine/Src/Imp/HPP/Renderer/EmbeddedShader.hpp @@ -124,16 +124,16 @@ layout(location = 0) out vec4 outColor; vec4 overlay(vec4 background, vec4 foreground) { return mix( - 2.0 * background * foreground, - 1.0 - 2.0 * (1.0 - background) * (1.0 - foreground), - step(0.5, background) + background, + foreground, + foreground.a ); } void main() { vec2 uv = vec2(inTexCoord.x, 1.0 - inTexCoord.y); - outColor = overlay(texture(debugDrawTexture, uv), texture(sceneDrawTexture, uv)); + outColor = overlay(texture(sceneDrawTexture, uv), texture(debugDrawTexture, uv)); } */ @@ -148,7 +148,7 @@ CONSTEXPR UINT8 SHADER_SOURCE_GEOMETRY_FRAG[2076] = { CONSTEXPR UINT8 SHADER_SOURCE_POSTPROCESS_VERT[1272] = { 0x3,0x2,0x23,0x7,0x0,0x0,0x1,0x0,0xb,0x0,0xd,0x0,0x2b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x11,0x0,0x2,0x0,0x1,0x0,0x0,0x0,0xb,0x0,0x6,0x0,0x1,0x0,0x0,0x0,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x0,0x0,0x0,0x0,0xe,0x0,0x3,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0xf,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x6d,0x61,0x69,0x6e,0x0,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0x1d,0x0,0x0,0x0,0x3,0x0,0x3,0x0,0x2,0x0,0x0,0x0,0xc2,0x1,0x0,0x0,0x4,0x0,0x9,0x0,0x47,0x4c,0x5f,0x41,0x52,0x42,0x5f,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x65,0x5f,0x73,0x68,0x61,0x64,0x65,0x72,0x5f,0x6f,0x62,0x6a,0x65,0x63,0x74,0x73,0x0,0x0,0x4,0x0,0xa,0x0,0x47,0x4c,0x5f,0x47,0x4f,0x4f,0x47,0x4c,0x45,0x5f,0x63,0x70,0x70,0x5f,0x73,0x74,0x79,0x6c,0x65,0x5f,0x6c,0x69,0x6e,0x65,0x5f,0x64,0x69,0x72,0x65,0x63,0x74,0x69,0x76,0x65,0x0,0x0,0x4,0x0,0x8,0x0,0x47,0x4c,0x5f,0x47,0x4f,0x4f,0x47,0x4c,0x45,0x5f,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,0x5f,0x64,0x69,0x72,0x65,0x63,0x74,0x69,0x76,0x65,0x0,0x5,0x0,0x4,0x0,0x4,0x0,0x0,0x0,0x6d,0x61,0x69,0x6e,0x0,0x0,0x0,0x0,0x5,0x0,0x5,0x0,0x9,0x0,0x0,0x0,0x6f,0x75,0x74,0x54,0x65,0x78,0x43,0x6f,0x6f,0x72,0x64,0x0,0x5,0x0,0x6,0x0,0xc,0x0,0x0,0x0,0x67,0x6c,0x5f,0x56,0x65,0x72,0x74,0x65,0x78,0x49,0x6e,0x64,0x65,0x78,0x0,0x0,0x5,0x0,0x6,0x0,0x1b,0x0,0x0,0x0,0x67,0x6c,0x5f,0x50,0x65,0x72,0x56,0x65,0x72,0x74,0x65,0x78,0x0,0x0,0x0,0x0,0x6,0x0,0x6,0x0,0x1b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x0,0x6,0x0,0x7,0x0,0x1b,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x67,0x6c,0x5f,0x50,0x6f,0x69,0x6e,0x74,0x53,0x69,0x7a,0x65,0x0,0x0,0x0,0x0,0x6,0x0,0x7,0x0,0x1b,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x67,0x6c,0x5f,0x43,0x6c,0x69,0x70,0x44,0x69,0x73,0x74,0x61,0x6e,0x63,0x65,0x0,0x6,0x0,0x7,0x0,0x1b,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x67,0x6c,0x5f,0x43,0x75,0x6c,0x6c,0x44,0x69,0x73,0x74,0x61,0x6e,0x63,0x65,0x0,0x5,0x0,0x3,0x0,0x1d,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x9,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0xc,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x2a,0x0,0x0,0x0,0x47,0x0,0x3,0x0,0x1b,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0x1b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0x1b,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0x1b,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0x1b,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x13,0x0,0x2,0x0,0x2,0x0,0x0,0x0,0x21,0x0,0x3,0x0,0x3,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x16,0x0,0x3,0x0,0x6,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x17,0x0,0x4,0x0,0x7,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x8,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x8,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x15,0x0,0x4,0x0,0xa,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0xb,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0xb,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0xa,0x0,0x0,0x0,0xe,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0xa,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x17,0x0,0x4,0x0,0x17,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x15,0x0,0x4,0x0,0x18,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0x18,0x0,0x0,0x0,0x19,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1c,0x0,0x4,0x0,0x1a,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x19,0x0,0x0,0x0,0x1e,0x0,0x6,0x0,0x1b,0x0,0x0,0x0,0x17,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x1a,0x0,0x0,0x0,0x1a,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x1c,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x1b,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x1c,0x0,0x0,0x0,0x1d,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0xa,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x2b,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0x22,0x0,0x0,0x0,0x0,0x0,0x80,0x3f,0x2b,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0x25,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x29,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x17,0x0,0x0,0x0,0x36,0x0,0x5,0x0,0x2,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0xf8,0x0,0x2,0x0,0x5,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0xa,0x0,0x0,0x0,0xd,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0xc4,0x0,0x5,0x0,0xa,0x0,0x0,0x0,0xf,0x0,0x0,0x0,0xd,0x0,0x0,0x0,0xe,0x0,0x0,0x0,0xc7,0x0,0x5,0x0,0xa,0x0,0x0,0x0,0x11,0x0,0x0,0x0,0xf,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x6f,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0x12,0x0,0x0,0x0,0x11,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0xa,0x0,0x0,0x0,0x13,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0xc7,0x0,0x5,0x0,0xa,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x13,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x6f,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0x15,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x50,0x0,0x5,0x0,0x7,0x0,0x0,0x0,0x16,0x0,0x0,0x0,0x12,0x0,0x0,0x0,0x15,0x0,0x0,0x0,0x3e,0x0,0x3,0x0,0x9,0x0,0x0,0x0,0x16,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x7,0x0,0x0,0x0,0x1f,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x8e,0x0,0x5,0x0,0x7,0x0,0x0,0x0,0x21,0x0,0x0,0x0,0x1f,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x50,0x0,0x5,0x0,0x7,0x0,0x0,0x0,0x23,0x0,0x0,0x0,0x22,0x0,0x0,0x0,0x22,0x0,0x0,0x0,0x83,0x0,0x5,0x0,0x7,0x0,0x0,0x0,0x24,0x0,0x0,0x0,0x21,0x0,0x0,0x0,0x23,0x0,0x0,0x0,0x51,0x0,0x5,0x0,0x6,0x0,0x0,0x0,0x26,0x0,0x0,0x0,0x24,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x51,0x0,0x5,0x0,0x6,0x0,0x0,0x0,0x27,0x0,0x0,0x0,0x24,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x50,0x0,0x7,0x0,0x17,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x26,0x0,0x0,0x0,0x27,0x0,0x0,0x0,0x25,0x0,0x0,0x0,0x22,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x29,0x0,0x0,0x0,0x2a,0x0,0x0,0x0,0x1d,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x3e,0x0,0x3,0x0,0x2a,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0xfd,0x0,0x1,0x0,0x38,0x0,0x1,0x0,}; -CONSTEXPR UINT8 SHADER_SOURCE_POSTPROCESS_FRAG[1760] = { -0x3,0x2,0x23,0x7,0x0,0x0,0x1,0x0,0xb,0x0,0xd,0x0,0x44,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x11,0x0,0x2,0x0,0x1,0x0,0x0,0x0,0xb,0x0,0x6,0x0,0x1,0x0,0x0,0x0,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x0,0x0,0x0,0x0,0xe,0x0,0x3,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0xf,0x0,0x7,0x0,0x4,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x6d,0x61,0x69,0x6e,0x0,0x0,0x0,0x0,0x29,0x0,0x0,0x0,0x35,0x0,0x0,0x0,0x10,0x0,0x3,0x0,0x4,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x3,0x0,0x3,0x0,0x2,0x0,0x0,0x0,0xc2,0x1,0x0,0x0,0x4,0x0,0x9,0x0,0x47,0x4c,0x5f,0x41,0x52,0x42,0x5f,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x65,0x5f,0x73,0x68,0x61,0x64,0x65,0x72,0x5f,0x6f,0x62,0x6a,0x65,0x63,0x74,0x73,0x0,0x0,0x4,0x0,0xa,0x0,0x47,0x4c,0x5f,0x47,0x4f,0x4f,0x47,0x4c,0x45,0x5f,0x63,0x70,0x70,0x5f,0x73,0x74,0x79,0x6c,0x65,0x5f,0x6c,0x69,0x6e,0x65,0x5f,0x64,0x69,0x72,0x65,0x63,0x74,0x69,0x76,0x65,0x0,0x0,0x4,0x0,0x8,0x0,0x47,0x4c,0x5f,0x47,0x4f,0x4f,0x47,0x4c,0x45,0x5f,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,0x5f,0x64,0x69,0x72,0x65,0x63,0x74,0x69,0x76,0x65,0x0,0x5,0x0,0x4,0x0,0x4,0x0,0x0,0x0,0x6d,0x61,0x69,0x6e,0x0,0x0,0x0,0x0,0x5,0x0,0x7,0x0,0xc,0x0,0x0,0x0,0x6f,0x76,0x65,0x72,0x6c,0x61,0x79,0x28,0x76,0x66,0x34,0x3b,0x76,0x66,0x34,0x3b,0x0,0x0,0x0,0x0,0x5,0x0,0x5,0x0,0xa,0x0,0x0,0x0,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x0,0x0,0x5,0x0,0x5,0x0,0xb,0x0,0x0,0x0,0x66,0x6f,0x72,0x65,0x67,0x72,0x6f,0x75,0x6e,0x64,0x0,0x0,0x5,0x0,0x3,0x0,0x27,0x0,0x0,0x0,0x75,0x76,0x0,0x0,0x5,0x0,0x5,0x0,0x29,0x0,0x0,0x0,0x69,0x6e,0x54,0x65,0x78,0x43,0x6f,0x6f,0x72,0x64,0x0,0x0,0x5,0x0,0x5,0x0,0x35,0x0,0x0,0x0,0x6f,0x75,0x74,0x43,0x6f,0x6c,0x6f,0x72,0x0,0x0,0x0,0x0,0x5,0x0,0x7,0x0,0x39,0x0,0x0,0x0,0x64,0x65,0x62,0x75,0x67,0x44,0x72,0x61,0x77,0x54,0x65,0x78,0x74,0x75,0x72,0x65,0x0,0x0,0x0,0x0,0x5,0x0,0x7,0x0,0x3d,0x0,0x0,0x0,0x73,0x63,0x65,0x6e,0x65,0x44,0x72,0x61,0x77,0x54,0x65,0x78,0x74,0x75,0x72,0x65,0x0,0x0,0x0,0x0,0x5,0x0,0x4,0x0,0x41,0x0,0x0,0x0,0x70,0x61,0x72,0x61,0x6d,0x0,0x0,0x0,0x5,0x0,0x4,0x0,0x42,0x0,0x0,0x0,0x70,0x61,0x72,0x61,0x6d,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x29,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x35,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x39,0x0,0x0,0x0,0x21,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x39,0x0,0x0,0x0,0x22,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x3d,0x0,0x0,0x0,0x21,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x3d,0x0,0x0,0x0,0x22,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x13,0x0,0x2,0x0,0x2,0x0,0x0,0x0,0x21,0x0,0x3,0x0,0x3,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x16,0x0,0x3,0x0,0x6,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x17,0x0,0x4,0x0,0x7,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x8,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x21,0x0,0x5,0x0,0x9,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0xe,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x2b,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0x13,0x0,0x0,0x0,0x0,0x0,0x80,0x3f,0x2b,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x0,0x0,0x0,0x3f,0x17,0x0,0x4,0x0,0x25,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x26,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x25,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x28,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x25,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x28,0x0,0x0,0x0,0x29,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x15,0x0,0x4,0x0,0x2a,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0x2a,0x0,0x0,0x0,0x2b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x2c,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0x2a,0x0,0x0,0x0,0x2f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x34,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x34,0x0,0x0,0x0,0x35,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x19,0x0,0x9,0x0,0x36,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1b,0x0,0x3,0x0,0x37,0x0,0x0,0x0,0x36,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x38,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x37,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x38,0x0,0x0,0x0,0x39,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x38,0x0,0x0,0x0,0x3d,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x36,0x0,0x5,0x0,0x2,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0xf8,0x0,0x2,0x0,0x5,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x26,0x0,0x0,0x0,0x27,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x8,0x0,0x0,0x0,0x41,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x8,0x0,0x0,0x0,0x42,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x2c,0x0,0x0,0x0,0x2d,0x0,0x0,0x0,0x29,0x0,0x0,0x0,0x2b,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0x2e,0x0,0x0,0x0,0x2d,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x2c,0x0,0x0,0x0,0x30,0x0,0x0,0x0,0x29,0x0,0x0,0x0,0x2f,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0x31,0x0,0x0,0x0,0x30,0x0,0x0,0x0,0x83,0x0,0x5,0x0,0x6,0x0,0x0,0x0,0x32,0x0,0x0,0x0,0x13,0x0,0x0,0x0,0x31,0x0,0x0,0x0,0x50,0x0,0x5,0x0,0x25,0x0,0x0,0x0,0x33,0x0,0x0,0x0,0x2e,0x0,0x0,0x0,0x32,0x0,0x0,0x0,0x3e,0x0,0x3,0x0,0x27,0x0,0x0,0x0,0x33,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x37,0x0,0x0,0x0,0x3a,0x0,0x0,0x0,0x39,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x25,0x0,0x0,0x0,0x3b,0x0,0x0,0x0,0x27,0x0,0x0,0x0,0x57,0x0,0x5,0x0,0x7,0x0,0x0,0x0,0x3c,0x0,0x0,0x0,0x3a,0x0,0x0,0x0,0x3b,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x37,0x0,0x0,0x0,0x3e,0x0,0x0,0x0,0x3d,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x25,0x0,0x0,0x0,0x3f,0x0,0x0,0x0,0x27,0x0,0x0,0x0,0x57,0x0,0x5,0x0,0x7,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x3e,0x0,0x0,0x0,0x3f,0x0,0x0,0x0,0x3e,0x0,0x3,0x0,0x41,0x0,0x0,0x0,0x3c,0x0,0x0,0x0,0x3e,0x0,0x3,0x0,0x42,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x39,0x0,0x6,0x0,0x7,0x0,0x0,0x0,0x43,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0x41,0x0,0x0,0x0,0x42,0x0,0x0,0x0,0x3e,0x0,0x3,0x0,0x35,0x0,0x0,0x0,0x43,0x0,0x0,0x0,0xfd,0x0,0x1,0x0,0x38,0x0,0x1,0x0,0x36,0x0,0x5,0x0,0x7,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x37,0x0,0x3,0x0,0x8,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0x37,0x0,0x3,0x0,0x8,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0xf8,0x0,0x2,0x0,0xd,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x7,0x0,0x0,0x0,0xf,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0x8e,0x0,0x5,0x0,0x7,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0xf,0x0,0x0,0x0,0xe,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x7,0x0,0x0,0x0,0x11,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x85,0x0,0x5,0x0,0x7,0x0,0x0,0x0,0x12,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x11,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x7,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0x50,0x0,0x7,0x0,0x7,0x0,0x0,0x0,0x15,0x0,0x0,0x0,0x13,0x0,0x0,0x0,0x13,0x0,0x0,0x0,0x13,0x0,0x0,0x0,0x13,0x0,0x0,0x0,0x83,0x0,0x5,0x0,0x7,0x0,0x0,0x0,0x16,0x0,0x0,0x0,0x15,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x8e,0x0,0x5,0x0,0x7,0x0,0x0,0x0,0x17,0x0,0x0,0x0,0x16,0x0,0x0,0x0,0xe,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x7,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x50,0x0,0x7,0x0,0x7,0x0,0x0,0x0,0x19,0x0,0x0,0x0,0x13,0x0,0x0,0x0,0x13,0x0,0x0,0x0,0x13,0x0,0x0,0x0,0x13,0x0,0x0,0x0,0x83,0x0,0x5,0x0,0x7,0x0,0x0,0x0,0x1a,0x0,0x0,0x0,0x19,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0x85,0x0,0x5,0x0,0x7,0x0,0x0,0x0,0x1b,0x0,0x0,0x0,0x17,0x0,0x0,0x0,0x1a,0x0,0x0,0x0,0x50,0x0,0x7,0x0,0x7,0x0,0x0,0x0,0x1c,0x0,0x0,0x0,0x13,0x0,0x0,0x0,0x13,0x0,0x0,0x0,0x13,0x0,0x0,0x0,0x13,0x0,0x0,0x0,0x83,0x0,0x5,0x0,0x7,0x0,0x0,0x0,0x1d,0x0,0x0,0x0,0x1c,0x0,0x0,0x0,0x1b,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x7,0x0,0x0,0x0,0x1f,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0x50,0x0,0x7,0x0,0x7,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0xc,0x0,0x7,0x0,0x7,0x0,0x0,0x0,0x21,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x30,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x1f,0x0,0x0,0x0,0xc,0x0,0x8,0x0,0x7,0x0,0x0,0x0,0x22,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x2e,0x0,0x0,0x0,0x12,0x0,0x0,0x0,0x1d,0x0,0x0,0x0,0x21,0x0,0x0,0x0,0xfe,0x0,0x2,0x0,0x22,0x0,0x0,0x0,0x38,0x0,0x1,0x0,}; +CONSTEXPR UINT8 SHADER_SOURCE_POSTPROCESS_FRAG[1496] = { +0x3,0x2,0x23,0x7,0x0,0x0,0x1,0x0,0xb,0x0,0xd,0x0,0x38,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x11,0x0,0x2,0x0,0x1,0x0,0x0,0x0,0xb,0x0,0x6,0x0,0x1,0x0,0x0,0x0,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x0,0x0,0x0,0x0,0xe,0x0,0x3,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0xf,0x0,0x7,0x0,0x4,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x6d,0x61,0x69,0x6e,0x0,0x0,0x0,0x0,0x1d,0x0,0x0,0x0,0x29,0x0,0x0,0x0,0x10,0x0,0x3,0x0,0x4,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x3,0x0,0x3,0x0,0x2,0x0,0x0,0x0,0xc2,0x1,0x0,0x0,0x4,0x0,0x9,0x0,0x47,0x4c,0x5f,0x41,0x52,0x42,0x5f,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x65,0x5f,0x73,0x68,0x61,0x64,0x65,0x72,0x5f,0x6f,0x62,0x6a,0x65,0x63,0x74,0x73,0x0,0x0,0x4,0x0,0xa,0x0,0x47,0x4c,0x5f,0x47,0x4f,0x4f,0x47,0x4c,0x45,0x5f,0x63,0x70,0x70,0x5f,0x73,0x74,0x79,0x6c,0x65,0x5f,0x6c,0x69,0x6e,0x65,0x5f,0x64,0x69,0x72,0x65,0x63,0x74,0x69,0x76,0x65,0x0,0x0,0x4,0x0,0x8,0x0,0x47,0x4c,0x5f,0x47,0x4f,0x4f,0x47,0x4c,0x45,0x5f,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,0x5f,0x64,0x69,0x72,0x65,0x63,0x74,0x69,0x76,0x65,0x0,0x5,0x0,0x4,0x0,0x4,0x0,0x0,0x0,0x6d,0x61,0x69,0x6e,0x0,0x0,0x0,0x0,0x5,0x0,0x7,0x0,0xc,0x0,0x0,0x0,0x6f,0x76,0x65,0x72,0x6c,0x61,0x79,0x28,0x76,0x66,0x34,0x3b,0x76,0x66,0x34,0x3b,0x0,0x0,0x0,0x0,0x5,0x0,0x5,0x0,0xa,0x0,0x0,0x0,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x0,0x0,0x5,0x0,0x5,0x0,0xb,0x0,0x0,0x0,0x66,0x6f,0x72,0x65,0x67,0x72,0x6f,0x75,0x6e,0x64,0x0,0x0,0x5,0x0,0x3,0x0,0x1b,0x0,0x0,0x0,0x75,0x76,0x0,0x0,0x5,0x0,0x5,0x0,0x1d,0x0,0x0,0x0,0x69,0x6e,0x54,0x65,0x78,0x43,0x6f,0x6f,0x72,0x64,0x0,0x0,0x5,0x0,0x5,0x0,0x29,0x0,0x0,0x0,0x6f,0x75,0x74,0x43,0x6f,0x6c,0x6f,0x72,0x0,0x0,0x0,0x0,0x5,0x0,0x7,0x0,0x2d,0x0,0x0,0x0,0x73,0x63,0x65,0x6e,0x65,0x44,0x72,0x61,0x77,0x54,0x65,0x78,0x74,0x75,0x72,0x65,0x0,0x0,0x0,0x0,0x5,0x0,0x7,0x0,0x31,0x0,0x0,0x0,0x64,0x65,0x62,0x75,0x67,0x44,0x72,0x61,0x77,0x54,0x65,0x78,0x74,0x75,0x72,0x65,0x0,0x0,0x0,0x0,0x5,0x0,0x4,0x0,0x35,0x0,0x0,0x0,0x70,0x61,0x72,0x61,0x6d,0x0,0x0,0x0,0x5,0x0,0x4,0x0,0x36,0x0,0x0,0x0,0x70,0x61,0x72,0x61,0x6d,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x1d,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x29,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x2d,0x0,0x0,0x0,0x21,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x2d,0x0,0x0,0x0,0x22,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x31,0x0,0x0,0x0,0x21,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x31,0x0,0x0,0x0,0x22,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x13,0x0,0x2,0x0,0x2,0x0,0x0,0x0,0x21,0x0,0x3,0x0,0x3,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x16,0x0,0x3,0x0,0x6,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x17,0x0,0x4,0x0,0x7,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x8,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x21,0x0,0x5,0x0,0x9,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x15,0x0,0x4,0x0,0x10,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0x10,0x0,0x0,0x0,0x11,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x12,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x17,0x0,0x4,0x0,0x19,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x1a,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x19,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x1c,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x19,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x1c,0x0,0x0,0x0,0x1d,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0x10,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x1f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0x22,0x0,0x0,0x0,0x0,0x0,0x80,0x3f,0x2b,0x0,0x4,0x0,0x10,0x0,0x0,0x0,0x23,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x28,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x28,0x0,0x0,0x0,0x29,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x19,0x0,0x9,0x0,0x2a,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1b,0x0,0x3,0x0,0x2b,0x0,0x0,0x0,0x2a,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x2c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2b,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x2c,0x0,0x0,0x0,0x2d,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x2c,0x0,0x0,0x0,0x31,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x36,0x0,0x5,0x0,0x2,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0xf8,0x0,0x2,0x0,0x5,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x1a,0x0,0x0,0x0,0x1b,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x8,0x0,0x0,0x0,0x35,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x8,0x0,0x0,0x0,0x36,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x1f,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x1d,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0x21,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x1f,0x0,0x0,0x0,0x24,0x0,0x0,0x0,0x1d,0x0,0x0,0x0,0x23,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0x25,0x0,0x0,0x0,0x24,0x0,0x0,0x0,0x83,0x0,0x5,0x0,0x6,0x0,0x0,0x0,0x26,0x0,0x0,0x0,0x22,0x0,0x0,0x0,0x25,0x0,0x0,0x0,0x50,0x0,0x5,0x0,0x19,0x0,0x0,0x0,0x27,0x0,0x0,0x0,0x21,0x0,0x0,0x0,0x26,0x0,0x0,0x0,0x3e,0x0,0x3,0x0,0x1b,0x0,0x0,0x0,0x27,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x2b,0x0,0x0,0x0,0x2e,0x0,0x0,0x0,0x2d,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x19,0x0,0x0,0x0,0x2f,0x0,0x0,0x0,0x1b,0x0,0x0,0x0,0x57,0x0,0x5,0x0,0x7,0x0,0x0,0x0,0x30,0x0,0x0,0x0,0x2e,0x0,0x0,0x0,0x2f,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x2b,0x0,0x0,0x0,0x32,0x0,0x0,0x0,0x31,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x19,0x0,0x0,0x0,0x33,0x0,0x0,0x0,0x1b,0x0,0x0,0x0,0x57,0x0,0x5,0x0,0x7,0x0,0x0,0x0,0x34,0x0,0x0,0x0,0x32,0x0,0x0,0x0,0x33,0x0,0x0,0x0,0x3e,0x0,0x3,0x0,0x35,0x0,0x0,0x0,0x30,0x0,0x0,0x0,0x3e,0x0,0x3,0x0,0x36,0x0,0x0,0x0,0x34,0x0,0x0,0x0,0x39,0x0,0x6,0x0,0x7,0x0,0x0,0x0,0x37,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0x35,0x0,0x0,0x0,0x36,0x0,0x0,0x0,0x3e,0x0,0x3,0x0,0x29,0x0,0x0,0x0,0x37,0x0,0x0,0x0,0xfd,0x0,0x1,0x0,0x38,0x0,0x1,0x0,0x36,0x0,0x5,0x0,0x7,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x37,0x0,0x3,0x0,0x8,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0x37,0x0,0x3,0x0,0x8,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0xf8,0x0,0x2,0x0,0xd,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x7,0x0,0x0,0x0,0xe,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x7,0x0,0x0,0x0,0xf,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x12,0x0,0x0,0x0,0x13,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x11,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x13,0x0,0x0,0x0,0x50,0x0,0x7,0x0,0x7,0x0,0x0,0x0,0x15,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0xc,0x0,0x8,0x0,0x7,0x0,0x0,0x0,0x16,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x2e,0x0,0x0,0x0,0xe,0x0,0x0,0x0,0xf,0x0,0x0,0x0,0x15,0x0,0x0,0x0,0xfe,0x0,0x2,0x0,0x16,0x0,0x0,0x0,0x38,0x0,0x1,0x0,}; } // namespace ia::iae \ No newline at end of file diff --git a/Engine/Src/Imp/HPP/ResourceManager.hpp b/Engine/Src/Imp/HPP/ResourceManager.hpp index 3b3822e..fce4358 100644 --- a/Engine/Src/Imp/HPP/ResourceManager.hpp +++ b/Engine/Src/Imp/HPP/ResourceManager.hpp @@ -35,19 +35,25 @@ namespace ia::iae STATIC VOID Initialize(); STATIC VOID Terminate(); - STATIC Handle CreateImage(IN PCUINT8 encodedData, IN SIZE_T encodedDataSize); - STATIC Handle CreateImage(IN PCUINT8 rgbaData, IN INT32 width, IN INT32 height); - STATIC Handle CreateSound(IN PCUINT8 encodedData, IN SIZE_T encodedDataSize); + STATIC Handle CreateImage(IN CONST String& name, IN PCUINT8 encodedData, IN SIZE_T encodedDataSize); + STATIC Handle CreateImage(IN CONST String& name, IN PCUINT8 rgbaData, IN INT32 width, IN INT32 height); + STATIC Handle CreateSound(IN CONST String& name, IN PCUINT8 encodedData, IN SIZE_T encodedDataSize); + + STATIC Handle GetImage(IN CONST String& name); + STATIC Handle GetSound(IN CONST String& name); + STATIC String GetImageName(IN Handle handle); + STATIC String GetSoundName(IN Handle handle); + STATIC VOID DestroyImage(IN Handle image); STATIC VOID DestroySound(IN Handle sound); STATIC IVec2 GetImageExtent(IN Handle image); - STATIC Handle RescaleImage(IN Handle image, IN INT32 newWidth, IN INT32 newHeight); + STATIC Handle ResizeImage(IN Handle image, IN INT32 newWidth, IN INT32 newHeight); STATIC Handle CombineImages(IN CONST Vector &images, IN INT32 unitWidth, IN INT32 unitHeight, IN INT32 unitCountX, IN INT32 unitCountY); private: - STATIC Vector s_images; - STATIC Vector s_sounds; + STATIC Map s_images; + STATIC Map s_sounds; STATIC Map s_imageExtents; }; } // namespace ia::iae \ No newline at end of file diff --git a/Engine/Src/Imp/HPP/WorldManager.hpp b/Engine/Src/Imp/HPP/WorldManager.hpp index 677c9be..0eb1e42 100644 --- a/Engine/Src/Imp/HPP/WorldManager.hpp +++ b/Engine/Src/Imp/HPP/WorldManager.hpp @@ -17,7 +17,7 @@ #pragma once #include -#include +#include #include @@ -36,12 +36,13 @@ namespace ia::iae STATIC VOID FixedUpdate(); public: - STATIC VOID ChangeActiveScene(IN Scene* scene); + STATIC Scene *GetActiveScene(); + STATIC VOID ChangeActiveScene(IN RefPtr scene); STATIC VOID AddNodeToActiveScene(IN RefPtr node); STATIC INode *GetNodeFromActiveScene(IN CONST String &name); STATIC VOID RemoveNodeFromActiveScene(IN CONST String &name); private: - STATIC Scene *m_activeScene; + STATIC RefPtr s_activeScene; }; } // namespace ia::iae \ No newline at end of file diff --git a/Engine/Src/Inc/IAEngine/Engine.hpp b/Engine/Src/Inc/IAEngine/Engine.hpp index 772cb8e..950dca3 100644 --- a/Engine/Src/Inc/IAEngine/Engine.hpp +++ b/Engine/Src/Inc/IAEngine/Engine.hpp @@ -17,32 +17,36 @@ #pragma once #include -#include #include #include +#include #include #include +#include + namespace ia::iae { class Engine { - public: + public: // Event Functions - STATIC IAE_DLL_API Handle CreateEvent(IN CONST String& name); + STATIC IAE_DLL_API Handle CreateEvent(IN CONST String &name); STATIC IAE_DLL_API VOID DestroyEvent(IN Handle event); - STATIC IAE_DLL_API Handle GetEventByName(IN CONST String& name); + STATIC IAE_DLL_API Handle GetEventByName(IN CONST String &name); STATIC IAE_DLL_API VOID AddEventListener(IN Handle event, IN std::function callback); - STATIC IAE_DLL_API VOID AddEventListener(IN CONST String& eventName, IN std::function callback); + STATIC IAE_DLL_API VOID AddEventListener(IN CONST String &eventName, IN std::function callback); STATIC IAE_DLL_API VOID BroadcastEvent(IN Handle event); - STATIC IAE_DLL_API VOID BroadcastEvent(IN CONST String& eventName); + STATIC IAE_DLL_API VOID BroadcastEvent(IN CONST String &eventName); // Renderer Functions STATIC IAE_DLL_API Handle GetGeometry_Quad(); - STATIC IAE_DLL_API Handle CreateGeometry(IN CONST Vector& vertices, IN CONST Vector& indices); + STATIC IAE_DLL_API Handle CreateGeometry(IN CONST Vector &vertices, + IN CONST Vector &indices); STATIC IAE_DLL_API VOID DestroyGeometry(IN Handle geometry); - STATIC IAE_DLL_API VOID DrawGeometry(IN Handle handle); + STATIC IAE_DLL_API VOID DrawGeometry(IN Handle handle); + STATIC IAE_DLL_API IVec2 GetDisplayExtent(); STATIC IAE_DLL_API VOID ResizeDisplay(IN INT32 newWidth, IN INT32 newHeight); // Renderer State Functions @@ -54,7 +58,8 @@ namespace ia::iae STATIC IAE_DLL_API VOID SetRenderState_ColorOverlay(IN Color color); STATIC IAE_DLL_API VOID SetRenderState_CameraRelative(IN BOOL value); STATIC IAE_DLL_API VOID SetRenderState_Texture(IN Handle image); - STATIC IAE_DLL_API VOID SetRenderState_Transform(IN Vec2 position, IN Vec2 scale, IN FLOAT32 rotation, IN UINT8 layer, IN INT16 sortIndex); + STATIC IAE_DLL_API VOID SetRenderState_Transform(IN Vec2 position, IN Vec2 scale, IN FLOAT32 rotation, + IN UINT8 layer, IN INT16 sortIndex); // Debug Draw Functions STATIC IAE_DLL_API VOID DebugDraw_SetColor(IN Color color); @@ -64,32 +69,33 @@ namespace ia::iae STATIC IAE_DLL_API VOID DebugDraw_StrokeRect(IN Vec2 position, IN Vec2 size); // Resource Functions - STATIC IAE_DLL_API Handle CreateImageFromFile(IN CONST String& path); - STATIC IAE_DLL_API Handle CreateSoundFromFile(IN CONST String& path); - STATIC IAE_DLL_API Handle CreateImage(IN PCUINT8 encodedData, IN SIZE_T encodedDataSize); - STATIC IAE_DLL_API Handle CreateImage(IN PCUINT8 rgbaData, IN INT32 width, IN INT32 height); - STATIC IAE_DLL_API Handle CreateSound(IN PCUINT8 encodedData, IN SIZE_T encodedDataSize); + STATIC IAE_DLL_API Handle CreateSoundFromFile(IN CONST String &name, IN CONST String &path); + STATIC IAE_DLL_API Handle CreateImageFromFile(IN CONST String &name, IN CONST String &path, + IN INT32 resizeToWidth = 0, IN INT32 resizeToHeight = 0); + STATIC IAE_DLL_API Handle CreateImage(IN CONST String &name, IN PCUINT8 encodedData, IN SIZE_T encodedDataSize); + STATIC IAE_DLL_API Handle CreateImage(IN CONST String &name, IN PCUINT8 rgbaData, IN INT32 width, + IN INT32 height); + STATIC IAE_DLL_API Handle CreateSound(IN CONST String &name, IN PCUINT8 encodedData, IN SIZE_T encodedDataSize); + STATIC IAE_DLL_API Handle GetImage(IN CONST String &name); + STATIC IAE_DLL_API Handle GetSound(IN CONST String &name); STATIC IAE_DLL_API VOID DestroyImage(IN Handle image); STATIC IAE_DLL_API VOID DestroySound(IN Handle sound); STATIC IAE_DLL_API IVec2 GetImageExtent(IN Handle image); - STATIC IAE_DLL_API Handle RescaleImage(IN Handle image, IN INT32 newWidth, IN INT32 newHeight); - STATIC IAE_DLL_API Handle CombineImages(IN CONST Vector& images, IN INT32 unitWidth, IN INT32 unitHeight, IN INT32 unitCountX, IN INT32 unitCountY); + STATIC IAE_DLL_API Handle ResizeImage(IN Handle image, IN INT32 newWidth, IN INT32 newHeight); + STATIC IAE_DLL_API Handle CombineImages(IN CONST Vector &images, IN INT32 unitWidth, + IN INT32 unitHeight, IN INT32 unitCountX, IN INT32 unitCountY); // Game Functions STATIC IAE_DLL_API VOID SetTimeScale(IN FLOAT32 scale); - STATIC IAE_DLL_API VOID SetActiveCamera(IN CameraComponent* cameraComponent); + STATIC IAE_DLL_API VOID SetActiveCamera(IN CameraComponent *cameraComponent); // Scene Functions - STATIC IAE_DLL_API Handle CreateSceneFromFile(IN CONST String& path); - STATIC IAE_DLL_API Handle CreateScene(IN CONST String& sceneXML); - STATIC IAE_DLL_API Handle CreateEmptyScene(); - STATIC IAE_DLL_API VOID DestroyScene(IN Handle handle); - STATIC IAE_DLL_API VOID ChangeActiveScene(IN Handle scene); + STATIC IAE_DLL_API RefPtr CreateSceneFromFile(IN CONST String &path); + STATIC IAE_DLL_API Scene *GetActiveScene(); + STATIC IAE_DLL_API VOID ChangeActiveScene(IN RefPtr scene); STATIC IAE_DLL_API VOID AddNodeToActiveScene(IN RefPtr node); - STATIC IAE_DLL_API INode* GetNodeFromActiveScene(IN CONST String& name); - STATIC IAE_DLL_API VOID RemoveNodeFromActiveScene(IN CONST String& name); - STATIC IAE_DLL_API VOID AddNodeToScene(IN Handle scene, IN RefPtr node); - STATIC IAE_DLL_API VOID RemoveNodeFromScene(IN Handle scene, IN CONST String& name); + STATIC IAE_DLL_API INode *GetNodeFromActiveScene(IN CONST String &name); + STATIC IAE_DLL_API VOID RemoveNodeFromActiveScene(IN CONST String &name); // Input Functions STATIC IAE_DLL_API Vec2 GetInputAxis(); @@ -102,11 +108,12 @@ namespace ia::iae STATIC IAE_DLL_API BOOL IsInputActionDown(IN Handle action); STATIC IAE_DLL_API BOOL WasInputActionPressed(IN Handle action); STATIC IAE_DLL_API BOOL WasInputActionReleased(IN Handle action); - STATIC IAE_DLL_API BOOL IsInputActionDown(IN CONST String& action); - STATIC IAE_DLL_API BOOL WasInputActionPressed(IN CONST String& action); - STATIC IAE_DLL_API BOOL WasInputActionReleased(IN CONST String& action); - STATIC IAE_DLL_API Handle BindInputAction(IN CONST String& name, IN InputKey key); - STATIC IAE_DLL_API VOID BindInputAxis(IN InputKey upKey, IN InputKey downKey, IN InputKey leftKey, IN InputKey rightKey); + STATIC IAE_DLL_API BOOL IsInputActionDown(IN CONST String &action); + STATIC IAE_DLL_API BOOL WasInputActionPressed(IN CONST String &action); + STATIC IAE_DLL_API BOOL WasInputActionReleased(IN CONST String &action); + STATIC IAE_DLL_API Handle BindInputAction(IN CONST String &name, IN InputKey key); + STATIC IAE_DLL_API VOID BindInputAxis(IN InputKey upKey, IN InputKey downKey, IN InputKey leftKey, + IN InputKey rightKey); // Random Functions STATIC IAE_DLL_API FLOAT32 GetRandomFloat(); @@ -121,4 +128,4 @@ namespace ia::iae // Engine Functions STATIC IAE_DLL_API BOOL IsDebugMode(); }; -} \ No newline at end of file +} // namespace ia::iae \ No newline at end of file diff --git a/Engine/Src/Imp/HPP/Scene.hpp b/Engine/Src/Inc/IAEngine/Scene.hpp similarity index 70% rename from Engine/Src/Imp/HPP/Scene.hpp rename to Engine/Src/Inc/IAEngine/Scene.hpp index f6efd23..1e97a64 100644 --- a/Engine/Src/Imp/HPP/Scene.hpp +++ b/Engine/Src/Inc/IAEngine/Scene.hpp @@ -18,31 +18,34 @@ #include -#include - namespace ia::iae { class Scene { public: - STATIC Scene *Create(); - STATIC Scene *Create(IN CONST String &sceneXML); + STATIC IAE_DLL_API RefPtr Create(); + STATIC IAE_DLL_API RefPtr Create(IN CONST String &sceneXML); - STATIC VOID Destroy(IN Scene *scene); + public: + IAE_DLL_API VOID AddNode(IN RefPtr node); + IAE_DLL_API INode *GetNode(IN CONST String &name); + IAE_DLL_API VOID RemoveNode(IN CONST String &name); + + public: + Color &BackgroundColor() + { + return m_backgroundColor; + } + + private: + Color m_backgroundColor{0, 0, 0, 255}; + Map> m_nodes; public: VOID Draw(); VOID DebugDraw(); - + VOID FixedUpdate(); VOID Update(); - - public: - VOID AddNode(IN RefPtr node); - INode *GetNode(IN CONST String &name); - VOID RemoveNode(IN CONST String &name); - - private: - Map> m_nodes; }; } // namespace ia::iae \ No newline at end of file diff --git a/Samples/SpaceInvaders/Resources/UI/Button.png b/Samples/SpaceInvaders/Resources/UI/Button.png new file mode 100644 index 0000000000000000000000000000000000000000..e85a5392290ea5e89523973bfaa2d822dff21c32 GIT binary patch literal 6854 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 A&;S4c literal 0 HcmV?d00001 diff --git a/Samples/SpaceInvaders/Resources/UI/Title.png b/Samples/SpaceInvaders/Resources/UI/Title.png new file mode 100644 index 0000000000000000000000000000000000000000..3163b030e718edb99dddfec6751c8e7be57e961c GIT binary patch literal 16006 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 z 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 -Handle g_spriteBG; -RefPtr backgroundNode; +RefPtr backgroundNode; RefPtr mainCamera; C_DECL(IA_DLL_EXPORT VOID Game_OnInitialize()) { - g_spriteBG = Engine::RescaleImage(Engine::CreateImageFromFile("Resources/Sprites/bg.png"), 800, 600); + Engine::ResizeDisplay(600, 600); + + const auto displayExtent = Engine::GetDisplayExtent(); + + Engine::CreateImageFromFile("Background", "Resources/Sprites/bg.png", displayExtent.x, displayExtent.y); + Engine::CreateImageFromFile("Stars-A", "Resources/Sprites/Stars-A.png", displayExtent.x, displayExtent.y); + Engine::CreateImageFromFile("Stars-B", "Resources/Sprites/Stars-B.png", displayExtent.x, displayExtent.y); mainCamera = MakeRefPtr("MainCamera"); Engine::SetActiveCamera(mainCamera->GetCameraComponent()); - backgroundNode = MakeRefPtr("BG"); - backgroundNode->GetTextureComponent()->SetTexture(g_spriteBG); + backgroundNode = MakeRefPtr("BG"); + backgroundNode->AddComponent()->SetTexture(Engine::GetImage("Stars-A")); + //backgroundNode->AddComponent()->SetTexture(g_spriteBGStarsA); + //backgroundNode->GetTextureComponent()->SetTexture(g_spriteBG); Engine::AddNodeToActiveScene(backgroundNode); }