From 6974a647f5418c4fa088bdeb9325c47a2da7a56b Mon Sep 17 00:00:00 2001 From: Isuru Samarathunga Date: Sun, 14 Sep 2025 20:53:38 +0530 Subject: [PATCH] Fixes --- Src/IAEngine/CMakeLists.txt | 1 + .../imp/cpp/Components/BoxCollider2D.cpp | 51 +++++++++++++++ .../imp/cpp/Components/SpriteRenderer.cpp | 14 ++--- .../imp/cpp/Components/TextureRenderer.cpp | 2 +- Src/IAEngine/imp/cpp/Input.cpp | 8 +-- Src/IAEngine/imp/cpp/Physics/Physics.cpp | 50 ++++++++++----- Src/IAEngine/imp/cpp/Rendering/GPUTexture.cpp | 2 + Src/IAEngine/imp/cpp/Rendering/Mesh/Quad.cpp | 17 +++-- .../imp/cpp/Rendering/Pipeline/UnlitMesh.cpp | 63 ++++++++----------- Src/IAEngine/imp/cpp/Rendering/Renderer.cpp | 4 +- .../imp/glsl/UnlitMesh/UnlitMesh.frag | 3 +- Src/IAEngine/imp/hpp/EmbeddedShaders.hpp | 4 +- .../inc/IAEngine/Components/BoxCollider2D.hpp | 49 +++++++++++++++ .../inc/IAEngine/Components/Component.hpp | 20 ++++-- .../IAEngine/Components/TextureRenderer.hpp | 4 +- Src/IAEngine/inc/IAEngine/Physics/Physics.hpp | 8 +-- 16 files changed, 206 insertions(+), 94 deletions(-) create mode 100644 Src/IAEngine/imp/cpp/Components/BoxCollider2D.cpp create mode 100644 Src/IAEngine/inc/IAEngine/Components/BoxCollider2D.hpp diff --git a/Src/IAEngine/CMakeLists.txt b/Src/IAEngine/CMakeLists.txt index 9b120a3..eeb9b51 100644 --- a/Src/IAEngine/CMakeLists.txt +++ b/Src/IAEngine/CMakeLists.txt @@ -26,6 +26,7 @@ set(IAEngine_Sources imp/cpp/Nodes/Node.cpp imp/cpp/Components/AtlasRenderer.cpp + imp/cpp/Components/BoxCollider2D.cpp imp/cpp/Components/SpriteRenderer.cpp imp/cpp/Components/SoundEmitter.cpp imp/cpp/Components/ParticleEmitter.cpp diff --git a/Src/IAEngine/imp/cpp/Components/BoxCollider2D.cpp b/Src/IAEngine/imp/cpp/Components/BoxCollider2D.cpp new file mode 100644 index 0000000..aaf6f8c --- /dev/null +++ b/Src/IAEngine/imp/cpp/Components/BoxCollider2D.cpp @@ -0,0 +1,51 @@ +// IAEngine: 2D Game Engine by IA +// Copyright (C) 2025 IAS (ias@iasoft.dev) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#include +#include +#include +#include + +#include + +namespace ia::iae +{ + Texture g_debugBoxTexture{}; + + BoxCollider2DComponent::BoxCollider2DComponent(IN Node *node) : IComponent(node) + { + Physics::AddCollider(this); + g_debugBoxTexture = Engine::CreateTexture(File::ReadToVector("Resources/Engine/debug_box.png")); + } + + VOID BoxCollider2DComponent::Draw() + { + //g_debugBoxTexture.Draw( + // 0, + // m_node->GetPosition() + glm::vec3{m_shape.x, m_shape.y, 0}, + // {m_shape.z/256.0f, m_shape.w/256.0f, 1}, + // m_node->GetRotation().z, false, false, glm::vec4{1.0f, 1.0f, 1.0f, 1.0f}); + } + + VOID BoxCollider2DComponent::Update() + { + const auto pos = m_node->GetPosition(); + m_absoluteShape.x = pos.x + m_shape.x; + m_absoluteShape.y = pos.y + m_shape.y; + m_absoluteShape.z = m_absoluteShape.x + m_shape.z; + m_absoluteShape.w = m_absoluteShape.y + m_shape.w; + } +} // namespace ia::iae \ No newline at end of file diff --git a/Src/IAEngine/imp/cpp/Components/SpriteRenderer.cpp b/Src/IAEngine/imp/cpp/Components/SpriteRenderer.cpp index faa85df..f02954a 100644 --- a/Src/IAEngine/imp/cpp/Components/SpriteRenderer.cpp +++ b/Src/IAEngine/imp/cpp/Components/SpriteRenderer.cpp @@ -36,12 +36,6 @@ namespace ia::iae VOID SpriteRendererComponent::BakeAnimations() { - for (auto &anim : m_animations) - { - auto t = anim.Keys.back(); - t.Duration = 0; - anim.Keys.pushBack(t); - } if (m_animations.size()) SetActiveAnimation(0); } @@ -54,7 +48,7 @@ namespace ia::iae m_prevAnimationKeyFrameIndex = 0; m_activeAnimation = m_animations[animation]; m_prevAnimationKeyFrame = m_activeAnimation.Keys[m_prevAnimationKeyFrameIndex + 0]; - m_nextAnimationKeyFrame = m_activeAnimation.Keys[m_prevAnimationKeyFrameIndex + 1]; + m_nextAnimationKeyFrame = m_activeAnimation.Keys[(m_prevAnimationKeyFrameIndex + 1) % m_activeAnimation.Keys.size()]; m_currentAnimationState = m_prevAnimationKeyFrame; m_activeAnimationHandle = animation; } @@ -93,19 +87,19 @@ namespace ia::iae #undef INTERP_PROPERTY } - m_timelinePosition += Time::GetFrameDeltaTime(); if (m_timelinePosition >= m_prevAnimationKeyFrame.Duration) { - m_prevAnimationKeyFrameIndex = (m_prevAnimationKeyFrameIndex + 1) % (keyCount - 1); + m_prevAnimationKeyFrameIndex = (m_prevAnimationKeyFrameIndex + 1) % keyCount; if (!m_prevAnimationKeyFrameIndex && !m_activeAnimation.ShouldLoop) { m_activeAnimation = {}; return; } m_prevAnimationKeyFrame = m_activeAnimation.Keys[m_prevAnimationKeyFrameIndex + 0]; - m_nextAnimationKeyFrame = m_activeAnimation.Keys[m_prevAnimationKeyFrameIndex + 1]; + m_nextAnimationKeyFrame = m_activeAnimation.Keys[(m_prevAnimationKeyFrameIndex + 1) % keyCount]; m_currentAnimationState = m_prevAnimationKeyFrame; m_timelinePosition = 0; } + m_timelinePosition += Time::GetFrameDeltaTime(); } } // namespace ia::iae \ No newline at end of file diff --git a/Src/IAEngine/imp/cpp/Components/TextureRenderer.cpp b/Src/IAEngine/imp/cpp/Components/TextureRenderer.cpp index ecdad3c..942a70a 100644 --- a/Src/IAEngine/imp/cpp/Components/TextureRenderer.cpp +++ b/Src/IAEngine/imp/cpp/Components/TextureRenderer.cpp @@ -31,7 +31,7 @@ namespace ia::iae VOID TextureRendererComponent::Draw() { - m_texture->Draw( + m_texture.Draw( m_node->SortOffset(), m_node->GetPosition() + m_position, m_node->GetScale(), m_node->GetRotation().z, false, false, glm::vec4{1.0f, 1.0f, 1.0f, 1.0f}); diff --git a/Src/IAEngine/imp/cpp/Input.cpp b/Src/IAEngine/imp/cpp/Input.cpp index 8b4543f..2b5f8ab 100644 --- a/Src/IAEngine/imp/cpp/Input.cpp +++ b/Src/IAEngine/imp/cpp/Input.cpp @@ -70,15 +70,15 @@ namespace ia::iae glm::vec2 Input::GetDirectionalInput() { - return INPUT_TO_DIRECTION_MAP[(IsKeyDown(Input::KEY_W) << 3) | (IsKeyDown(Input::KEY_S) << 2) | - (IsKeyDown(Input::KEY_A) << 1) | (IsKeyDown(Input::KEY_D) << 0)] + return INPUT_TO_DIRECTION_MAP[(IsKeyDown(Input::KEY_UP) << 3) | (IsKeyDown(Input::KEY_DOWN) << 2) | + (IsKeyDown(Input::KEY_LEFT) << 1) | (IsKeyDown(Input::KEY_RIGHT) << 0)] .Velocity; } glm::vec2 Input::GetDirectionalInput(OUT DirectionalInput &direction) { - const auto dir = INPUT_TO_DIRECTION_MAP[(IsKeyDown(Input::KEY_W) << 3) | (IsKeyDown(Input::KEY_S) << 2) | - (IsKeyDown(Input::KEY_A) << 1) | (IsKeyDown(Input::KEY_D) << 0)]; + const auto dir = INPUT_TO_DIRECTION_MAP[(IsKeyDown(Input::KEY_UP) << 3) | (IsKeyDown(Input::KEY_DOWN) << 2) | + (IsKeyDown(Input::KEY_LEFT) << 1) | (IsKeyDown(Input::KEY_RIGHT) << 0)]; direction = dir.Direction; return dir.Velocity; } diff --git a/Src/IAEngine/imp/cpp/Physics/Physics.cpp b/Src/IAEngine/imp/cpp/Physics/Physics.cpp index 11c3d7f..3f09540 100644 --- a/Src/IAEngine/imp/cpp/Physics/Physics.cpp +++ b/Src/IAEngine/imp/cpp/Physics/Physics.cpp @@ -16,9 +16,11 @@ #include +#include + namespace ia::iae { - + Vector g_colliders; VOID Physics::Initialize() { @@ -28,26 +30,40 @@ namespace ia::iae { } + INLINE BOOL IsIntersectingH(IN CONST glm::vec4 &shape, IN FLOAT32 x) + { + return (x >= shape.x) && (x <= shape.z); + } + + INLINE BOOL IsIntersectingV(IN CONST glm::vec4 &shape, IN FLOAT32 y) + { + return (y >= shape.y) && (y <= shape.w); + } + VOID Physics::Update() { + for (SIZE_T i = 0; i < g_colliders.size(); i++) + { + for (SIZE_T j = i + 1; j < g_colliders.size(); j++) + { + const auto boxA = g_colliders[i]->AbsoluteShape(); + const auto boxB = g_colliders[j]->AbsoluteShape(); + const auto nodeA = g_colliders[i]->GetNode(); + + if(IsIntersectingH(boxB, boxA.z) && (IsIntersectingV(boxB, boxA.y) || IsIntersectingV(boxB, boxA.w))) + nodeA->SetLocalPosition(nodeA->GetLocalPosition() + glm::vec3(-boxA.z + boxB.x, 0, 0)); + else if(IsIntersectingH(boxB, boxA.x) && (IsIntersectingV(boxB, boxA.y) || IsIntersectingV(boxB, boxA.w))) + nodeA->SetLocalPosition(nodeA->GetLocalPosition() + glm::vec3(-boxA.x + boxB.z, 0, 0)); + else if(IsIntersectingV(boxB, boxA.w) && (IsIntersectingH(boxB, boxA.x) || IsIntersectingH(boxB, boxA.z))) + nodeA->SetLocalPosition(nodeA->GetLocalPosition() + glm::vec3(0, -boxA.w + boxB.y, 0)); + else if(IsIntersectingV(boxB, boxA.y) && (IsIntersectingH(boxB, boxA.x) || IsIntersectingH(boxB, boxA.z))) + nodeA->SetLocalPosition(nodeA->GetLocalPosition() + glm::vec3(0, -boxA.y + boxB.w, 0)); + } + } } - Handle Physics::CreateStaticBody(IN glm::vec3 position) + VOID Physics::AddCollider(IN BoxCollider2DComponent *collider) { - return INVALID_HANDLE; - } - - Handle Physics::CreateDynamicBody(IN glm::vec3 position) - { - return INVALID_HANDLE; - } - - VOID Physics::AddBoxCollider(IN Handle body, IN glm::vec3 size) - { - } - - glm::vec3 Physics::GetBodyPosition(IN Handle body) - { - return {}; + g_colliders.pushBack(collider); } } // namespace ia::iae \ No newline at end of file diff --git a/Src/IAEngine/imp/cpp/Rendering/GPUTexture.cpp b/Src/IAEngine/imp/cpp/Rendering/GPUTexture.cpp index 394f5f2..4a786c0 100644 --- a/Src/IAEngine/imp/cpp/Rendering/GPUTexture.cpp +++ b/Src/IAEngine/imp/cpp/Rendering/GPUTexture.cpp @@ -35,6 +35,8 @@ namespace ia::iae .address_mode_u = SDL_GPU_SAMPLERADDRESSMODE_CLAMP_TO_EDGE, .address_mode_v = SDL_GPU_SAMPLERADDRESSMODE_CLAMP_TO_EDGE, .address_mode_w = SDL_GPU_SAMPLERADDRESSMODE_CLAMP_TO_EDGE, + .max_anisotropy = 1.0f, + .enable_anisotropy = true }; g_defaultSampler = SDL_CreateGPUSampler(g_gpuDevice, &createInfo); } diff --git a/Src/IAEngine/imp/cpp/Rendering/Mesh/Quad.cpp b/Src/IAEngine/imp/cpp/Rendering/Mesh/Quad.cpp index e4186e0..0f4289d 100644 --- a/Src/IAEngine/imp/cpp/Rendering/Mesh/Quad.cpp +++ b/Src/IAEngine/imp/cpp/Rendering/Mesh/Quad.cpp @@ -25,19 +25,26 @@ namespace ia::iae VOID QuadMesh::Initialize() { - Vertex_Mesh vertices[6] = {{glm::vec3{-1, 1, 0}, glm::vec2{0, 0}}, {glm::vec3{1, 1, 0}, glm::vec2{1, 0}}, - {glm::vec3{1, -1, 0}, glm::vec2{1, 1}}, {glm::vec3{-1, 1, 0}, glm::vec2{0, 0}}, - {glm::vec3{1, -1, 0}, glm::vec2{1, 1}}, {glm::vec3{-1, -1, 0}, glm::vec2{0, 1}}}; + Vertex_Mesh vertices[6] = { + {glm::vec3{0, 1, 0}, glm::vec2{0, 1}}, + {glm::vec3{1, 1, 0}, glm::vec2{1, 1}}, + {glm::vec3{1, 0, 0}, glm::vec2{1, 0}}, + + {glm::vec3{1, 0, 0}, glm::vec2{1, 0}}, + {glm::vec3{0, 0, 0}, glm::vec2{0, 0}}, + {glm::vec3{0, 1, 0}, glm::vec2{0, 1}}, + }; g_quadMeshVertexBuffer = GPUBuffer::Create(GPUBuffer::Usage::VERTEX, &vertices, sizeof(vertices)); } VOID QuadMesh::Terminate() { - if(g_quadMeshVertexBuffer) + if (g_quadMeshVertexBuffer) g_quadMeshVertexBuffer.reset(); } - VOID QuadMesh::Draw(IN FLOAT32 sortOffset, IN CONST glm::vec3 &position, IN CONST glm::vec3 &scale, IN FLOAT32 rotation) + VOID QuadMesh::Draw(IN FLOAT32 sortOffset, IN CONST glm::vec3 &position, IN CONST glm::vec3 &scale, + IN FLOAT32 rotation) { Renderer::Draw(sortOffset, position, scale, rotation, g_quadMeshVertexBuffer->GetHandle(), 6); } diff --git a/Src/IAEngine/imp/cpp/Rendering/Pipeline/UnlitMesh.cpp b/Src/IAEngine/imp/cpp/Rendering/Pipeline/UnlitMesh.cpp index 1a0a372..30bf7b4 100644 --- a/Src/IAEngine/imp/cpp/Rendering/Pipeline/UnlitMesh.cpp +++ b/Src/IAEngine/imp/cpp/Rendering/Pipeline/UnlitMesh.cpp @@ -27,28 +27,22 @@ namespace ia::iae Pipeline_UnlitMesh::~Pipeline_UnlitMesh() { - if(m_handle) - SDL_ReleaseGPUGraphicsPipeline(g_gpuDevice, (SDL_GPUGraphicsPipeline*)m_handle); + if (m_handle) + SDL_ReleaseGPUGraphicsPipeline(g_gpuDevice, (SDL_GPUGraphicsPipeline *) m_handle); } RefPtr Pipeline_UnlitMesh::Create() { const auto res = MakeRefPtr(); - const auto vertexShader = LoadShaderFromMemory(ShaderStage::VERTEX, SHADER_SOURCE_UNLITMESH_VERT, sizeof(SHADER_SOURCE_UNLITMESH_VERT), 0, 3, 0, 0); - const auto pixelShader = LoadShaderFromMemory(ShaderStage::PIXEL, SHADER_SOURCE_UNLITMESH_FRAG, sizeof(SHADER_SOURCE_UNLITMESH_FRAG), 1, 1, 0, 0); + const auto vertexShader = LoadShaderFromMemory(ShaderStage::VERTEX, SHADER_SOURCE_UNLITMESH_VERT, + sizeof(SHADER_SOURCE_UNLITMESH_VERT), 0, 3, 0, 0); + const auto pixelShader = LoadShaderFromMemory(ShaderStage::PIXEL, SHADER_SOURCE_UNLITMESH_FRAG, + sizeof(SHADER_SOURCE_UNLITMESH_FRAG), 1, 1, 0, 0); - SDL_GPUColorTargetDescription colorTargets[] = { - {.format = SDL_GetGPUSwapchainTextureFormat(g_gpuDevice, g_windowHandle), - .blend_state = SDL_GPUColorTargetBlendState{ - .src_color_blendfactor = SDL_GPU_BLENDFACTOR_ONE, - .dst_color_blendfactor = SDL_GPU_BLENDFACTOR_ONE_MINUS_SRC_ALPHA, - .color_blend_op = SDL_GPU_BLENDOP_ADD, - .src_alpha_blendfactor = SDL_GPU_BLENDFACTOR_ONE, - .dst_alpha_blendfactor = SDL_GPU_BLENDFACTOR_ONE_MINUS_SRC_ALPHA, - .alpha_blend_op = SDL_GPU_BLENDOP_ADD, - .enable_blend = true, - }}}; + SDL_GPUColorTargetDescription colorTargets[] = {{ + .format = SDL_GetGPUSwapchainTextureFormat(g_gpuDevice, g_windowHandle), + }}; SDL_GPUVertexBufferDescription vertexBuffers[] = {{ .slot = 0, .pitch = sizeof(Vertex_Mesh), @@ -71,29 +65,22 @@ namespace ia::iae .num_vertex_attributes = sizeof(vertexAttributes) / sizeof(vertexAttributes[0])}, .primitive_type = SDL_GPU_PRIMITIVETYPE_TRIANGLELIST, - .rasterizer_state = SDL_GPURasterizerState{ - .fill_mode = SDL_GPU_FILLMODE_FILL, - .cull_mode = SDL_GPU_CULLMODE_NONE, - .front_face = SDL_GPU_FRONTFACE_COUNTER_CLOCKWISE - }, - .depth_stencil_state = SDL_GPUDepthStencilState{ - .compare_op = SDL_GPU_COMPAREOP_LESS, - .write_mask = 0xFF, - .enable_depth_test = true, - .enable_depth_write = true, - .enable_stencil_test = false - }, - .target_info = - { - .color_target_descriptions = colorTargets, - .num_color_targets = sizeof(colorTargets) / sizeof(colorTargets[0]), - .depth_stencil_format = SDL_GPU_TEXTUREFORMAT_D16_UNORM, - .has_depth_stencil_target = true - }, + .rasterizer_state = SDL_GPURasterizerState{.fill_mode = SDL_GPU_FILLMODE_FILL, + .cull_mode = SDL_GPU_CULLMODE_NONE, + .front_face = SDL_GPU_FRONTFACE_COUNTER_CLOCKWISE}, + .depth_stencil_state = SDL_GPUDepthStencilState{.compare_op = SDL_GPU_COMPAREOP_GREATER_OR_EQUAL, + .write_mask = 0xFF, + .enable_depth_test = true, + .enable_depth_write = true, + .enable_stencil_test = false}, + .target_info = {.color_target_descriptions = colorTargets, + .num_color_targets = sizeof(colorTargets) / sizeof(colorTargets[0]), + .depth_stencil_format = SDL_GPU_TEXTUREFORMAT_D16_UNORM, + .has_depth_stencil_target = true}, }; - SDL_GPUGraphicsPipeline* handle{}; - if(!(handle = SDL_CreateGPUGraphicsPipeline(g_gpuDevice, &createInfo))) + SDL_GPUGraphicsPipeline *handle{}; + if (!(handle = SDL_CreateGPUGraphicsPipeline(g_gpuDevice, &createInfo))) { IAE_LOG_ERROR("Failed to create a SDL graphics pipeline: ", SDL_GetError()); return nullptr; @@ -102,13 +89,13 @@ namespace ia::iae UnloadShader(pixelShader); UnloadShader(vertexShader); - res->m_handle = (Handle)handle; + res->m_handle = (Handle) handle; return res; } VOID Pipeline_UnlitMesh::Bind(IN Handle renderPassHandle) { - SDL_BindGPUGraphicsPipeline((SDL_GPURenderPass*)renderPassHandle, (SDL_GPUGraphicsPipeline*)m_handle); + SDL_BindGPUGraphicsPipeline((SDL_GPURenderPass *) renderPassHandle, (SDL_GPUGraphicsPipeline *) m_handle); } } // namespace ia::iae \ No newline at end of file diff --git a/Src/IAEngine/imp/cpp/Rendering/Renderer.cpp b/Src/IAEngine/imp/cpp/Rendering/Renderer.cpp index 5588f62..d4c299b 100644 --- a/Src/IAEngine/imp/cpp/Rendering/Renderer.cpp +++ b/Src/IAEngine/imp/cpp/Rendering/Renderer.cpp @@ -100,7 +100,7 @@ namespace ia::iae { SDL_GPUTextureCreateInfo createInfo{.type = SDL_GPU_TEXTURETYPE_2D, .format = SDL_GPU_TEXTUREFORMAT_D16_UNORM, - .usage = SDL_GPU_TEXTUREUSAGE_SAMPLER | + .usage = SDL_GPU_TEXTUREUSAGE_DEPTH_STENCIL_TARGET, .width = (UINT32) s_width, .height = (UINT32) s_height, @@ -193,7 +193,7 @@ namespace ia::iae SDL_GPUDepthStencilTargetInfo depthStencilTargetInfo = {0}; depthStencilTargetInfo.texture = g_depthBufferTexture; depthStencilTargetInfo.cycle = true; - depthStencilTargetInfo.clear_depth = 1; + depthStencilTargetInfo.clear_depth = 0; depthStencilTargetInfo.clear_stencil = 0; depthStencilTargetInfo.load_op = SDL_GPU_LOADOP_CLEAR; depthStencilTargetInfo.store_op = SDL_GPU_STOREOP_STORE; diff --git a/Src/IAEngine/imp/glsl/UnlitMesh/UnlitMesh.frag b/Src/IAEngine/imp/glsl/UnlitMesh/UnlitMesh.frag index 9bae639..24ea32c 100644 --- a/Src/IAEngine/imp/glsl/UnlitMesh/UnlitMesh.frag +++ b/Src/IAEngine/imp/glsl/UnlitMesh/UnlitMesh.frag @@ -15,8 +15,9 @@ layout(set = 3, binding = 0) uniform UniformBufferObject { void main() { vec2 uv = inTexCoord; - uv.y = 1 - uv.y; if(ubo.flipH) uv.x = 1 - uv.x; if(ubo.flipV) uv.y = 1 - uv.y; outColor = texture(texSampler, uv) * ubo.colorOverlay; + if(outColor.w < 0.1) + discard; } \ No newline at end of file diff --git a/Src/IAEngine/imp/hpp/EmbeddedShaders.hpp b/Src/IAEngine/imp/hpp/EmbeddedShaders.hpp index 4ce8484..0c2f632 100644 --- a/Src/IAEngine/imp/hpp/EmbeddedShaders.hpp +++ b/Src/IAEngine/imp/hpp/EmbeddedShaders.hpp @@ -27,7 +27,7 @@ namespace ia::iae CONSTEXPR UINT8 SHADER_SOURCE_UNLITMESH_VERT[1964] = { 0x3,0x2,0x23,0x7,0x0,0x0,0x1,0x0,0xb,0x0,0xd,0x0,0x35,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,0x9,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x6d,0x61,0x69,0x6e,0x0,0x0,0x0,0x0,0xd,0x0,0x0,0x0,0x25,0x0,0x0,0x0,0x31,0x0,0x0,0x0,0x33,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,0x6,0x0,0xb,0x0,0x0,0x0,0x67,0x6c,0x5f,0x50,0x65,0x72,0x56,0x65,0x72,0x74,0x65,0x78,0x0,0x0,0x0,0x0,0x6,0x0,0x6,0x0,0xb,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x0,0x6,0x0,0x7,0x0,0xb,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,0xb,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,0xb,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,0xd,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x5,0x0,0x7,0x0,0x11,0x0,0x0,0x0,0x55,0x42,0x4f,0x5f,0x56,0x65,0x72,0x74,0x65,0x78,0x5f,0x50,0x65,0x72,0x53,0x63,0x65,0x6e,0x65,0x0,0x6,0x0,0x6,0x0,0x11,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x70,0x72,0x6f,0x6a,0x65,0x63,0x74,0x69,0x6f,0x6e,0x0,0x0,0x5,0x0,0x5,0x0,0x13,0x0,0x0,0x0,0x75,0x62,0x6f,0x50,0x65,0x72,0x53,0x63,0x65,0x6e,0x65,0x0,0x5,0x0,0x7,0x0,0x17,0x0,0x0,0x0,0x55,0x42,0x4f,0x5f,0x56,0x65,0x72,0x74,0x65,0x78,0x5f,0x50,0x65,0x72,0x46,0x72,0x61,0x6d,0x65,0x0,0x6,0x0,0x5,0x0,0x17,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x76,0x69,0x65,0x77,0x0,0x0,0x0,0x0,0x5,0x0,0x5,0x0,0x19,0x0,0x0,0x0,0x75,0x62,0x6f,0x50,0x65,0x72,0x46,0x72,0x61,0x6d,0x65,0x0,0x5,0x0,0x7,0x0,0x1d,0x0,0x0,0x0,0x55,0x42,0x4f,0x5f,0x56,0x65,0x72,0x74,0x65,0x78,0x5f,0x50,0x65,0x72,0x44,0x72,0x61,0x77,0x0,0x0,0x6,0x0,0x5,0x0,0x1d,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6d,0x6f,0x64,0x65,0x6c,0x0,0x0,0x0,0x5,0x0,0x5,0x0,0x1f,0x0,0x0,0x0,0x75,0x62,0x6f,0x50,0x65,0x72,0x44,0x72,0x61,0x77,0x0,0x0,0x5,0x0,0x5,0x0,0x25,0x0,0x0,0x0,0x69,0x6e,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x0,0x0,0x5,0x0,0x5,0x0,0x31,0x0,0x0,0x0,0x6f,0x75,0x74,0x54,0x65,0x78,0x43,0x6f,0x6f,0x72,0x64,0x0,0x5,0x0,0x5,0x0,0x33,0x0,0x0,0x0,0x69,0x6e,0x54,0x65,0x78,0x43,0x6f,0x6f,0x72,0x64,0x0,0x0,0x47,0x0,0x3,0x0,0xb,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0xb,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0xb,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0xb,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0xb,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x47,0x0,0x3,0x0,0x11,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x48,0x0,0x4,0x0,0x11,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x5,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0x11,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0x11,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x23,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x13,0x0,0x0,0x0,0x21,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x13,0x0,0x0,0x0,0x22,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x47,0x0,0x3,0x0,0x17,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x48,0x0,0x4,0x0,0x17,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x5,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0x17,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0x17,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x23,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x19,0x0,0x0,0x0,0x21,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x19,0x0,0x0,0x0,0x22,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x47,0x0,0x3,0x0,0x1d,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x48,0x0,0x4,0x0,0x1d,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x5,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0x1d,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0x1d,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x23,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x1f,0x0,0x0,0x0,0x21,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x1f,0x0,0x0,0x0,0x22,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x25,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x31,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x33,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x1,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,0x15,0x0,0x4,0x0,0x8,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0x8,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1c,0x0,0x4,0x0,0xa,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x1e,0x0,0x6,0x0,0xb,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0xc,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0xc,0x0,0x0,0x0,0xd,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x15,0x0,0x4,0x0,0xe,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0xe,0x0,0x0,0x0,0xf,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x18,0x0,0x4,0x0,0x10,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x1e,0x0,0x3,0x0,0x11,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x12,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x11,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x12,0x0,0x0,0x0,0x13,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x14,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x1e,0x0,0x3,0x0,0x17,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x18,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x17,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x18,0x0,0x0,0x0,0x19,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1e,0x0,0x3,0x0,0x1d,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x1e,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1d,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x1e,0x0,0x0,0x0,0x1f,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x17,0x0,0x4,0x0,0x23,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x24,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x23,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x24,0x0,0x0,0x0,0x25,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0x27,0x0,0x0,0x0,0x0,0x0,0x80,0x3f,0x20,0x0,0x4,0x0,0x2d,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x17,0x0,0x4,0x0,0x2f,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x30,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x2f,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x30,0x0,0x0,0x0,0x31,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x32,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x2f,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x32,0x0,0x0,0x0,0x33,0x0,0x0,0x0,0x1,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,0x41,0x0,0x5,0x0,0x14,0x0,0x0,0x0,0x15,0x0,0x0,0x0,0x13,0x0,0x0,0x0,0xf,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x10,0x0,0x0,0x0,0x16,0x0,0x0,0x0,0x15,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x14,0x0,0x0,0x0,0x1a,0x0,0x0,0x0,0x19,0x0,0x0,0x0,0xf,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x10,0x0,0x0,0x0,0x1b,0x0,0x0,0x0,0x1a,0x0,0x0,0x0,0x92,0x0,0x5,0x0,0x10,0x0,0x0,0x0,0x1c,0x0,0x0,0x0,0x16,0x0,0x0,0x0,0x1b,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x14,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x1f,0x0,0x0,0x0,0xf,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x10,0x0,0x0,0x0,0x21,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x92,0x0,0x5,0x0,0x10,0x0,0x0,0x0,0x22,0x0,0x0,0x0,0x1c,0x0,0x0,0x0,0x21,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x23,0x0,0x0,0x0,0x26,0x0,0x0,0x0,0x25,0x0,0x0,0x0,0x51,0x0,0x5,0x0,0x6,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x26,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x51,0x0,0x5,0x0,0x6,0x0,0x0,0x0,0x29,0x0,0x0,0x0,0x26,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x51,0x0,0x5,0x0,0x6,0x0,0x0,0x0,0x2a,0x0,0x0,0x0,0x26,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x50,0x0,0x7,0x0,0x7,0x0,0x0,0x0,0x2b,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x29,0x0,0x0,0x0,0x2a,0x0,0x0,0x0,0x27,0x0,0x0,0x0,0x91,0x0,0x5,0x0,0x7,0x0,0x0,0x0,0x2c,0x0,0x0,0x0,0x22,0x0,0x0,0x0,0x2b,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x2d,0x0,0x0,0x0,0x2e,0x0,0x0,0x0,0xd,0x0,0x0,0x0,0xf,0x0,0x0,0x0,0x3e,0x0,0x3,0x0,0x2e,0x0,0x0,0x0,0x2c,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x2f,0x0,0x0,0x0,0x34,0x0,0x0,0x0,0x33,0x0,0x0,0x0,0x3e,0x0,0x3,0x0,0x31,0x0,0x0,0x0,0x34,0x0,0x0,0x0,0xfd,0x0,0x1,0x0,0x38,0x0,0x1,0x0,}; -CONSTEXPR UINT8 SHADER_SOURCE_UNLITMESH_FRAG[1728] = { -0x3,0x2,0x23,0x7,0x0,0x0,0x1,0x0,0xb,0x0,0xd,0x0,0x3f,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,0xb,0x0,0x0,0x0,0x32,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,0x3,0x0,0x9,0x0,0x0,0x0,0x75,0x76,0x0,0x0,0x5,0x0,0x5,0x0,0xb,0x0,0x0,0x0,0x69,0x6e,0x54,0x65,0x78,0x43,0x6f,0x6f,0x72,0x64,0x0,0x0,0x5,0x0,0x7,0x0,0x16,0x0,0x0,0x0,0x55,0x6e,0x69,0x66,0x6f,0x72,0x6d,0x42,0x75,0x66,0x66,0x65,0x72,0x4f,0x62,0x6a,0x65,0x63,0x74,0x0,0x6,0x0,0x7,0x0,0x16,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x63,0x6f,0x6c,0x6f,0x72,0x4f,0x76,0x65,0x72,0x6c,0x61,0x79,0x0,0x0,0x0,0x0,0x6,0x0,0x5,0x0,0x16,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x66,0x6c,0x69,0x70,0x56,0x0,0x0,0x0,0x6,0x0,0x5,0x0,0x16,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x66,0x6c,0x69,0x70,0x48,0x0,0x0,0x0,0x5,0x0,0x3,0x0,0x18,0x0,0x0,0x0,0x75,0x62,0x6f,0x0,0x5,0x0,0x5,0x0,0x32,0x0,0x0,0x0,0x6f,0x75,0x74,0x43,0x6f,0x6c,0x6f,0x72,0x0,0x0,0x0,0x0,0x5,0x0,0x5,0x0,0x36,0x0,0x0,0x0,0x74,0x65,0x78,0x53,0x61,0x6d,0x70,0x6c,0x65,0x72,0x0,0x0,0x47,0x0,0x4,0x0,0xb,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x3,0x0,0x16,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0x16,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x23,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0x16,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x23,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0x16,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x23,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x18,0x0,0x0,0x0,0x21,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x18,0x0,0x0,0x0,0x22,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x32,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x36,0x0,0x0,0x0,0x21,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x36,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,0x2,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x8,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0xa,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0xa,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0xd,0x0,0x0,0x0,0x0,0x0,0x80,0x3f,0x15,0x0,0x4,0x0,0xe,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0xe,0x0,0x0,0x0,0xf,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x10,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x17,0x0,0x4,0x0,0x15,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x1e,0x0,0x5,0x0,0x16,0x0,0x0,0x0,0x15,0x0,0x0,0x0,0xe,0x0,0x0,0x0,0xe,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x17,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x16,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x17,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x15,0x0,0x4,0x0,0x19,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0x19,0x0,0x0,0x0,0x1a,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x1b,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0xe,0x0,0x0,0x0,0x14,0x0,0x2,0x0,0x1e,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0xe,0x0,0x0,0x0,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0x19,0x0,0x0,0x0,0x27,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x31,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x15,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x31,0x0,0x0,0x0,0x32,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x19,0x0,0x9,0x0,0x33,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,0x34,0x0,0x0,0x0,0x33,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x35,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x34,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x35,0x0,0x0,0x0,0x36,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0x19,0x0,0x0,0x0,0x3a,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x3b,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x15,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,0x8,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x7,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x3e,0x0,0x3,0x0,0x9,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x10,0x0,0x0,0x0,0x11,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0xf,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0x12,0x0,0x0,0x0,0x11,0x0,0x0,0x0,0x83,0x0,0x5,0x0,0x6,0x0,0x0,0x0,0x13,0x0,0x0,0x0,0xd,0x0,0x0,0x0,0x12,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x10,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0xf,0x0,0x0,0x0,0x3e,0x0,0x3,0x0,0x14,0x0,0x0,0x0,0x13,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x1b,0x0,0x0,0x0,0x1c,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0x1a,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0xe,0x0,0x0,0x0,0x1d,0x0,0x0,0x0,0x1c,0x0,0x0,0x0,0xab,0x0,0x5,0x0,0x1e,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x1d,0x0,0x0,0x0,0x1f,0x0,0x0,0x0,0xf7,0x0,0x3,0x0,0x22,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfa,0x0,0x4,0x0,0x20,0x0,0x0,0x0,0x21,0x0,0x0,0x0,0x22,0x0,0x0,0x0,0xf8,0x0,0x2,0x0,0x21,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x10,0x0,0x0,0x0,0x23,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x1f,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0x24,0x0,0x0,0x0,0x23,0x0,0x0,0x0,0x83,0x0,0x5,0x0,0x6,0x0,0x0,0x0,0x25,0x0,0x0,0x0,0xd,0x0,0x0,0x0,0x24,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x10,0x0,0x0,0x0,0x26,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x1f,0x0,0x0,0x0,0x3e,0x0,0x3,0x0,0x26,0x0,0x0,0x0,0x25,0x0,0x0,0x0,0xf9,0x0,0x2,0x0,0x22,0x0,0x0,0x0,0xf8,0x0,0x2,0x0,0x22,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x1b,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0x27,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0xe,0x0,0x0,0x0,0x29,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0xab,0x0,0x5,0x0,0x1e,0x0,0x0,0x0,0x2a,0x0,0x0,0x0,0x29,0x0,0x0,0x0,0x1f,0x0,0x0,0x0,0xf7,0x0,0x3,0x0,0x2c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfa,0x0,0x4,0x0,0x2a,0x0,0x0,0x0,0x2b,0x0,0x0,0x0,0x2c,0x0,0x0,0x0,0xf8,0x0,0x2,0x0,0x2b,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x10,0x0,0x0,0x0,0x2d,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0xf,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0x2e,0x0,0x0,0x0,0x2d,0x0,0x0,0x0,0x83,0x0,0x5,0x0,0x6,0x0,0x0,0x0,0x2f,0x0,0x0,0x0,0xd,0x0,0x0,0x0,0x2e,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x10,0x0,0x0,0x0,0x30,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0xf,0x0,0x0,0x0,0x3e,0x0,0x3,0x0,0x30,0x0,0x0,0x0,0x2f,0x0,0x0,0x0,0xf9,0x0,0x2,0x0,0x2c,0x0,0x0,0x0,0xf8,0x0,0x2,0x0,0x2c,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x34,0x0,0x0,0x0,0x37,0x0,0x0,0x0,0x36,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x7,0x0,0x0,0x0,0x38,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x57,0x0,0x5,0x0,0x15,0x0,0x0,0x0,0x39,0x0,0x0,0x0,0x37,0x0,0x0,0x0,0x38,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x3b,0x0,0x0,0x0,0x3c,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0x3a,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x15,0x0,0x0,0x0,0x3d,0x0,0x0,0x0,0x3c,0x0,0x0,0x0,0x85,0x0,0x5,0x0,0x15,0x0,0x0,0x0,0x3e,0x0,0x0,0x0,0x39,0x0,0x0,0x0,0x3d,0x0,0x0,0x0,0x3e,0x0,0x3,0x0,0x32,0x0,0x0,0x0,0x3e,0x0,0x0,0x0,0xfd,0x0,0x1,0x0,0x38,0x0,0x1,0x0,}; +CONSTEXPR UINT8 SHADER_SOURCE_UNLITMESH_FRAG[1792] = { +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,0xb,0x0,0x0,0x0,0x2e,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,0x3,0x0,0x9,0x0,0x0,0x0,0x75,0x76,0x0,0x0,0x5,0x0,0x5,0x0,0xb,0x0,0x0,0x0,0x69,0x6e,0x54,0x65,0x78,0x43,0x6f,0x6f,0x72,0x64,0x0,0x0,0x5,0x0,0x7,0x0,0xf,0x0,0x0,0x0,0x55,0x6e,0x69,0x66,0x6f,0x72,0x6d,0x42,0x75,0x66,0x66,0x65,0x72,0x4f,0x62,0x6a,0x65,0x63,0x74,0x0,0x6,0x0,0x7,0x0,0xf,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x63,0x6f,0x6c,0x6f,0x72,0x4f,0x76,0x65,0x72,0x6c,0x61,0x79,0x0,0x0,0x0,0x0,0x6,0x0,0x5,0x0,0xf,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x66,0x6c,0x69,0x70,0x56,0x0,0x0,0x0,0x6,0x0,0x5,0x0,0xf,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x66,0x6c,0x69,0x70,0x48,0x0,0x0,0x0,0x5,0x0,0x3,0x0,0x11,0x0,0x0,0x0,0x75,0x62,0x6f,0x0,0x5,0x0,0x5,0x0,0x2e,0x0,0x0,0x0,0x6f,0x75,0x74,0x43,0x6f,0x6c,0x6f,0x72,0x0,0x0,0x0,0x0,0x5,0x0,0x5,0x0,0x32,0x0,0x0,0x0,0x74,0x65,0x78,0x53,0x61,0x6d,0x70,0x6c,0x65,0x72,0x0,0x0,0x47,0x0,0x4,0x0,0xb,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x3,0x0,0xf,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0xf,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x23,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0xf,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x23,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0xf,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x23,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x11,0x0,0x0,0x0,0x21,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x11,0x0,0x0,0x0,0x22,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x2e,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x32,0x0,0x0,0x0,0x21,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x32,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,0x2,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x8,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0xa,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0xa,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x17,0x0,0x4,0x0,0xd,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x15,0x0,0x4,0x0,0xe,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1e,0x0,0x5,0x0,0xf,0x0,0x0,0x0,0xd,0x0,0x0,0x0,0xe,0x0,0x0,0x0,0xe,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x10,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0xf,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x10,0x0,0x0,0x0,0x11,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x15,0x0,0x4,0x0,0x12,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0x12,0x0,0x0,0x0,0x13,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x14,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0xe,0x0,0x0,0x0,0x14,0x0,0x2,0x0,0x17,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0xe,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0x1c,0x0,0x0,0x0,0x0,0x0,0x80,0x3f,0x20,0x0,0x4,0x0,0x1d,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0x12,0x0,0x0,0x0,0x22,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0xe,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x2d,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0xd,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x2d,0x0,0x0,0x0,0x2e,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x19,0x0,0x9,0x0,0x2f,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,0x30,0x0,0x0,0x0,0x2f,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x31,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x30,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x31,0x0,0x0,0x0,0x32,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0x12,0x0,0x0,0x0,0x36,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x37,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0xd,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0xe,0x0,0x0,0x0,0x3b,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x3c,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0x3f,0x0,0x0,0x0,0xcd,0xcc,0xcc,0x3d,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,0x8,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x7,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x3e,0x0,0x3,0x0,0x9,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x14,0x0,0x0,0x0,0x15,0x0,0x0,0x0,0x11,0x0,0x0,0x0,0x13,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0xe,0x0,0x0,0x0,0x16,0x0,0x0,0x0,0x15,0x0,0x0,0x0,0xab,0x0,0x5,0x0,0x17,0x0,0x0,0x0,0x19,0x0,0x0,0x0,0x16,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0xf7,0x0,0x3,0x0,0x1b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfa,0x0,0x4,0x0,0x19,0x0,0x0,0x0,0x1a,0x0,0x0,0x0,0x1b,0x0,0x0,0x0,0xf8,0x0,0x2,0x0,0x1a,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x1d,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0x1f,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x83,0x0,0x5,0x0,0x6,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x1c,0x0,0x0,0x0,0x1f,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x1d,0x0,0x0,0x0,0x21,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0x3e,0x0,0x3,0x0,0x21,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0xf9,0x0,0x2,0x0,0x1b,0x0,0x0,0x0,0xf8,0x0,0x2,0x0,0x1b,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x14,0x0,0x0,0x0,0x23,0x0,0x0,0x0,0x11,0x0,0x0,0x0,0x22,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0xe,0x0,0x0,0x0,0x24,0x0,0x0,0x0,0x23,0x0,0x0,0x0,0xab,0x0,0x5,0x0,0x17,0x0,0x0,0x0,0x25,0x0,0x0,0x0,0x24,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0xf7,0x0,0x3,0x0,0x27,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfa,0x0,0x4,0x0,0x25,0x0,0x0,0x0,0x26,0x0,0x0,0x0,0x27,0x0,0x0,0x0,0xf8,0x0,0x2,0x0,0x26,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x1d,0x0,0x0,0x0,0x29,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0x2a,0x0,0x0,0x0,0x29,0x0,0x0,0x0,0x83,0x0,0x5,0x0,0x6,0x0,0x0,0x0,0x2b,0x0,0x0,0x0,0x1c,0x0,0x0,0x0,0x2a,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x1d,0x0,0x0,0x0,0x2c,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x3e,0x0,0x3,0x0,0x2c,0x0,0x0,0x0,0x2b,0x0,0x0,0x0,0xf9,0x0,0x2,0x0,0x27,0x0,0x0,0x0,0xf8,0x0,0x2,0x0,0x27,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x30,0x0,0x0,0x0,0x33,0x0,0x0,0x0,0x32,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x7,0x0,0x0,0x0,0x34,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x57,0x0,0x5,0x0,0xd,0x0,0x0,0x0,0x35,0x0,0x0,0x0,0x33,0x0,0x0,0x0,0x34,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x37,0x0,0x0,0x0,0x38,0x0,0x0,0x0,0x11,0x0,0x0,0x0,0x36,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0xd,0x0,0x0,0x0,0x39,0x0,0x0,0x0,0x38,0x0,0x0,0x0,0x85,0x0,0x5,0x0,0xd,0x0,0x0,0x0,0x3a,0x0,0x0,0x0,0x35,0x0,0x0,0x0,0x39,0x0,0x0,0x0,0x3e,0x0,0x3,0x0,0x2e,0x0,0x0,0x0,0x3a,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x3c,0x0,0x0,0x0,0x3d,0x0,0x0,0x0,0x2e,0x0,0x0,0x0,0x3b,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0x3e,0x0,0x0,0x0,0x3d,0x0,0x0,0x0,0xb8,0x0,0x5,0x0,0x17,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x3e,0x0,0x0,0x0,0x3f,0x0,0x0,0x0,0xf7,0x0,0x3,0x0,0x42,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfa,0x0,0x4,0x0,0x40,0x0,0x0,0x0,0x41,0x0,0x0,0x0,0x42,0x0,0x0,0x0,0xf8,0x0,0x2,0x0,0x41,0x0,0x0,0x0,0xfc,0x0,0x1,0x0,0xf8,0x0,0x2,0x0,0x42,0x0,0x0,0x0,0xfd,0x0,0x1,0x0,0x38,0x0,0x1,0x0,}; } // namespace ia::iae diff --git a/Src/IAEngine/inc/IAEngine/Components/BoxCollider2D.hpp b/Src/IAEngine/inc/IAEngine/Components/BoxCollider2D.hpp new file mode 100644 index 0000000..e209ff0 --- /dev/null +++ b/Src/IAEngine/inc/IAEngine/Components/BoxCollider2D.hpp @@ -0,0 +1,49 @@ +// IAEngine: 2D Game Engine by IA +// Copyright (C) 2025 IAS (ias@iasoft.dev) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#pragma once + +#include + +namespace ia::iae +{ + class BoxCollider2DComponent : public IComponent + { + public: + BoxCollider2DComponent(IN Node *node); + + BOOL& IsDynamic(){return m_isDynamic;} + + glm::vec4& Shape() + { + return m_shape; + } + + CONST glm::vec4& AbsoluteShape() CONST + { + return m_absoluteShape; + } + + public: + VOID Draw(); + VOID Update(); + + private: + BOOL m_isDynamic{}; + glm::vec4 m_shape{}; + glm::vec4 m_absoluteShape{}; + }; +} // namespace ia::iae \ No newline at end of file diff --git a/Src/IAEngine/inc/IAEngine/Components/Component.hpp b/Src/IAEngine/inc/IAEngine/Components/Component.hpp index 6ee3b74..531a5f6 100644 --- a/Src/IAEngine/inc/IAEngine/Components/Component.hpp +++ b/Src/IAEngine/inc/IAEngine/Components/Component.hpp @@ -24,13 +24,21 @@ namespace ia::iae class IComponent { - public: - IComponent(IN Node* node): m_node(node) {} - + public: + IComponent(IN Node *node) : m_node(node) + { + } + PURE_VIRTUAL(VOID Draw()); PURE_VIRTUAL(VOID Update()); - protected: - Node* m_node{}; + public: + Node *GetNode() + { + return m_node; + } + + protected: + Node *m_node{}; }; -} \ No newline at end of file +} // namespace ia::iae \ No newline at end of file diff --git a/Src/IAEngine/inc/IAEngine/Components/TextureRenderer.hpp b/Src/IAEngine/inc/IAEngine/Components/TextureRenderer.hpp index f8ec03b..caab9c3 100644 --- a/Src/IAEngine/inc/IAEngine/Components/TextureRenderer.hpp +++ b/Src/IAEngine/inc/IAEngine/Components/TextureRenderer.hpp @@ -26,7 +26,7 @@ namespace ia::iae public: TextureRendererComponent(IN Node *node); - RefPtr &Texture() + Texture &Texture() { return m_texture; } @@ -41,7 +41,7 @@ namespace ia::iae VOID Update(); private: + class Texture m_texture; glm::vec3 m_position; - RefPtr m_texture; }; } // namespace ia::iae \ No newline at end of file diff --git a/Src/IAEngine/inc/IAEngine/Physics/Physics.hpp b/Src/IAEngine/inc/IAEngine/Physics/Physics.hpp index 105caae..372eb9f 100644 --- a/Src/IAEngine/inc/IAEngine/Physics/Physics.hpp +++ b/Src/IAEngine/inc/IAEngine/Physics/Physics.hpp @@ -16,7 +16,7 @@ #pragma once -#include +#include namespace ia::iae { @@ -27,11 +27,7 @@ namespace ia::iae STATIC VOID Terminate(); STATIC VOID Update(); - - STATIC Handle CreateStaticBody(IN glm::vec3 position); - STATIC Handle CreateDynamicBody(IN glm::vec3 position); - STATIC VOID AddBoxCollider(IN Handle body, IN glm::vec3 size); - STATIC glm::vec3 GetBodyPosition(IN Handle body); + STATIC VOID AddCollider(IN BoxCollider2DComponent* collider); }; } \ No newline at end of file