diff --git a/.vscode/settings.json b/.vscode/settings.json index d6faa94..6d3153f 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -9,6 +9,7 @@ "tuple": "cpp", "type_traits": "cpp", "xmemory": "cpp", - "xtr1common": "cpp" + "xtr1common": "cpp", + "chrono": "cpp" } } \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 2018d0f..1d5226c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,6 +9,8 @@ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) project(IAEngine) +add_compile_definitions("__IA_DEBUG=1") + add_subdirectory(Vendor/) add_subdirectory(Dependencies/IACore) diff --git a/Src/IAESandbox/imp/cpp/Game.cpp b/Src/IAESandbox/imp/cpp/Game.cpp index 14a36c7..dc903c3 100644 --- a/Src/IAESandbox/imp/cpp/Game.cpp +++ b/Src/IAESandbox/imp/cpp/Game.cpp @@ -4,12 +4,16 @@ #include +#include + namespace ia::iae::game { RefPtr scene; ResourceManager* g_resourceManager{}; + RefPtr g_tex; + VOID Game::Initialize() { g_resourceManager = m_engine->RegisterResourceManager(); @@ -18,15 +22,20 @@ namespace ia::iae::game m_engine->ChangeScene(scene); iae::Renderer::AddDebugUIWindow("Debug Window", {100, 100}, {100, 200}, [](){}); + + const auto d = File::ReadToVector("Graphics/1.jpg"); + g_tex = g_resourceManager->CreateTexture(d.data(), d.size()); + + } VOID Game::Terminate() { - + g_tex.reset(); } VOID Game::Update() { - + g_tex->Draw({}, {}, {}, false, false, {}); } } \ No newline at end of file diff --git a/Src/IAEngine/CMakeLists.txt b/Src/IAEngine/CMakeLists.txt index 0a1a86f..7ade85b 100644 --- a/Src/IAEngine/CMakeLists.txt +++ b/Src/IAEngine/CMakeLists.txt @@ -6,13 +6,14 @@ set(IAEngine_Sources imp/cpp/Input.cpp imp/cpp/Scene.cpp imp/cpp/Random.cpp + imp/cpp/Texture.cpp imp/cpp/ResourceManager.cpp imp/cpp/Rendering/Camera.cpp - imp/cpp/Rendering/Texture.cpp imp/cpp/Rendering/Renderer.cpp imp/cpp/Rendering/GPUBuffer.cpp + imp/cpp/Rendering/GPUTexture.cpp imp/cpp/Rendering/Mesh/Quad.cpp diff --git a/Src/IAEngine/imp/cpp/IAEngine.cpp b/Src/IAEngine/imp/cpp/IAEngine.cpp index e63f2fb..5a62e12 100644 --- a/Src/IAEngine/imp/cpp/IAEngine.cpp +++ b/Src/IAEngine/imp/cpp/IAEngine.cpp @@ -84,6 +84,8 @@ namespace ia::iae { IAE_LOG_INFO("Shutting down IAEngine"); + m_resourceManager.reset(); + Physics::Terminate(); Audio::Terminate(); Renderer::Terminate(); diff --git a/Src/IAEngine/imp/cpp/Rendering/GPUBuffer.cpp b/Src/IAEngine/imp/cpp/Rendering/GPUBuffer.cpp index 9e757a1..76ee653 100644 --- a/Src/IAEngine/imp/cpp/Rendering/GPUBuffer.cpp +++ b/Src/IAEngine/imp/cpp/Rendering/GPUBuffer.cpp @@ -21,64 +21,81 @@ namespace ia::iae { EXTERN SDL_GPUDevice *g_gpuDevice; - - UINT32 g_stagingBufferSize = 4096; - SDL_GPUTransferBuffer* g_stagingBuffer{}; - RefPtr GPUBuffer::Create(IN PCVOID data, IN UINT32 dataSize) + UINT32 g_stagingBufferSize = 4096; + SDL_GPUTransferBuffer *g_stagingBuffer{}; + + RefPtr GPUBuffer::Create(IN Usage usage, IN PCVOID data, IN UINT32 dataSize) { const auto res = MakeRefPtr(); - SDL_GPUBufferCreateInfo createInfo{ - .usage = SDL_GPU_BUFFERUSAGE_VERTEX, - .size = dataSize - }; - SDL_GPUBuffer* handle{}; - if(!(handle = SDL_CreateGPUBuffer(g_gpuDevice, &createInfo))) + SDL_GPUBufferUsageFlags _usage{}; + switch (usage) + { + case Usage::VERTEX: + _usage = SDL_GPU_BUFFERUSAGE_VERTEX; + break; + + case Usage::INDEX: + _usage = SDL_GPU_BUFFERUSAGE_INDEX; + break; + + case Usage::STORAGE: + _usage = SDL_GPU_BUFFERUSAGE_GRAPHICS_STORAGE_READ; + break; + + default: + THROW_INVALID_DATA("Invalid usage value for GPUBuffer"); + break; + } + res->m_usage = usage; + + SDL_GPUBufferCreateInfo createInfo{.usage = _usage, .size = dataSize}; + SDL_GPUBuffer *handle{}; + if (!(handle = SDL_CreateGPUBuffer(g_gpuDevice, &createInfo))) { IAE_LOG_ERROR("Couldn't create a SDL3 GPU Buffer: ", SDL_GetError()); return nullptr; } - if(data && dataSize) + if (data && dataSize) { - if(!EnsureStagingBufferSize((UINT32)dataSize)) + if (!EnsureStagingBufferSize((UINT32) dataSize)) return nullptr; + res->m_size = dataSize; + const auto mappedPtr = SDL_MapGPUTransferBuffer(g_gpuDevice, g_stagingBuffer, false); memcpy(mappedPtr, data, dataSize); SDL_UnmapGPUTransferBuffer(g_gpuDevice, g_stagingBuffer); const auto cmdBuffer = SDL_AcquireGPUCommandBuffer(g_gpuDevice); - const auto copyPass = SDL_BeginGPUCopyPass(cmdBuffer); + const auto copyPass = SDL_BeginGPUCopyPass(cmdBuffer); - SDL_GPUTransferBufferLocation src{ - .transfer_buffer = g_stagingBuffer, - .offset = 0 - }; - SDL_GPUBufferRegion dst{ - .buffer = handle, - .offset = 0, - .size = dataSize - }; + SDL_GPUTransferBufferLocation src{.transfer_buffer = g_stagingBuffer, .offset = 0}; + SDL_GPUBufferRegion dst{.buffer = handle, .offset = 0, .size = dataSize}; SDL_UploadToGPUBuffer(copyPass, &src, &dst, false); SDL_EndGPUCopyPass(copyPass); SDL_SubmitGPUCommandBuffer(cmdBuffer); } - res->m_handle = (Handle)handle; + res->m_handle = (Handle) handle; return res; } + GPUBuffer::~GPUBuffer() + { + if (m_handle) + SDL_ReleaseGPUBuffer(g_gpuDevice, (SDL_GPUBuffer *) m_handle); + } + BOOL GPUBuffer::InitializeStagingBuffer() { - SDL_GPUTransferBufferCreateInfo createInfo{ - .usage = SDL_GPU_TRANSFERBUFFERUSAGE_UPLOAD, - .size = g_stagingBufferSize - }; - if(!(g_stagingBuffer = SDL_CreateGPUTransferBuffer(g_gpuDevice, &createInfo))) + SDL_GPUTransferBufferCreateInfo createInfo{.usage = SDL_GPU_TRANSFERBUFFERUSAGE_UPLOAD, + .size = g_stagingBufferSize}; + if (!(g_stagingBuffer = SDL_CreateGPUTransferBuffer(g_gpuDevice, &createInfo))) { IAE_LOG_ERROR("Couldn't create a SDL3 GPU Staging Buffer: ", SDL_GetError()); return false; @@ -88,7 +105,7 @@ namespace ia::iae VOID GPUBuffer::TerminateStagingBuffer() { - if(!g_stagingBuffer) + if (!g_stagingBuffer) return; SDL_ReleaseGPUTransferBuffer(g_gpuDevice, g_stagingBuffer); @@ -96,16 +113,14 @@ namespace ia::iae BOOL GPUBuffer::EnsureStagingBufferSize(IN UINT32 size) { - if(!g_stagingBuffer) + if (!g_stagingBuffer) return false; - if(size <= g_stagingBufferSize) + if (size <= g_stagingBufferSize) return true; SDL_ReleaseGPUTransferBuffer(g_gpuDevice, g_stagingBuffer); - SDL_GPUTransferBufferCreateInfo createInfo{ - .usage = SDL_GPU_TRANSFERBUFFERUSAGE_UPLOAD, - .size = (g_stagingBufferSize = size) - }; - if(!(g_stagingBuffer = SDL_CreateGPUTransferBuffer(g_gpuDevice, &createInfo))) + SDL_GPUTransferBufferCreateInfo createInfo{.usage = SDL_GPU_TRANSFERBUFFERUSAGE_UPLOAD, + .size = (g_stagingBufferSize = size)}; + if (!(g_stagingBuffer = SDL_CreateGPUTransferBuffer(g_gpuDevice, &createInfo))) { IAE_LOG_ERROR("Couldn't create a SDL3 GPU Staging Buffer: ", SDL_GetError()); return false; diff --git a/Src/IAEngine/imp/cpp/Rendering/GPUTexture.cpp b/Src/IAEngine/imp/cpp/Rendering/GPUTexture.cpp new file mode 100644 index 0000000..394f5f2 --- /dev/null +++ b/Src/IAEngine/imp/cpp/Rendering/GPUTexture.cpp @@ -0,0 +1,98 @@ +// 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 + +namespace ia::iae +{ + EXTERN SDL_GPUDevice *g_gpuDevice; + + SDL_GPUSampler *g_defaultSampler{}; + + VOID GPUTexture::Initialize() + { + if (g_defaultSampler) + return; + SDL_GPUSamplerCreateInfo createInfo{ + .min_filter = SDL_GPU_FILTER_LINEAR, + .mag_filter = SDL_GPU_FILTER_LINEAR, + .mipmap_mode = SDL_GPU_SAMPLERMIPMAPMODE_LINEAR, + .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, + }; + g_defaultSampler = SDL_CreateGPUSampler(g_gpuDevice, &createInfo); + } + + VOID GPUTexture::Terminate() + { + if (g_defaultSampler) + SDL_ReleaseGPUSampler(g_gpuDevice, g_defaultSampler); + } + + Handle GPUTexture::GetDefaultSampler() + { + return (Handle) g_defaultSampler; + } + + RefPtr GPUTexture::Create(IN PCUINT8 rgbaData, IN INT32 width, IN INT32 height) + { + const auto res = MakeRefPtr(); + + SDL_GPUTextureCreateInfo createInfo{.type = SDL_GPU_TEXTURETYPE_2D, + .format = SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM, + .usage = SDL_GPU_TEXTUREUSAGE_SAMPLER, + .width = (UINT32)width, + .height = (UINT32)height, + .layer_count_or_depth = 1, + .num_levels = 1}; + + SDL_GPUTexture *handle{}; + if (!(handle = SDL_CreateGPUTexture(g_gpuDevice, &createInfo))) + { + IAE_LOG_ERROR("Failed to create a SDL GPU Texture"); + return nullptr; + } + + SDL_GPUTransferBufferCreateInfo stagingBufferCreateInfo{.usage = SDL_GPU_TRANSFERBUFFERUSAGE_UPLOAD, + .size = (UINT32)width * (UINT32)height * 4}; + const auto stagingBuffer = SDL_CreateGPUTransferBuffer(g_gpuDevice, &stagingBufferCreateInfo); + const auto mappedPtr = SDL_MapGPUTransferBuffer(g_gpuDevice, stagingBuffer, false); + SDL_memcpy(mappedPtr, rgbaData, width * height * 4); + SDL_UnmapGPUTransferBuffer(g_gpuDevice, stagingBuffer); + + const auto cmdBuffer = SDL_AcquireGPUCommandBuffer(g_gpuDevice); + const auto copyPass = SDL_BeginGPUCopyPass(cmdBuffer); + SDL_GPUTextureTransferInfo transferInfo{.transfer_buffer = stagingBuffer, .offset = 0}; + SDL_GPUTextureRegion region{.texture = handle, .w = (UINT32)width, .h = (UINT32)height, .d = 1}; + SDL_UploadToGPUTexture(copyPass, &transferInfo, ®ion, false); + SDL_EndGPUCopyPass(copyPass); + SDL_SubmitGPUCommandBuffer(cmdBuffer); + SDL_ReleaseGPUTransferBuffer(g_gpuDevice, stagingBuffer); + + res->m_handle = (Handle) handle; + + return res; + } + + GPUTexture::~GPUTexture() + { + if (m_handle) + SDL_ReleaseGPUTexture(g_gpuDevice, (SDL_GPUTexture *) m_handle); + } +} // namespace ia::iae \ No newline at end of file diff --git a/Src/IAEngine/imp/cpp/Rendering/Mesh/Quad.cpp b/Src/IAEngine/imp/cpp/Rendering/Mesh/Quad.cpp index 70a3052..4f83338 100644 --- a/Src/IAEngine/imp/cpp/Rendering/Mesh/Quad.cpp +++ b/Src/IAEngine/imp/cpp/Rendering/Mesh/Quad.cpp @@ -28,7 +28,7 @@ namespace ia::iae Vertex_Mesh vertices[6] = {{iam::Vec3f{-1, 1, 0}, iam::Vec2f{0, 0}}, {iam::Vec3f{1, 1, 0}, iam::Vec2f{1, 0}}, {iam::Vec3f{1, -1, 0}, iam::Vec2f{1, 1}}, {iam::Vec3f{-1, 1, 0}, iam::Vec2f{0, 0}}, {iam::Vec3f{1, -1, 0}, iam::Vec2f{1, 1}}, {iam::Vec3f{-1, -1, 0}, iam::Vec2f{0, 1}}}; - g_quadMeshVertexBuffer = GPUBuffer::Create(&vertices, sizeof(vertices)); + g_quadMeshVertexBuffer = GPUBuffer::Create(GPUBuffer::Usage::VERTEX, &vertices, sizeof(vertices)); } VOID QuadMesh::Terminate() @@ -39,6 +39,6 @@ namespace ia::iae VOID QuadMesh::Draw(IN CONST iam::Vec3f &position, IN CONST iam::Vec3f &scale, IN FLOAT32 rotation) { - Renderer::Draw((Handle)g_quadMeshVertexBuffer.get(), 6); + Renderer::Draw(g_quadMeshVertexBuffer->GetHandle(), 6); } } // namespace ia::iae \ No newline at end of file diff --git a/Src/IAEngine/imp/cpp/Rendering/Pipeline/UnlitMesh.cpp b/Src/IAEngine/imp/cpp/Rendering/Pipeline/UnlitMesh.cpp index a13efe6..a23b265 100644 --- a/Src/IAEngine/imp/cpp/Rendering/Pipeline/UnlitMesh.cpp +++ b/Src/IAEngine/imp/cpp/Rendering/Pipeline/UnlitMesh.cpp @@ -27,6 +27,8 @@ namespace ia::iae Pipeline_UnlitMesh::~Pipeline_UnlitMesh() { + if(m_handle) + SDL_ReleaseGPUGraphicsPipeline(g_gpuDevice, (SDL_GPUGraphicsPipeline*)m_handle); } RefPtr Pipeline_UnlitMesh::Create() @@ -34,7 +36,7 @@ namespace ia::iae const auto res = MakeRefPtr(); const auto vertexShader = LoadShaderFromMemory(ShaderStage::VERTEX, SHADER_SOURCE_UNLITMESH_VERT, sizeof(SHADER_SOURCE_UNLITMESH_VERT), 0, 0, 0, 0); - const auto pixelShader = LoadShaderFromMemory(ShaderStage::PIXEL, SHADER_SOURCE_UNLITMESH_FRAG, sizeof(SHADER_SOURCE_UNLITMESH_FRAG), 0, 0, 0, 0); + const auto pixelShader = LoadShaderFromMemory(ShaderStage::PIXEL, SHADER_SOURCE_UNLITMESH_FRAG, sizeof(SHADER_SOURCE_UNLITMESH_FRAG), 1, 0, 0, 0); SDL_GPUColorTargetDescription colorTargets[] = { {.format = SDL_GetGPUSwapchainTextureFormat(g_gpuDevice, g_windowHandle)}}; @@ -49,7 +51,7 @@ namespace ia::iae {.location = 1, .buffer_slot = 0, .format = SDL_GPU_VERTEXELEMENTFORMAT_FLOAT2, - .offset = sizeof(float) * 3}}; + .offset = sizeof(iam::Vec3f)}}; SDL_GPUGraphicsPipelineCreateInfo createInfo = { .vertex_shader = (SDL_GPUShader *) vertexShader, .fragment_shader = (SDL_GPUShader *) pixelShader, diff --git a/Src/IAEngine/imp/cpp/Rendering/Renderer.cpp b/Src/IAEngine/imp/cpp/Rendering/Renderer.cpp index 9943eb7..9cb5ed8 100644 --- a/Src/IAEngine/imp/cpp/Rendering/Renderer.cpp +++ b/Src/IAEngine/imp/cpp/Rendering/Renderer.cpp @@ -16,6 +16,7 @@ #include #include +#include #include #include #include @@ -87,6 +88,8 @@ namespace ia::iae if (!GPUBuffer::InitializeStagingBuffer()) return false; + GPUTexture::Initialize(); + g_pipelineUnlitMesh = Pipeline_UnlitMesh::Create(); QuadMesh::Initialize(); @@ -98,8 +101,12 @@ namespace ia::iae { SDL_WaitForGPUIdle(g_gpuDevice); + g_pipelineUnlitMesh.reset(); + QuadMesh::Terminate(); + GPUTexture::Terminate(); + GPUBuffer::TerminateStagingBuffer(); ImGui_ImplSDL3_Shutdown(); @@ -172,6 +179,15 @@ namespace ia::iae SDL_SubmitGPUCommandBuffer(g_cmdBuffer); } + VOID Renderer::BindTexture(IN Handle handle, IN INT32 index) + { + SDL_GPUTextureSamplerBinding binding { + .texture = (SDL_GPUTexture*)handle, + .sampler = (SDL_GPUSampler*)GPUTexture::GetDefaultSampler() + }; + SDL_BindGPUFragmentSamplers(g_renderPass, index, &binding, 1); + } + VOID Renderer::Draw(IN Handle vertexBufferHandle, IN INT32 vertexCount) { SDL_GPUBufferBinding bindings[] = {{.buffer = (SDL_GPUBuffer *) vertexBufferHandle, .offset = 0}}; diff --git a/Src/IAEngine/imp/cpp/ResourceManager.cpp b/Src/IAEngine/imp/cpp/ResourceManager.cpp index 8eee427..af4011f 100644 --- a/Src/IAEngine/imp/cpp/ResourceManager.cpp +++ b/Src/IAEngine/imp/cpp/ResourceManager.cpp @@ -15,6 +15,7 @@ // along with this program. If not, see . #include +#include #include #include @@ -28,6 +29,12 @@ namespace ia::iae { } + ResourceManager::~ResourceManager() + { + for(auto& t: m_textures) + t.reset(); + } + RefPtr ResourceManager::CreateTexture(IN CONST Span &encodedData) { return CreateTexture(encodedData.data(), encodedData.size()); @@ -46,20 +53,8 @@ namespace ia::iae RefPtr ResourceManager::CreateTexture(IN PCUINT8 rgbaData, IN INT32 width, IN INT32 height) { - //const auto result = MakeRefPtr(m_engine); - - //result->m_width = width; - //result->m_height = height; - - //SDL_Surface *surface = - // SDL_CreateSurfaceFrom(width, height, SDL_PIXELFORMAT_RGBA32, (void *) rgbaData, width << 2); - //if (!surface) - // THROW_UNKNOWN("Failed to create SDL surface: ", SDL_GetError()); - //result->m_handle = SDL_CreateTextureFromSurface((SDL_Renderer *) m_engine->GetRendererHandle(), surface); - //if (!result->m_handle) - // THROW_UNKNOWN("Failed to create SDL Texture: ", SDL_GetError()); - //SDL_DestroySurface(surface); - - return nullptr; + const auto t = GPUTexture::Create(rgbaData, width, height); + m_textures.pushBack(t); + return MakeRefPtr(t->GetHandle(), width, height); } } // namespace ia::iae \ No newline at end of file diff --git a/Src/IAEngine/imp/cpp/Rendering/Texture.cpp b/Src/IAEngine/imp/cpp/Texture.cpp similarity index 55% rename from Src/IAEngine/imp/cpp/Rendering/Texture.cpp rename to Src/IAEngine/imp/cpp/Texture.cpp index 73b8d4f..0d0961b 100644 --- a/Src/IAEngine/imp/cpp/Rendering/Texture.cpp +++ b/Src/IAEngine/imp/cpp/Texture.cpp @@ -15,32 +15,26 @@ // along with this program. If not, see . #include -#include +#include -#include - -#define TEXTURE_HANDLE (SDL_Texture *) m_handle +#include +#include namespace ia::iae { - Texture::Texture() + Texture::Texture(IN Handle handle,IN INT32 width, IN INT32 height): + m_handle(handle), m_size({(FLOAT32)width, (FLOAT32)height, 1.0f}) { } Texture::~Texture() { - SDL_DestroyTexture(TEXTURE_HANDLE); } VOID Texture::Draw(IN CONST iam::Vec3f &position, IN CONST iam::Vec3f &scale, IN FLOAT32 rotation, IN BOOL flipH, IN BOOL flipV, IN CONST iam::Vec4f &colorOverlay) CONST { - // SDL_FRect rect{.x = position.X, .y = position.Y, .w = m_width * scale.X, .h = m_height * scale.Y}; - //SDL_SetTextureColorModFloat(TEXTURE_HANDLE, colorOverlay.X, colorOverlay.Y, colorOverlay.Z); - //SDL_SetTextureAlphaModFloat(TEXTURE_HANDLE, colorOverlay.W); - //SDL_RenderTextureRotated((SDL_Renderer *) m_engine->GetRendererHandle(), TEXTURE_HANDLE, nullptr, &rect, - // rotation, nullptr, - // (SDL_FlipMode) (SDL_FLIP_NONE | (flipV ? SDL_FLIP_VERTICAL : SDL_FLIP_NONE) | - // (flipH ? SDL_FLIP_HORIZONTAL : SDL_FLIP_NONE))); + Renderer::BindTexture(m_handle, 0); + QuadMesh::Draw(position, m_size * scale, rotation); } } // namespace ia::iae \ No newline at end of file diff --git a/Src/IAEngine/imp/glsl/UnlitMesh/UnlitMesh.frag b/Src/IAEngine/imp/glsl/UnlitMesh/UnlitMesh.frag index 6ea360b..8003fcf 100644 --- a/Src/IAEngine/imp/glsl/UnlitMesh/UnlitMesh.frag +++ b/Src/IAEngine/imp/glsl/UnlitMesh/UnlitMesh.frag @@ -5,7 +5,9 @@ layout(location = 0) in vec2 inTexCoord; layout(location = 0) out vec4 outColor; +layout(set = 2, binding = 0) uniform sampler2D texSampler; + void main() { - outColor = vec4(0, 1, 0, 1); + outColor = texture(texSampler, inTexCoord); } \ No newline at end of file diff --git a/Src/IAEngine/imp/glsl/UnlitMesh/UnlitMesh.vert b/Src/IAEngine/imp/glsl/UnlitMesh/UnlitMesh.vert index e5d07f1..16a8fcb 100644 --- a/Src/IAEngine/imp/glsl/UnlitMesh/UnlitMesh.vert +++ b/Src/IAEngine/imp/glsl/UnlitMesh/UnlitMesh.vert @@ -1,10 +1,13 @@ #version 450 #extension GL_ARB_separate_shader_objects : enable +layout (location = 0) in vec3 inPosition; +layout (location = 1) in vec2 inTexcCoord; + layout(location = 0) out vec2 outTexCoord; void main() { - outTexCoord = vec2((gl_VertexIndex << 1) & 2, gl_VertexIndex & 2); - gl_Position = vec4(outTexCoord * 2.0f - 1.0f, 0.0f, 1.0f); + gl_Position = vec4(inPosition, 1.0f); + outTexCoord = inTexcCoord; } \ No newline at end of file diff --git a/Src/IAEngine/imp/hpp/EmbeddedShaders.hpp b/Src/IAEngine/imp/hpp/EmbeddedShaders.hpp index 425fe3b..45a1a45 100644 --- a/Src/IAEngine/imp/hpp/EmbeddedShaders.hpp +++ b/Src/IAEngine/imp/hpp/EmbeddedShaders.hpp @@ -24,10 +24,10 @@ namespace ia::iae { -CONSTEXPR UINT8 SHADER_SOURCE_UNLITMESH_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_UNLITMESH_VERT[1124] = { +0x3,0x2,0x23,0x7,0x0,0x0,0x1,0x0,0xb,0x0,0xd,0x0,0x21,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,0x12,0x0,0x0,0x0,0x1d,0x0,0x0,0x0,0x1f,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,0x5,0x0,0x12,0x0,0x0,0x0,0x69,0x6e,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x0,0x0,0x5,0x0,0x5,0x0,0x1d,0x0,0x0,0x0,0x6f,0x75,0x74,0x54,0x65,0x78,0x43,0x6f,0x6f,0x72,0x64,0x0,0x5,0x0,0x5,0x0,0x1f,0x0,0x0,0x0,0x69,0x6e,0x54,0x65,0x78,0x63,0x43,0x6f,0x6f,0x72,0x64,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,0x4,0x0,0x12,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x1d,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x1f,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,0x17,0x0,0x4,0x0,0x10,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x11,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x11,0x0,0x0,0x0,0x12,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x0,0x0,0x80,0x3f,0x20,0x0,0x4,0x0,0x19,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x17,0x0,0x4,0x0,0x1b,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x2,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,0x20,0x0,0x4,0x0,0x1e,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1b,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x1e,0x0,0x0,0x0,0x1f,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,0x3d,0x0,0x4,0x0,0x10,0x0,0x0,0x0,0x13,0x0,0x0,0x0,0x12,0x0,0x0,0x0,0x51,0x0,0x5,0x0,0x6,0x0,0x0,0x0,0x15,0x0,0x0,0x0,0x13,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x51,0x0,0x5,0x0,0x6,0x0,0x0,0x0,0x16,0x0,0x0,0x0,0x13,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x51,0x0,0x5,0x0,0x6,0x0,0x0,0x0,0x17,0x0,0x0,0x0,0x13,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x50,0x0,0x7,0x0,0x7,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0x15,0x0,0x0,0x0,0x16,0x0,0x0,0x0,0x17,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x19,0x0,0x0,0x0,0x1a,0x0,0x0,0x0,0xd,0x0,0x0,0x0,0xf,0x0,0x0,0x0,0x3e,0x0,0x3,0x0,0x1a,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x1b,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x1f,0x0,0x0,0x0,0x3e,0x0,0x3,0x0,0x1d,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0xfd,0x0,0x1,0x0,0x38,0x0,0x1,0x0,}; -CONSTEXPR UINT8 SHADER_SOURCE_UNLITMESH_FRAG[548] = { -0x3,0x2,0x23,0x7,0x0,0x0,0x1,0x0,0xb,0x0,0xd,0x0,0x10,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,0x9,0x0,0x0,0x0,0xf,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,0x5,0x0,0x9,0x0,0x0,0x0,0x6f,0x75,0x74,0x43,0x6f,0x6c,0x6f,0x72,0x0,0x0,0x0,0x0,0x5,0x0,0x5,0x0,0xf,0x0,0x0,0x0,0x69,0x6e,0x54,0x65,0x78,0x43,0x6f,0x6f,0x72,0x64,0x0,0x0,0x47,0x0,0x4,0x0,0x9,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0xf,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x0,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,0x3,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x8,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x0,0x0,0x80,0x3f,0x2c,0x0,0x7,0x0,0x7,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x17,0x0,0x4,0x0,0xd,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0xe,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0xd,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0xe,0x0,0x0,0x0,0xf,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,0x3e,0x0,0x3,0x0,0x9,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0xfd,0x0,0x1,0x0,0x38,0x0,0x1,0x0,}; +CONSTEXPR UINT8 SHADER_SOURCE_UNLITMESH_FRAG[672] = { +0x3,0x2,0x23,0x7,0x0,0x0,0x1,0x0,0xb,0x0,0xd,0x0,0x14,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,0x9,0x0,0x0,0x0,0x11,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,0x5,0x0,0x9,0x0,0x0,0x0,0x6f,0x75,0x74,0x43,0x6f,0x6c,0x6f,0x72,0x0,0x0,0x0,0x0,0x5,0x0,0x5,0x0,0xd,0x0,0x0,0x0,0x74,0x65,0x78,0x53,0x61,0x6d,0x70,0x6c,0x65,0x72,0x0,0x0,0x5,0x0,0x5,0x0,0x11,0x0,0x0,0x0,0x69,0x6e,0x54,0x65,0x78,0x43,0x6f,0x6f,0x72,0x64,0x0,0x0,0x47,0x0,0x4,0x0,0x9,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0xd,0x0,0x0,0x0,0x21,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0xd,0x0,0x0,0x0,0x22,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x11,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x0,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,0x3,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x8,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x19,0x0,0x9,0x0,0xa,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,0xb,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0xc,0x0,0x0,0x0,0xd,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x17,0x0,0x4,0x0,0xf,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x10,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0xf,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x10,0x0,0x0,0x0,0x11,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,0x3d,0x0,0x4,0x0,0xb,0x0,0x0,0x0,0xe,0x0,0x0,0x0,0xd,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0xf,0x0,0x0,0x0,0x12,0x0,0x0,0x0,0x11,0x0,0x0,0x0,0x57,0x0,0x5,0x0,0x7,0x0,0x0,0x0,0x13,0x0,0x0,0x0,0xe,0x0,0x0,0x0,0x12,0x0,0x0,0x0,0x3e,0x0,0x3,0x0,0x9,0x0,0x0,0x0,0x13,0x0,0x0,0x0,0xfd,0x0,0x1,0x0,0x38,0x0,0x1,0x0,}; } // namespace ia::iae diff --git a/Src/IAEngine/inc/IAEngine/Components/AtlasRenderer.hpp b/Src/IAEngine/inc/IAEngine/Components/AtlasRenderer.hpp index 63e3743..56507d6 100644 --- a/Src/IAEngine/inc/IAEngine/Components/AtlasRenderer.hpp +++ b/Src/IAEngine/inc/IAEngine/Components/AtlasRenderer.hpp @@ -17,7 +17,7 @@ #pragma once #include -#include +#include namespace ia::iae { diff --git a/Src/IAEngine/inc/IAEngine/Components/SpriteRenderer.hpp b/Src/IAEngine/inc/IAEngine/Components/SpriteRenderer.hpp index eaf55a6..075a0da 100644 --- a/Src/IAEngine/inc/IAEngine/Components/SpriteRenderer.hpp +++ b/Src/IAEngine/inc/IAEngine/Components/SpriteRenderer.hpp @@ -17,7 +17,7 @@ #pragma once #include -#include +#include namespace ia::iae { diff --git a/Src/IAEngine/inc/IAEngine/Components/TextureRenderer.hpp b/Src/IAEngine/inc/IAEngine/Components/TextureRenderer.hpp index 5630ca4..320087a 100644 --- a/Src/IAEngine/inc/IAEngine/Components/TextureRenderer.hpp +++ b/Src/IAEngine/inc/IAEngine/Components/TextureRenderer.hpp @@ -17,7 +17,7 @@ #pragma once #include -#include +#include namespace ia::iae { diff --git a/Src/IAEngine/inc/IAEngine/IAEngine.hpp b/Src/IAEngine/inc/IAEngine/IAEngine.hpp index a94ac07..d27e441 100644 --- a/Src/IAEngine/inc/IAEngine/IAEngine.hpp +++ b/Src/IAEngine/inc/IAEngine/IAEngine.hpp @@ -17,7 +17,7 @@ #pragma once #include -#include +#include #include #include #include diff --git a/Src/IAEngine/inc/IAEngine/Nodes/Node.hpp b/Src/IAEngine/inc/IAEngine/Nodes/Node.hpp index 2a17e59..785d54c 100644 --- a/Src/IAEngine/inc/IAEngine/Nodes/Node.hpp +++ b/Src/IAEngine/inc/IAEngine/Nodes/Node.hpp @@ -18,7 +18,7 @@ #include #include -#include +#include namespace ia::iae { diff --git a/Src/IAEngine/inc/IAEngine/Rendering/GPUBuffer.hpp b/Src/IAEngine/inc/IAEngine/Rendering/GPUBuffer.hpp index 67a9e2d..f3aed20 100644 --- a/Src/IAEngine/inc/IAEngine/Rendering/GPUBuffer.hpp +++ b/Src/IAEngine/inc/IAEngine/Rendering/GPUBuffer.hpp @@ -25,15 +25,33 @@ namespace ia::iae class GPUBuffer { public: - STATIC RefPtr Create(IN PCVOID data, IN UINT32 dataSize); + enum class Usage + { + VERTEX, + INDEX, + STORAGE + }; + + public: + ~GPUBuffer(); + + STATIC RefPtr Create(IN Usage usage, IN PCVOID data, IN UINT32 dataSize); + + public: + Handle GetHandle() CONST + { + return m_handle; + } private: + Usage m_usage{}; + UINT32 m_size{}; Handle m_handle{}; private: STATIC BOOL InitializeStagingBuffer(); STATIC VOID TerminateStagingBuffer(); - STATIC BOOL EnsureStagingBufferSize(IN UINT32 size); + STATIC BOOL EnsureStagingBufferSize(IN UINT32 size); friend class Renderer; }; diff --git a/Src/IAEngine/inc/IAEngine/Rendering/GPUTexture.hpp b/Src/IAEngine/inc/IAEngine/Rendering/GPUTexture.hpp new file mode 100644 index 0000000..999f5bd --- /dev/null +++ b/Src/IAEngine/inc/IAEngine/Rendering/GPUTexture.hpp @@ -0,0 +1,44 @@ +// 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 GPUTexture + { + public: + STATIC VOID Initialize(); + STATIC VOID Terminate(); + STATIC Handle GetDefaultSampler(); + + public: + ~GPUTexture(); + + STATIC RefPtr Create(IN PCUINT8 rgbaData, IN INT32 width, IN INT32 height); + + public: + Handle GetHandle() CONST + { + return m_handle; + } + + private: + Handle m_handle{}; + }; +} // namespace ia::iae \ No newline at end of file diff --git a/Src/IAEngine/inc/IAEngine/Rendering/Renderer.hpp b/Src/IAEngine/inc/IAEngine/Rendering/Renderer.hpp index 2327d19..b126dce 100644 --- a/Src/IAEngine/inc/IAEngine/Rendering/Renderer.hpp +++ b/Src/IAEngine/inc/IAEngine/Rendering/Renderer.hpp @@ -44,6 +44,8 @@ namespace ia::iae STATIC VOID BeginFrame(); STATIC VOID EndFrame(); + STATIC VOID BindTexture(IN Handle handle, IN INT32 index); + STATIC VOID Draw(IN Handle vertexBufferHandle, IN INT32 vertexCount); STATIC VOID Draw(IN Handle vertexBufferHandle, IN Handle indexBufferHandle, IN INT32 indexCount); diff --git a/Src/IAEngine/inc/IAEngine/ResourceManager.hpp b/Src/IAEngine/inc/IAEngine/ResourceManager.hpp index 50fa392..0f1f590 100644 --- a/Src/IAEngine/inc/IAEngine/ResourceManager.hpp +++ b/Src/IAEngine/inc/IAEngine/ResourceManager.hpp @@ -17,7 +17,7 @@ #pragma once #include -#include +#include namespace ia::iae { @@ -27,6 +27,7 @@ namespace ia::iae { public: ResourceManager(IN Engine *engine); + ~ResourceManager(); RefPtr CreateTexture(IN CONST Span &encodedData); RefPtr CreateTexture(IN PCUINT8 encodedData, IN SIZE_T encodedDataSize); @@ -45,6 +46,7 @@ namespace ia::iae protected: Engine *CONST m_engine; + Vector> m_textures; friend class Engine; }; diff --git a/Src/IAEngine/inc/IAEngine/Rendering/Texture.hpp b/Src/IAEngine/inc/IAEngine/Texture.hpp similarity index 72% rename from Src/IAEngine/inc/IAEngine/Rendering/Texture.hpp rename to Src/IAEngine/inc/IAEngine/Texture.hpp index 187eeda..c53eef8 100644 --- a/Src/IAEngine/inc/IAEngine/Rendering/Texture.hpp +++ b/Src/IAEngine/inc/IAEngine/Texture.hpp @@ -23,26 +23,26 @@ namespace ia::iae class Texture { public: - Texture(); + Texture(IN Handle handle, IN INT32 width, IN INT32 height); ~Texture(); public: - VOID Draw(IN CONST iam::Vec3f& position, IN CONST iam::Vec3f& scale, IN FLOAT32 rotation, IN BOOL flipH, IN BOOL flipV, IN CONST iam::Vec4f& colorOverlay) CONST; + VOID Draw(IN CONST iam::Vec3f &position, IN CONST iam::Vec3f &scale, IN FLOAT32 rotation, IN BOOL flipH, + IN BOOL flipV, IN CONST iam::Vec4f &colorOverlay) CONST; public: INT32 GetWidth() CONST { - return m_width; + return (INT32)m_size.X; } INT32 GetHeight() CONST { - return m_height; + return (INT32)m_size.Y; } private: - INT32 m_width; - INT32 m_height; - PVOID m_handle{}; + CONST Handle m_handle{}; + CONST iam::Vec3f m_size; }; } // namespace ia::iae \ No newline at end of file