From ffabc974aab9cdf3380381dc2e67bac3ec5d3a98 Mon Sep 17 00:00:00 2001 From: Light Date: Fri, 4 Mar 2022 22:40:20 +0330 Subject: [PATCH] Lets GOOOO --- .gitignore | 4 + .gitmodules | 9 +- Assets/Shaders/Quad/Quad_PS.glsl | 10 + Assets/Shaders/Quad/Quad_PS.hlsl | 4 - Assets/Shaders/Quad/Quad_VS.glsl | 17 + Assets/Shaders/Quad/Quad_VS.hlsl | 19 - Assets/Shaders/Texture/Texture_PS.glsl | 12 + Assets/Shaders/Texture/Texture_PS.hlsl | 7 - Assets/Shaders/Texture/Texture_VS.glsl | 19 + Assets/Shaders/Texture/Texture_VS.hlsl | 19 - .../TintedTexture/TintedTexture_PS.glsl | 14 + .../TintedTexture/TintedTexture_PS.hlsl | 7 - .../TintedTexture/TintedTexture_VS.glsl | 22 + .../TintedTexture/TintedTexture_VS.hlsl | 21 - CMakeLists.txt | 55 ++- Dependencies/ShaderConductor | 1 - Dependencies/shaderc | 1 + Dependencies/spirv-cross | 1 + Engine/.clang-format | 139 ++++++ Engine/CMakeLists.txt | 10 +- Engine/src/Engine/Graphics/Renderer.cpp | 454 +++++++++--------- .../RendererPrograms/QuadRendererProgram.cpp | 6 +- .../TextureRendererProgram.cpp | 6 +- .../TintedTextureRendererProgram.cpp | 6 +- .../Components/SpriteRendererComponent.h | 2 +- .../GraphicsAPI/OpenGL/glGraphicsContext.cpp | 6 +- .../Platform/GraphicsAPI/OpenGL/glShader.cpp | 235 ++++----- .../Platform/GraphicsAPI/OpenGL/glShader.h | 30 +- Mirror/.clang-format | 139 ++++++ Mirror/CMakeLists.txt | 30 +- Mirror/src/EditorLayer.cpp | 157 +++--- Mirror/src/EditorLayer.h | 51 +- Mirror/src/Panels/ContentBrowser.cpp | 37 +- compile_commands.json | 1 + default_gui_layout.ini | 42 +- 35 files changed, 929 insertions(+), 664 deletions(-) create mode 100644 Assets/Shaders/Quad/Quad_PS.glsl delete mode 100644 Assets/Shaders/Quad/Quad_PS.hlsl create mode 100644 Assets/Shaders/Quad/Quad_VS.glsl delete mode 100644 Assets/Shaders/Quad/Quad_VS.hlsl create mode 100644 Assets/Shaders/Texture/Texture_PS.glsl delete mode 100644 Assets/Shaders/Texture/Texture_PS.hlsl create mode 100644 Assets/Shaders/Texture/Texture_VS.glsl delete mode 100644 Assets/Shaders/Texture/Texture_VS.hlsl create mode 100644 Assets/Shaders/TintedTexture/TintedTexture_PS.glsl delete mode 100644 Assets/Shaders/TintedTexture/TintedTexture_PS.hlsl create mode 100644 Assets/Shaders/TintedTexture/TintedTexture_VS.glsl delete mode 100644 Assets/Shaders/TintedTexture/TintedTexture_VS.hlsl delete mode 160000 Dependencies/ShaderConductor create mode 160000 Dependencies/shaderc create mode 160000 Dependencies/spirv-cross create mode 100644 Engine/.clang-format create mode 100644 Mirror/.clang-format create mode 120000 compile_commands.json diff --git a/.gitignore b/.gitignore index 1c91954..2c20ba1 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ bin/ bin-obj/ build/ +.cache/ # VS Files **.vcxproj** @@ -27,3 +28,6 @@ Makefile !**/default_gui_layout.ini CMake/ + +.vimspector.json +compiled_commands.json diff --git a/.gitmodules b/.gitmodules index 37350a6..74da80c 100644 --- a/.gitmodules +++ b/.gitmodules @@ -13,9 +13,12 @@ [submodule "Dependencies/entt"] path = Dependencies/entt url = https://github.com/skypjack/entt -[submodule "Dependencies/ShaderConductor"] - path = Dependencies/ShaderConductor - url = https://github.com/Light3039/shaderconductor [submodule "Dependencies/yaml-cpp"] path = Dependencies/yaml-cpp url = https://github.com/jbeder/yaml-cpp +[submodule "Dependencies/shaderc"] + path = Dependencies/shaderc + url = https://github.com/google/shaderc +[submodule "Dependencies/spirv-cross"] + path = Dependencies/spirv-cross + url = https://github.com/KhronosGroup/SPIRV-Cross diff --git a/Assets/Shaders/Quad/Quad_PS.glsl b/Assets/Shaders/Quad/Quad_PS.glsl new file mode 100644 index 0000000..87d5b78 --- /dev/null +++ b/Assets/Shaders/Quad/Quad_PS.glsl @@ -0,0 +1,10 @@ +#version 440 core + +in vec4 vso_FragmentColor; + +out vec4 fso_FragmentColor; + +void main() +{ + fso_FragmentColor = vso_FragmentColor; +} diff --git a/Assets/Shaders/Quad/Quad_PS.hlsl b/Assets/Shaders/Quad/Quad_PS.hlsl deleted file mode 100644 index 5ffca78..0000000 --- a/Assets/Shaders/Quad/Quad_PS.hlsl +++ /dev/null @@ -1,4 +0,0 @@ -float4 main(float4 Color : COLOR) : SV_Target -{ - return Color; -} \ No newline at end of file diff --git a/Assets/Shaders/Quad/Quad_VS.glsl b/Assets/Shaders/Quad/Quad_VS.glsl new file mode 100644 index 0000000..acef272 --- /dev/null +++ b/Assets/Shaders/Quad/Quad_VS.glsl @@ -0,0 +1,17 @@ +#version 440 core + +layout(location = 0) in vec4 a_Position; +layout(location = 1) in vec4 a_Color; + +layout(std140, binding = 0) uniform ub_ViewProjection +{ + mat4 viewProjection; +}; + +layout(location = 0) out vec4 vso_FragmentColor; + +void main() +{ + gl_Position = viewProjection * a_Position; + vso_FragmentColor = a_Color; +} diff --git a/Assets/Shaders/Quad/Quad_VS.hlsl b/Assets/Shaders/Quad/Quad_VS.hlsl deleted file mode 100644 index f4d34b3..0000000 --- a/Assets/Shaders/Quad/Quad_VS.hlsl +++ /dev/null @@ -1,19 +0,0 @@ -struct VertexOut -{ - float4 Color : COLOR; - float4 Position : SV_Position; -}; - -cbuffer cv_ViewProjection : register(b0) -{ - row_major matrix viewProjection; -} - -VertexOut main(float4 InPosition : POSITION, float4 InColor : COLOR) -{ - VertexOut vso; - vso.Position = mul(InPosition, viewProjection); - vso.Color = InColor; - - return vso; -} \ No newline at end of file diff --git a/Assets/Shaders/Texture/Texture_PS.glsl b/Assets/Shaders/Texture/Texture_PS.glsl new file mode 100644 index 0000000..02dbfaf --- /dev/null +++ b/Assets/Shaders/Texture/Texture_PS.glsl @@ -0,0 +1,12 @@ +#version 450 core + +in vec2 vso_TexCoord; + +uniform sampler2D u_Texture; + +out vec4 fso_FragmentColor; + +void main() +{ + fso_FragmentColor = texture(u_Texture, vso_TexCoord); +} diff --git a/Assets/Shaders/Texture/Texture_PS.hlsl b/Assets/Shaders/Texture/Texture_PS.hlsl deleted file mode 100644 index af0f401..0000000 --- a/Assets/Shaders/Texture/Texture_PS.hlsl +++ /dev/null @@ -1,7 +0,0 @@ -sampler samplerState : register(s0); -Texture2D myTexture : register(t0); - -float4 main(float2 InTexChoord : TEXCOORD) : SV_Target -{ - return myTexture.Sample(samplerState, InTexChoord); -} \ No newline at end of file diff --git a/Assets/Shaders/Texture/Texture_VS.glsl b/Assets/Shaders/Texture/Texture_VS.glsl new file mode 100644 index 0000000..386d36b --- /dev/null +++ b/Assets/Shaders/Texture/Texture_VS.glsl @@ -0,0 +1,19 @@ +#version 450 core + +layout(location = 0) in vec4 a_Position; +layout(location = 1) in vec2 a_TexCoord; + +layout(std140, binding = 0) uniform ub_ViewProjection +{ + mat4 u_ViewProjection; +}; + +layout(location = 0) out vec2 vso_TexCoord; + +void main() +{ + gl_Position = u_ViewProjection * a_Position; + + vso_TexCoord = a_TexCoord; +} + diff --git a/Assets/Shaders/Texture/Texture_VS.hlsl b/Assets/Shaders/Texture/Texture_VS.hlsl deleted file mode 100644 index 8fb02e1..0000000 --- a/Assets/Shaders/Texture/Texture_VS.hlsl +++ /dev/null @@ -1,19 +0,0 @@ -struct VertexOut -{ - float2 TexChoord : TEXCOORD; - float4 Position : SV_Position; -}; - -cbuffer cb_ViewProjection : register(b0) -{ - row_major matrix viewProjection; -} - -VertexOut main(float4 InPosition : POSITION, float2 InTexChoord : TEXCOORD) -{ - VertexOut vso; - vso.Position = mul(float4(InPosition), viewProjection); - vso.TexChoord = InTexChoord; - - return vso; -} \ No newline at end of file diff --git a/Assets/Shaders/TintedTexture/TintedTexture_PS.glsl b/Assets/Shaders/TintedTexture/TintedTexture_PS.glsl new file mode 100644 index 0000000..3bd53c6 --- /dev/null +++ b/Assets/Shaders/TintedTexture/TintedTexture_PS.glsl @@ -0,0 +1,14 @@ +#version 450 core + +in vec4 vso_Tint; +in vec2 vso_TexCoord; + +uniform sampler2D u_Texture; + +out vec4 fso_FragmentColor; + +void main() +{ + fso_FragmentColor = texture(u_Texture, vso_TexCoord) * vso_Tint; +} + diff --git a/Assets/Shaders/TintedTexture/TintedTexture_PS.hlsl b/Assets/Shaders/TintedTexture/TintedTexture_PS.hlsl deleted file mode 100644 index 012c6d2..0000000 --- a/Assets/Shaders/TintedTexture/TintedTexture_PS.hlsl +++ /dev/null @@ -1,7 +0,0 @@ -sampler samplerState : register(s0); -Texture2D myTexture : register(t0); - -float4 main(float2 InTexChoord : TEXCOORD, float4 InTint : TINT) : SV_Target -{ - return myTexture.Sample(samplerState, InTexChoord) * InTint; -} \ No newline at end of file diff --git a/Assets/Shaders/TintedTexture/TintedTexture_VS.glsl b/Assets/Shaders/TintedTexture/TintedTexture_VS.glsl new file mode 100644 index 0000000..10e3440 --- /dev/null +++ b/Assets/Shaders/TintedTexture/TintedTexture_VS.glsl @@ -0,0 +1,22 @@ +#version 450 core + +layout(location = 0) in vec4 a_Position; +layout(location = 1) in vec4 a_Tint; +layout(location = 2) in vec2 a_TexCoord; + +layout(std140, binding = 0) uniform ub_ViewProjection +{ + mat4 u_ViewProjection; +}; + +out vec4 vso_Tint; +out vec2 vso_TexCoord; + +void main() +{ + gl_Position = u_ViewProjection * a_Position; + + vso_Tint = a_Tint; + vso_TexCoord = a_TexCoord; +} + diff --git a/Assets/Shaders/TintedTexture/TintedTexture_VS.hlsl b/Assets/Shaders/TintedTexture/TintedTexture_VS.hlsl deleted file mode 100644 index 6c31047..0000000 --- a/Assets/Shaders/TintedTexture/TintedTexture_VS.hlsl +++ /dev/null @@ -1,21 +0,0 @@ -struct VertexOut -{ - float2 TexChoord : TEXCOORD; - float4 Tint : TINT; - float4 Position : SV_Position; -}; - -cbuffer cb_ViewProjection : register(b0) -{ - row_major matrix viewProjection; -} - -VertexOut main(float4 InPosition : POSITION, float4 InTint : TINT, float2 InTexChoord : TEXCOORD) -{ - VertexOut vso; - vso.Position = mul(float4(InPosition), viewProjection); - vso.Tint = InTint; - vso.TexChoord = InTexChoord; - - return vso; -} \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 06d518e..97a4b23 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,15 +1,7 @@ cmake_minimum_required(VERSION 3.16) -project(Light VERSION 1.0.0) - -set(CMAKE_CXX_STANDARD 14) -set(SPIRV_CROSS_ENABLE_TESTS OFF) -set(INSTALL_GTEST OFF) - -if(NOT MSVC) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error") -endif() -add_subdirectory(Dependencies/ShaderConductor) # <-- this project should not use "cxx_standard 17" +project(Light) +set(CMAKE_CXX_STANDARD 20) # directories set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) @@ -20,8 +12,9 @@ set(MIRROR_DIR ${CMAKE_BINARY_DIR}/../Mirror/) set(ENGINE_DIR ${CMAKE_BINARY_DIR}/../Engine/) set(DEPENDENCIES_DIR ${CMAKE_BINARY_DIR}/../Dependencies/) -# projects -set(CMAKE_CXX_STANDARD 20) +if(NOT MSV) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error") +endif() if(WIN32) add_compile_definitions(LIGHT_PLATFORM_WINDOWS) @@ -29,8 +22,11 @@ elseif(UNIX) add_compile_definitions(LIGHT_PLATFORM_LINUX) endif() +# Projects add_subdirectory(${ENGINE_DIR}/) add_subdirectory(${MIRROR_DIR}/) + +# Dependencies add_subdirectory(${DEPENDENCIES_DIR}GLAD/) add_subdirectory(${DEPENDENCIES_DIR}GLFW/) add_subdirectory(${DEPENDENCIES_DIR}spdlog/) @@ -39,20 +35,35 @@ add_subdirectory(${DEPENDENCIES_DIR}entt/) add_subdirectory(${DEPENDENCIES_DIR}imgui/) add_subdirectory(${DEPENDENCIES_DIR}stb_image/) add_subdirectory(${DEPENDENCIES_DIR}yaml-cpp/) +add_subdirectory(${DEPENDENCIES_DIR}shaderc/) -target_link_libraries(Engine glad) -target_link_libraries(Engine glfw) -target_link_libraries(Engine spdlog) -target_link_libraries(Engine imgui) -target_link_libraries(Engine stb_image) -target_link_libraries(Engine ShaderConductor) -target_link_libraries(Engine yaml-cpp) -target_link_libraries(imgui glad) -target_link_libraries(imgui glfw) -target_link_libraries(Mirror Engine) +# Link +target_link_libraries( + Engine + PRIVATE glad + PRIVATE glfw + PRIVATE spdlog + PRIVATE imgui + PRIVATE stb_image + PRIVATE yaml-cpp + PRIVATE shaderc) +target_link_libraries( + imgui + PRIVATE glad + PRIVATE glfw) + +target_link_libraries( + Mirror + PRIVATE Engine) + +# Precompiled headers target_precompile_headers(Engine PUBLIC ${ENGINE_DIR}src/Engine/ltpch.h) if(MSVC) set_property(DIRECTORY ${CMAE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT Mirror) endif() + + +set(CMAKE_BUILD_TYPE debug) +set(CMAKE_EXPORT_COMPILE_COMMANDS_ON) diff --git a/Dependencies/ShaderConductor b/Dependencies/ShaderConductor deleted file mode 160000 index 30a77c7..0000000 --- a/Dependencies/ShaderConductor +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 30a77c78d24fa08f4fe5fc4428f10dbfc92717a6 diff --git a/Dependencies/shaderc b/Dependencies/shaderc new file mode 160000 index 0000000..96b1dd7 --- /dev/null +++ b/Dependencies/shaderc @@ -0,0 +1 @@ +Subproject commit 96b1dd72a827304817470274a470c4d3b2293451 diff --git a/Dependencies/spirv-cross b/Dependencies/spirv-cross new file mode 160000 index 0000000..3915c37 --- /dev/null +++ b/Dependencies/spirv-cross @@ -0,0 +1 @@ +Subproject commit 3915c37bb184c66760f75e9b027d4229b1b1924a diff --git a/Engine/.clang-format b/Engine/.clang-format new file mode 100644 index 0000000..5e7c904 --- /dev/null +++ b/Engine/.clang-format @@ -0,0 +1,139 @@ +--- +# Core +Language: Cpp +Standard: Cpp11 +ColumnLimit: '0' # No limit + +### Bin pack ### +BinPackArguments: 'true' +BinPackParameters: 'true' + +# Includes +SortIncludes: 'true' +IncludeBlocks: Regroup +IncludeCategories: + # Current Project + - Regex: '"' + Priority: 001 + + # Custom Project Categories... + + # Dependecies + - Regex: '<' + Priority: 500 + + # Custom Deependencies Categories... + + # C++ includes + - Regex: '[^.h .hpp]>' + Priority: 998 + + # C includes + - Regex: '<[^/\n]+[.]h>' + Priority: 999 + +# Braces +BreakBeforeBraces: Custom +BraceWrapping: + AfterCaseLabel: true + AfterClass: true + AfterControlStatement: true + AfterEnum: true + AfterFunction: true + AfterNamespace: false + AfterObjCDeclaration: true + AfterStruct: true + AfterUnion: true + AfterExternBlock: true + BeforeCatch: true + BeforeElse: true + IndentBraces: false + SplitEmptyFunction: true + SplitEmptyRecord: true + SplitEmptyNamespace: true + +# Indentation +UseTab: ForIndentation +TabWidth: '4' +IndentWidth: '4' +ContinuationIndentWidth: '4' +ConstructorInitializerIndentWidth: '4' +IndentCaseLabels: 'false' +IndentWrappedFunctionNames: 'true' +IndentPPDirectives: BeforeHash +NamespaceIndentation: None +AccessModifierOffset: '-4' + +# Space +SpaceAfterCStyleCast: 'false' +SpaceAfterLogicalNot: 'false' +SpaceAfterTemplateKeyword: 'false' +SpaceBeforeAssignmentOperators: 'true' +SpaceBeforeCpp11BracedList: 'true' +SpaceBeforeCtorInitializerColon: 'false' +SpaceBeforeInheritanceColon: 'false' +SpaceBeforeParens: ControlStatements +SpaceBeforeRangeBasedForLoopColon: 'true' +SpaceInEmptyParentheses: 'false' +SpacesBeforeTrailingComments: '1' +SpacesInAngles: 'false' +SpacesInCStyleCastParentheses: 'false' +SpacesInContainerLiterals: 'false' +SpacesInParentheses: 'false' +SpacesInSquareBrackets: 'false' + +### Alignment ### +PointerAlignment: Left +DerivePointerAlignment: 'false' +AlignAfterOpenBracket: Align +AlignEscapedNewlines: Left +AlignConsecutiveDeclarations: 'false' +AlignConsecutiveAssignments: 'true' +AlignConsecutiveMacros: 'true' +AlignOperands: 'true' +AlignTrailingComments: 'true' + +### Single Line ### +AllowShortCaseLabelsOnASingleLine: 'true' +AllowShortFunctionsOnASingleLine: Inline +AllowShortLambdasOnASingleLine: Inline +AllowAllArgumentsOnNextLine: 'false' +AllowShortLoopsOnASingleLine: 'false' +AllowShortBlocksOnASingleLine: 'false' +AllowAllParametersOfDeclarationOnNextLine: 'false' +AllowShortIfStatementsOnASingleLine: Never + +### Break ### +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: 'false' +AlwaysBreakTemplateDeclarations: 'Yes' +BreakBeforeBinaryOperators: None +BreakBeforeTernaryOperators: 'false' +BreakInheritanceList: BeforeComma +BreakStringLiterals: 'false' + +# Penalties +PenaltyBreakAssignment: '0' +PenaltyBreakBeforeFirstCallParameter: '0' +PenaltyBreakComment: '0' +PenaltyBreakFirstLessLess: '0' +PenaltyBreakString: '0' +PenaltyBreakTemplateDeclaration: '0' +PenaltyExcessCharacter: '0' +PenaltyReturnTypeOnItsOwnLine: '999999999' # Nope + +# Constructor Initializers +ConstructorInitializerAllOnOneLineOrOnePerLine: 'true' +AllowAllConstructorInitializersOnNextLine: 'true' +BreakConstructorInitializers: BeforeComma + +# Comments +ReflowComments: 'false' +CommentPragmas: '^ TODO@:' +FixNamespaceComments: 'true' + +# Misc +Cpp11BracedListStyle: 'false' +SortUsingDeclarations: 'true' +KeepEmptyLinesAtTheStartOfBlocks: 'false' +MaxEmptyLinesToKeep: '2' diff --git a/Engine/CMakeLists.txt b/Engine/CMakeLists.txt index d641025..667236b 100644 --- a/Engine/CMakeLists.txt +++ b/Engine/CMakeLists.txt @@ -47,8 +47,8 @@ ${DEPENDENCIES_DIR}glm/ ${DEPENDENCIES_DIR}imgui/ ${DEPENDENCIES_DIR}spdlog/include/ ${DEPENDENCIES_DIR}stb_image/ -${DEPENDENCIES_DIR}ShaderConductor/Include/ ${DEPENDENCIES_DIR}yaml-cpp/include/ +${DEPENDENCIES_DIR}shaderc/libshaderc/include ) source_group(TREE ${ENGINE_DIR} FILES ${ENGINE_ALL_FILES} ${ENGINE_RES_FILES}) @@ -62,11 +62,3 @@ endif() message(BINARY DIRECTORY IS IN ${CMAKE_BINARY_DIR}) - -if(WIN32) - add_custom_command( - TARGET Engine - POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different - ${CMAKE_BINARY_DIR}/Dependencies/ShaderConductor/Bin/Debug/ShaderConductor.dll - ${CMAKE_BINARY_DIR}/bin/Debug) -endif() \ No newline at end of file diff --git a/Engine/src/Engine/Graphics/Renderer.cpp b/Engine/src/Engine/Graphics/Renderer.cpp index 20b5ea2..2112934 100644 --- a/Engine/src/Engine/Graphics/Renderer.cpp +++ b/Engine/src/Engine/Graphics/Renderer.cpp @@ -2,277 +2,269 @@ #include "Blender.h" #include "Buffers.h" +#include "Camera/SceneCamera.h" +#include "Events/WindowEvents.h" #include "Framebuffer.h" #include "RenderCommand.h" #include "Texture.h" -#include "Camera/SceneCamera.h" - -#include "Events/WindowEvents.h" - #include -#include #include +#include namespace Light { - Renderer* Renderer::s_Context = nullptr; +Renderer* Renderer::s_Context = nullptr; - Renderer::Renderer(GLFWwindow* windowHandle, Ref sharedContext) - : m_QuadRenderer(LT_MAX_QUAD_RENDERER_VERTICES, sharedContext), - m_TextureRenderer(LT_MAX_TEXTURE_RENDERER_VERTICES, sharedContext), - m_TintedTextureRenderer(LT_MAX_TINTED_TEXTURE_RENDERER_VERTICES, sharedContext), - m_ViewProjectionBuffer(nullptr), - m_RenderCommand(nullptr), - m_Blender(nullptr), - m_DefaultFramebufferCamera(nullptr), - m_TargetFramebuffer(nullptr), - m_ShouldClearBackbuffer(false) +Renderer::Renderer(GLFWwindow* windowHandle, Ref sharedContext) + : m_QuadRenderer(LT_MAX_QUAD_RENDERER_VERTICES, sharedContext), m_TextureRenderer(LT_MAX_TEXTURE_RENDERER_VERTICES, sharedContext), m_TintedTextureRenderer(LT_MAX_TINTED_TEXTURE_RENDERER_VERTICES, sharedContext), m_ViewProjectionBuffer(nullptr), m_RenderCommand(nullptr), m_Blender(nullptr), m_DefaultFramebufferCamera(nullptr), m_TargetFramebuffer(nullptr), m_ShouldClearBackbuffer(false) +{ + LT_ENGINE_ASSERT(!s_Context, "Renderer::Renderer: an instance of 'Renderer' already exists, do not construct this class!"); + s_Context = this; + + m_ViewProjectionBuffer = ConstantBuffer::Create(ConstantBufferIndex::ViewProjection, sizeof(glm::mat4), sharedContext); + + m_RenderCommand = RenderCommand::Create(windowHandle, sharedContext); + m_Blender = Blender::Create(sharedContext); + m_Blender->Enable(BlendFactor::SRC_ALPHA, BlendFactor::INVERSE_SRC_ALPHA); +} + +Scope Renderer::Create(GLFWwindow* windowHandle, Ref sharedContext) +{ + return MakeScope(new Renderer(windowHandle, sharedContext)); +} + +void Renderer::OnWindowResize(const WindowResizedEvent& event) +{ + m_RenderCommand->SetViewport(0u, 0u, event.GetSize().x, event.GetSize().y); +} + +//======================================== DRAW_QUAD ========================================// +/* tinted textures */ +void Renderer::DrawQuadImpl(const glm::vec3& position, const glm::vec2& size, const glm::vec4& tint, Ref texture) +{ + DrawQuad(glm::translate(glm::mat4(1.0f), position) * glm::scale(glm::mat4(1.0f), { size.x, size.y, 1.0f }), + tint, texture); +} + +/* tint */ +void Renderer::DrawQuadImpl(const glm::vec3& position, const glm::vec2& size, const glm::vec4& tint) +{ + DrawQuad(glm::translate(glm::mat4(1.0f), position) * glm::scale(glm::mat4(1.0f), { size.x, size.y, 1.0f }), + tint); +} + +/* texture */ +void Renderer::DrawQuadImpl(const glm::vec3& position, const glm::vec2& size, Ref texture) +{ + DrawQuad(glm::translate(glm::mat4(1.0f), position) * glm::scale(glm::mat4(1.0f), { size.x, size.y, 1.0f }), + texture); +} +//======================================== DRAW_QUAD ========================================// + +//==================== DRAW_QUAD_TINT ====================// +void Renderer::DrawQuadImpl(const glm::mat4& transform, const glm::vec4& tint) +{ + // locals + QuadRendererProgram::QuadVertexData* bufferMap = m_QuadRenderer.GetMapCurrent(); + + // top left + bufferMap[0].position = transform * glm::vec4(-0.5f, -0.5f, 0.0f, 1.0f); + bufferMap[0].tint = tint; + + // top right + bufferMap[1].position = transform * glm::vec4(0.5f, -0.5f, 0.0f, 1.0f); + bufferMap[1].tint = tint; + + // bottom right + bufferMap[2].position = transform * glm::vec4(0.5f, 0.5f, 0.0f, 1.0f); + bufferMap[2].tint = tint; + + // bottom left + bufferMap[3].position = transform * glm::vec4(-0.5f, 0.5f, 0.0f, 1.0f); + bufferMap[3].tint = tint; + + // advance + if (!m_QuadRenderer.Advance()) { - LT_ENGINE_ASSERT(!s_Context, "Renderer::Renderer: an instance of 'Renderer' already exists, do not construct this class!"); - s_Context = this; - - m_ViewProjectionBuffer = ConstantBuffer::Create(ConstantBufferIndex::ViewProjection, sizeof(glm::mat4), sharedContext); - - m_RenderCommand = RenderCommand::Create(windowHandle, sharedContext); - m_Blender = Blender::Create(sharedContext); - m_Blender->Enable(BlendFactor::SRC_ALPHA, BlendFactor::INVERSE_SRC_ALPHA); + LT_ENGINE_WARN("Renderer::DrawQuadImpl: exceeded LT_MAX_QUAD_RENDERER_VERTICES: {}", LT_MAX_QUAD_RENDERER_VERTICES); + FlushScene(); } +} +//==================== DRAW_QUAD_TINT ====================// - Scope Renderer::Create(GLFWwindow* windowHandle, Ref sharedContext) +//==================== DRAW_QUAD_TEXTURE ====================// +void Renderer::DrawQuadImpl(const glm::mat4& transform, Ref texture) +{ + // #todo: implement a proper binding + LT_ENGINE_ASSERT(texture, "Invalid texture passed to Renderer::DrawQuadImpl"); + texture->Bind(); + + // locals + TextureRendererProgram::TextureVertexData* bufferMap = m_TextureRenderer.GetMapCurrent(); + + // top left + bufferMap[0].position = transform * glm::vec4(-0.5f, -0.5f, 0.0f, 1.0f); + bufferMap[0].texcoord = { 0.0f, 0.0f }; + + // top right + bufferMap[1].position = transform * glm::vec4(0.5f, -0.5f, 0.0f, 1.0f); + bufferMap[1].texcoord = { 1.0f, 0.0f }; + + // bottom right + bufferMap[2].position = transform * glm::vec4(0.5f, 0.5f, 0.0f, 1.0f); + bufferMap[2].texcoord = { 1.0f, 1.0f }; + + // bottom left + bufferMap[3].position = transform * glm::vec4(-0.5f, 0.5f, 0.0f, 1.0f); + bufferMap[3].texcoord = { 0.0f, 1.0f }; + + // advance + if (!m_TextureRenderer.Advance()) { - return MakeScope(new Renderer(windowHandle, sharedContext)); + LT_ENGINE_WARN("Renderer::DrawQuadImpl: exceeded LT_MAX_TEXTURE_RENDERER_VERTICES: {}", LT_MAX_TEXTURE_RENDERER_VERTICES); + FlushScene(); } +} - void Renderer::OnWindowResize(const WindowResizedEvent& event) +void Renderer::DrawQuadImpl(const glm::mat4& transform, const glm::vec4& tint, Ref texture) +{ + // #todo: implement a proper binding + LT_ENGINE_ASSERT(texture, "Invalid texture passed to Renderer::DrawQuadImpl"); + texture->Bind(); + + // locals + TintedTextureRendererProgram::TintedTextureVertexData* bufferMap = m_TintedTextureRenderer.GetMapCurrent(); + + // top left + bufferMap[0].position = transform * glm::vec4(-0.5f, -0.5f, 0.0f, 1.0f); + bufferMap[0].tint = tint; + bufferMap[0].texcoord = { 0.0f, 0.0f }; + + // top right + bufferMap[1].position = transform * glm::vec4(0.5f, -0.5f, 0.0f, 1.0f); + bufferMap[1].tint = tint; + bufferMap[1].texcoord = { 1.0f, 0.0f }; + + // bottom right + bufferMap[2].position = transform * glm::vec4(0.5f, 0.5f, 0.0f, 1.0f); + bufferMap[2].tint = tint; + bufferMap[2].texcoord = { 1.0f, 1.0f }; + + // bottom left + bufferMap[3].position = transform * glm::vec4(-0.5f, 0.5f, 0.0f, 1.0f); + bufferMap[3].tint = tint; + bufferMap[3].texcoord = { 0.0f, 1.0f }; + + // advance + if (!m_TintedTextureRenderer.Advance()) { - m_RenderCommand->SetViewport(0u, 0u, event.GetSize().x, event.GetSize().y); + LT_ENGINE_WARN("Renderer::DrawQuadImpl: exceeded LT_MAX_TEXTURE_RENDERER_VERTICES: {}", LT_MAX_TEXTURE_RENDERER_VERTICES); + FlushScene(); } +} - //======================================== DRAW_QUAD ========================================// - /* tinted textures */ - void Renderer::DrawQuadImpl(const glm::vec3& position, const glm::vec2& size, const glm::vec4& tint, Ref texture) +//==================== DRAW_QUAD_TEXTURE ====================// + +void Renderer::BeginFrame() +{ +} + +void Renderer::EndFrame() +{ + m_RenderCommand->SwapBuffers(); + m_RenderCommand->ClearBackBuffer(m_DefaultFramebufferCamera ? m_DefaultFramebufferCamera->GetBackgroundColor() : glm::vec4(0.0f)); + + m_DefaultFramebufferCamera = nullptr; +} + +void Renderer::BeginSceneImpl(Camera* camera, const glm::mat4& cameraTransform, const Ref& targetFrameBuffer /* = nullptr */) +{ + // determine the target frame buffer + m_TargetFramebuffer = targetFrameBuffer; + + if (targetFrameBuffer) + targetFrameBuffer->BindAsTarget(camera->GetBackgroundColor()); + else { - DrawQuad(glm::translate(glm::mat4(1.0f), position) * glm::scale(glm::mat4(1.0f), { size.x, size.y, 1.0f }), - tint, texture); + m_DefaultFramebufferCamera = camera; + m_RenderCommand->DefaultTargetFramebuffer(); } - /* tint */ - void Renderer::DrawQuadImpl(const glm::vec3& position, const glm::vec2& size, const glm::vec4& tint) + // update view projection buffer + glm::mat4* map = (glm::mat4*)m_ViewProjectionBuffer->Map(); + map[0] = camera->GetProjection() * glm::inverse(cameraTransform); + m_ViewProjectionBuffer->UnMap(); + + // map renderers + m_QuadRenderer.Map(); + m_TextureRenderer.Map(); + m_TintedTextureRenderer.Map(); +} + +void Renderer::FlushScene() +{ + /* tinted texture renderer */ + m_TintedTextureRenderer.UnMap(); + if (m_TintedTextureRenderer.GetQuadCount()) { - DrawQuad(glm::translate(glm::mat4(1.0f), position) * glm::scale(glm::mat4(1.0f), { size.x, size.y, 1.0f }), - tint); + m_TintedTextureRenderer.Bind(); + m_RenderCommand->DrawIndexed(m_TintedTextureRenderer.GetQuadCount() * 6u); } - /* texture */ - void Renderer::DrawQuadImpl(const glm::vec3& position, const glm::vec2& size, Ref texture) - { - DrawQuad(glm::translate(glm::mat4(1.0f), position) * glm::scale(glm::mat4(1.0f), { size.x, size.y, 1.0f }), - texture); - } - //======================================== DRAW_QUAD ========================================// - - //==================== DRAW_QUAD_TINT ====================// - void Renderer::DrawQuadImpl(const glm::mat4& transform, const glm::vec4& tint) + /* quad renderer */ + m_QuadRenderer.UnMap(); + if (m_QuadRenderer.GetQuadCount()) { - // locals - QuadRendererProgram::QuadVertexData* bufferMap = m_QuadRenderer.GetMapCurrent(); - - // top left - bufferMap[0].position = transform * glm::vec4(-0.5f, -0.5f, 0.0f, 1.0f); - bufferMap[0].tint = tint; - - // top right - bufferMap[1].position = transform * glm::vec4( 0.5f, -0.5f, 0.0f, 1.0f); - bufferMap[1].tint = tint; - - // bottom right - bufferMap[2].position = transform * glm::vec4( 0.5f, 0.5f, 0.0f, 1.0f); - bufferMap[2].tint = tint; - - // bottom left - bufferMap[3].position = transform * glm::vec4(-0.5f, 0.5f, 0.0f, 1.0f); - bufferMap[3].tint = tint; - - // advance - if (!m_QuadRenderer.Advance()) - { - LT_ENGINE_WARN("Renderer::DrawQuadImpl: exceeded LT_MAX_QUAD_RENDERER_VERTICES: {}", LT_MAX_QUAD_RENDERER_VERTICES); - FlushScene(); - } + m_QuadRenderer.Bind(); + m_RenderCommand->DrawIndexed(m_QuadRenderer.GetQuadCount() * 6u); } - //==================== DRAW_QUAD_TINT ====================// - //==================== DRAW_QUAD_TEXTURE ====================// - void Renderer::DrawQuadImpl(const glm::mat4& transform, Ref texture) + /* texture renderer */ + m_TextureRenderer.UnMap(); + if (m_TextureRenderer.GetQuadCount()) { - // #todo: implement a proper binding - texture->Bind(); - - // locals - TextureRendererProgram::TextureVertexData* bufferMap = m_TextureRenderer.GetMapCurrent(); - - // top left - bufferMap[0].position = transform * glm::vec4(-0.5f, -0.5f, 0.0f, 1.0f); - bufferMap[0].texcoord = { 0.0f, 0.0f }; - - // top right - bufferMap[1].position = transform * glm::vec4( 0.5f, -0.5f, 0.0f, 1.0f); - bufferMap[1].texcoord = { 1.0f, 0.0f }; - - // bottom right - bufferMap[2].position = transform * glm::vec4( 0.5f, 0.5f, 0.0f, 1.0f); - bufferMap[2].texcoord = { 1.0f, 1.0f }; - - // bottom left - bufferMap[3].position = transform * glm::vec4(-0.5f, 0.5f, 0.0f, 1.0f); - bufferMap[3].texcoord = { 0.0f, 1.0f }; - - // advance - if (!m_TextureRenderer.Advance()) - { - LT_ENGINE_WARN("Renderer::DrawQuadImpl: exceeded LT_MAX_TEXTURE_RENDERER_VERTICES: {}", LT_MAX_TEXTURE_RENDERER_VERTICES); - FlushScene(); - } + m_TextureRenderer.Bind(); + m_RenderCommand->DrawIndexed(m_TextureRenderer.GetQuadCount() * 6u); } - void Renderer::DrawQuadImpl(const glm::mat4& transform, const glm::vec4& tint, Ref texture) + m_QuadRenderer.Map(); + m_TextureRenderer.Map(); + m_TintedTextureRenderer.Map(); +} + +void Renderer::EndSceneImpl() +{ + /* tinted texture renderer */ + m_TintedTextureRenderer.UnMap(); + if (m_TintedTextureRenderer.GetQuadCount()) { - // #todo: implement a proper binding - texture->Bind(); - - // locals - TintedTextureRendererProgram::TintedTextureVertexData* bufferMap = m_TintedTextureRenderer.GetMapCurrent(); - - // top left - bufferMap[0].position = transform * glm::vec4(-0.5f, -0.5f, 0.0f, 1.0f); - bufferMap[0].tint = tint; - bufferMap[0].texcoord = { 0.0f, 0.0f }; - - // top right - bufferMap[1].position = transform * glm::vec4(0.5f, -0.5f, 0.0f, 1.0f); - bufferMap[1].tint = tint; - bufferMap[1].texcoord = { 1.0f, 0.0f }; - - // bottom right - bufferMap[2].position = transform * glm::vec4(0.5f, 0.5f, 0.0f, 1.0f); - bufferMap[2].tint = tint; - bufferMap[2].texcoord = { 1.0f, 1.0f }; - - // bottom left - bufferMap[3].position = transform * glm::vec4(-0.5f, 0.5f, 0.0f, 1.0f); - bufferMap[3].tint = tint; - bufferMap[3].texcoord = { 0.0f, 1.0f }; - - // advance - if (!m_TintedTextureRenderer.Advance()) - { - LT_ENGINE_WARN("Renderer::DrawQuadImpl: exceeded LT_MAX_TEXTURE_RENDERER_VERTICES: {}", LT_MAX_TEXTURE_RENDERER_VERTICES); - FlushScene(); - } + m_TintedTextureRenderer.Bind(); + m_RenderCommand->DrawIndexed(m_TintedTextureRenderer.GetQuadCount() * 6u); } - //==================== DRAW_QUAD_TEXTURE ====================// - - void Renderer::BeginFrame() + /* quad renderer */ + m_QuadRenderer.UnMap(); + if (m_QuadRenderer.GetQuadCount()) { + m_QuadRenderer.Bind(); + m_RenderCommand->DrawIndexed(m_QuadRenderer.GetQuadCount() * 6u); } - void Renderer::EndFrame() + /* texture renderer */ + m_TextureRenderer.UnMap(); + if (m_TextureRenderer.GetQuadCount()) { - m_RenderCommand->SwapBuffers(); - m_RenderCommand->ClearBackBuffer(m_DefaultFramebufferCamera ? m_DefaultFramebufferCamera->GetBackgroundColor() : glm::vec4(0.0f)); - - m_DefaultFramebufferCamera = nullptr; + m_TextureRenderer.Bind(); + m_RenderCommand->DrawIndexed(m_TextureRenderer.GetQuadCount() * 6u); } - void Renderer::BeginSceneImpl(Camera* camera, const glm::mat4& cameraTransform, const Ref& targetFrameBuffer /* = nullptr */) + // reset frame buffer + if (m_TargetFramebuffer) { - // determine the target frame buffer - m_TargetFramebuffer = targetFrameBuffer; - - if (targetFrameBuffer) - targetFrameBuffer->BindAsTarget(camera->GetBackgroundColor()); - else - { - m_DefaultFramebufferCamera = camera; - m_RenderCommand->DefaultTargetFramebuffer(); - } - - // update view projection buffer - glm::mat4* map = (glm::mat4*)m_ViewProjectionBuffer->Map(); - map[0] = camera->GetProjection() * glm::inverse(cameraTransform); - m_ViewProjectionBuffer->UnMap(); - - // map renderers - m_QuadRenderer.Map(); - m_TextureRenderer.Map(); - m_TintedTextureRenderer.Map(); + m_TargetFramebuffer = nullptr; + m_RenderCommand->DefaultTargetFramebuffer(); } +} - void Renderer::FlushScene() - { - /* tinted texture renderer */ - m_TintedTextureRenderer.UnMap(); - if (m_TintedTextureRenderer.GetQuadCount()) - { - m_TintedTextureRenderer.Bind(); - m_RenderCommand->DrawIndexed(m_TintedTextureRenderer.GetQuadCount() * 6u); - } - - /* quad renderer */ - m_QuadRenderer.UnMap(); - if (m_QuadRenderer.GetQuadCount()) - { - m_QuadRenderer.Bind(); - m_RenderCommand->DrawIndexed(m_QuadRenderer.GetQuadCount() * 6u); - } - - /* texture renderer */ - m_TextureRenderer.UnMap(); - if (m_TextureRenderer.GetQuadCount()) - { - m_TextureRenderer.Bind(); - m_RenderCommand->DrawIndexed(m_TextureRenderer.GetQuadCount() * 6u); - } - - m_QuadRenderer.Map(); - m_TextureRenderer.Map(); - m_TintedTextureRenderer.Map(); - } - - void Renderer::EndSceneImpl() - { - /* tinted texture renderer */ - m_TintedTextureRenderer.UnMap(); - if (m_TintedTextureRenderer.GetQuadCount()) - { - m_TintedTextureRenderer.Bind(); - m_RenderCommand->DrawIndexed(m_TintedTextureRenderer.GetQuadCount() * 6u); - } - - /* quad renderer */ - m_QuadRenderer.UnMap(); - if (m_QuadRenderer.GetQuadCount()) - { - m_QuadRenderer.Bind(); - m_RenderCommand->DrawIndexed(m_QuadRenderer.GetQuadCount() * 6u); - } - - /* texture renderer */ - m_TextureRenderer.UnMap(); - if (m_TextureRenderer.GetQuadCount()) - { - m_TextureRenderer.Bind(); - m_RenderCommand->DrawIndexed(m_TextureRenderer.GetQuadCount() * 6u); - } - - // reset frame buffer - if (m_TargetFramebuffer) - { - m_TargetFramebuffer = nullptr; - m_RenderCommand->DefaultTargetFramebuffer(); - } - } - -} \ No newline at end of file +} // namespace Light diff --git a/Engine/src/Engine/Graphics/RendererPrograms/QuadRendererProgram.cpp b/Engine/src/Engine/Graphics/RendererPrograms/QuadRendererProgram.cpp index ebd4656..292a9ae 100644 --- a/Engine/src/Engine/Graphics/RendererPrograms/QuadRendererProgram.cpp +++ b/Engine/src/Engine/Graphics/RendererPrograms/QuadRendererProgram.cpp @@ -20,9 +20,9 @@ namespace Light { m_MaxVertices(maxVertices) { // #todo: don't use relative path - ResourceManager::LoadShader("LT_ENGINE_RESOURCES_QUAD_SHADER", "Assets/Shaders/Quad/Quad_VS.hlsl", "Assets/Shaders/Quad/Quad_PS.hlsl"); + ResourceManager::LoadShader("LT_ENGINE_RESOURCES_QUAD_SHADER", "Assets/Shaders/Quad/Quad_VS.glsl", "Assets/Shaders/Quad/Quad_PS.glsl"); - m_Shader = ResourceManager::GetShader("LT_ENGINE_RESOURCES_QUAD_SHADER"); + m_Shader = ResourceManager::GetShader("LT_ENGINE_RESOURCES_QUAD_SHADER"); m_VertexBuffer = Ref(VertexBuffer::Create(nullptr, sizeof(QuadVertexData), maxVertices, sharedContext)); m_IndexBuffer = Ref(IndexBuffer::Create(nullptr, (maxVertices / 4) * 6, sharedContext)); m_VertexLayout = Ref(VertexLayout::Create(m_VertexBuffer, m_Shader, { { "POSITION", VertexElementType::Float4 }, @@ -64,4 +64,4 @@ namespace Light { m_IndexBuffer->Bind(); } -} \ No newline at end of file +} diff --git a/Engine/src/Engine/Graphics/RendererPrograms/TextureRendererProgram.cpp b/Engine/src/Engine/Graphics/RendererPrograms/TextureRendererProgram.cpp index aa00f5c..34b6a41 100644 --- a/Engine/src/Engine/Graphics/RendererPrograms/TextureRendererProgram.cpp +++ b/Engine/src/Engine/Graphics/RendererPrograms/TextureRendererProgram.cpp @@ -20,9 +20,9 @@ namespace Light { m_MaxVertices(maxVertices) { // #todo: don't use relative path - ResourceManager::LoadShader("LT_ENGINE_RESOURCES_TEXTURE_SHADER", "Assets/Shaders/Texture/Texture_VS.hlsl", "Assets/Shaders/Texture/Texture_PS.hlsl"); + ResourceManager::LoadShader("LT_ENGINE_RESOURCES_TEXTURE_SHADER", "Assets/Shaders/Texture/Texture_VS.glsl", "Assets/Shaders/Texture/Texture_PS.glsl"); - m_Shader = ResourceManager::GetShader("LT_ENGINE_RESOURCES_TEXTURE_SHADER"); + m_Shader = ResourceManager::GetShader("LT_ENGINE_RESOURCES_TEXTURE_SHADER"); m_VertexBuffer = Ref(VertexBuffer::Create(nullptr, sizeof(TextureVertexData), maxVertices, sharedContext)); m_IndexBuffer = Ref(IndexBuffer::Create(nullptr, (maxVertices / 4) * 6, sharedContext)); m_VertexLayout = Ref(VertexLayout::Create(m_VertexBuffer, m_Shader, { { "POSITION", VertexElementType::Float4 }, @@ -63,4 +63,4 @@ namespace Light { m_IndexBuffer->Bind(); } -} \ No newline at end of file +} diff --git a/Engine/src/Engine/Graphics/RendererPrograms/TintedTextureRendererProgram.cpp b/Engine/src/Engine/Graphics/RendererPrograms/TintedTextureRendererProgram.cpp index cf39add..8d395d2 100644 --- a/Engine/src/Engine/Graphics/RendererPrograms/TintedTextureRendererProgram.cpp +++ b/Engine/src/Engine/Graphics/RendererPrograms/TintedTextureRendererProgram.cpp @@ -20,9 +20,9 @@ namespace Light { m_MaxVertices(maxVertices) { // #todo: don't use relative path - ResourceManager::LoadShader("LT_ENGINE_RESOURCES_TINTED_TEXTURE_SHADER", "Assets/Shaders/TintedTexture/TintedTexture_VS.hlsl", "Assets/Shaders/TintedTexture/TintedTexture_PS.hlsl"); + ResourceManager::LoadShader("LT_ENGINE_RESOURCES_TINTED_TEXTURE_SHADER", "Assets/Shaders/TintedTexture/TintedTexture_VS.glsl", "Assets/Shaders/TintedTexture/TintedTexture_PS.glsl"); - m_Shader = ResourceManager::GetShader("LT_ENGINE_RESOURCES_TINTED_TEXTURE_SHADER"); + m_Shader = ResourceManager::GetShader("LT_ENGINE_RESOURCES_TINTED_TEXTURE_SHADER"); m_VertexBuffer = Ref(VertexBuffer::Create(nullptr, sizeof(TintedTextureVertexData), maxVertices, sharedContext)); m_IndexBuffer = Ref(IndexBuffer::Create(nullptr, (maxVertices / 4) * 6, sharedContext)); m_VertexLayout = Ref(VertexLayout::Create(m_VertexBuffer, m_Shader, { { "POSITION", VertexElementType::Float4 }, @@ -65,4 +65,4 @@ namespace Light { m_IndexBuffer->Bind(); } -} \ No newline at end of file +} diff --git a/Engine/src/Engine/Scene/Components/SpriteRendererComponent.h b/Engine/src/Engine/Scene/Components/SpriteRendererComponent.h index 3d103b0..a61a817 100644 --- a/Engine/src/Engine/Scene/Components/SpriteRendererComponent.h +++ b/Engine/src/Engine/Scene/Components/SpriteRendererComponent.h @@ -23,4 +23,4 @@ namespace Light { operator Ref() { return texture; } }; -} \ No newline at end of file +} diff --git a/Engine/src/Platform/GraphicsAPI/OpenGL/glGraphicsContext.cpp b/Engine/src/Platform/GraphicsAPI/OpenGL/glGraphicsContext.cpp index 1651445..cc20328 100644 --- a/Engine/src/Platform/GraphicsAPI/OpenGL/glGraphicsContext.cpp +++ b/Engine/src/Platform/GraphicsAPI/OpenGL/glGraphicsContext.cpp @@ -73,8 +73,8 @@ namespace Light { switch (severity) { case GL_DEBUG_SEVERITY_HIGH: - throw glException(source, type, id, message); - return; + // throw glException(source, type, id, message); + return; case GL_DEBUG_SEVERITY_MEDIUM: case GL_DEBUG_SEVERITY_LOW: LT_ENGINE_WARN("glMessageCallback: Severity: {} :: Source: {} :: Type: {} :: ID: {}", @@ -97,4 +97,4 @@ namespace Light { }, nullptr); } -} \ No newline at end of file +} diff --git a/Engine/src/Platform/GraphicsAPI/OpenGL/glShader.cpp b/Engine/src/Platform/GraphicsAPI/OpenGL/glShader.cpp index 47e37ff..55ceb7d 100644 --- a/Engine/src/Platform/GraphicsAPI/OpenGL/glShader.cpp +++ b/Engine/src/Platform/GraphicsAPI/OpenGL/glShader.cpp @@ -9,152 +9,113 @@ namespace Light { - glShader::glShader(BasicFileHandle vertexFile, BasicFileHandle pixelFile): - m_ShaderID(NULL) +glShader::glShader(BasicFileHandle vertexFile, BasicFileHandle pixelFile) + : m_ShaderID(0u) +{ + // create + m_ShaderID = glCreateProgram(); + + std::string vertexSource(vertexFile.GetData(), vertexFile.GetData() + vertexFile.GetSize()); + std::string pixelSource(pixelFile.GetData(), pixelFile.GetData() + pixelFile.GetSize()); + LT_ENGINE_WARN(pixelSource); + + unsigned int vertexShader = CompileShader(vertexSource, Shader::Stage::VERTEX); + unsigned int pixelShader = CompileShader(pixelSource, Shader::Stage::PIXEL); + + // attach shaders + glAttachShader(m_ShaderID, vertexShader); + glAttachShader(m_ShaderID, pixelShader); + + // link shader program + glLinkProgram(m_ShaderID); + + // delete shaders (free memory) + glDeleteShader(vertexShader); + glDeleteShader(pixelShader); +} + +glShader::~glShader() +{ + glDeleteProgram(m_ShaderID); +} + +void glShader::Bind() +{ + glUseProgram(m_ShaderID); +} + +void glShader::UnBind() +{ + glUseProgram(NULL); +} + +shaderc::SpvCompilationResult glShader::CompileGLSL(BasicFileHandle file, Shader::Stage stage) +{ + // compile options + shaderc::CompileOptions options; + options.SetTargetEnvironment(shaderc_target_env_opengl, shaderc_env_version_opengl_4_5); + options.SetOptimizationLevel(shaderc_optimization_level_performance); + + // compile + shaderc::Compiler compiler; + shaderc::SpvCompilationResult result = compiler.CompileGlslToSpv(reinterpret_cast(file.GetData()), stage == Shader::Stage::VERTEX ? shaderc_shader_kind::shaderc_vertex_shader : shaderc_shader_kind::shaderc_fragment_shader, file.GetName().c_str(), options); + + // log error + if (result.GetCompilationStatus() != shaderc_compilation_status_success) { - // create - m_ShaderID = glCreateProgram(); - - // compile hlsl to glsl - ShaderConductor::Compiler::ResultDesc vertexResult = CompileHLSL(vertexFile, Shader::Stage::VERTEX); - ShaderConductor::Compiler::ResultDesc pixelResult = CompileHLSL(pixelFile, Shader::Stage::PIXEL); - - LT_ENGINE_ASSERT(!vertexResult.hasError, "glShader::glShader: failed to compile hlsl vertex shader: {}", vertexFile.GetPath()); - LT_ENGINE_ASSERT(!pixelResult.hasError, "glShader::glShader: failed to compile hlsl pixel shader: {}", pixelFile.GetPath()); - - // extract glsl source - std::string vertexSource = std::string(reinterpret_cast(vertexResult.target.Data())); - vertexSource.resize(vertexResult.target.Size()); - - std::string pixelSource = std::string(reinterpret_cast(pixelResult.target.Data())); - pixelSource.resize(pixelResult.target.Size()); - - // compile glsl - unsigned int vertexShader = CompileShader(vertexSource, Shader::Stage::VERTEX); - unsigned int pixelShader = CompileShader(pixelSource, Shader::Stage::PIXEL); - - // attach shaders - glAttachShader(m_ShaderID, vertexShader); - glAttachShader(m_ShaderID, pixelShader); - - // link shader program - glLinkProgram(m_ShaderID); - - // delete shaders (free memory) - glDeleteShader(vertexShader); - glDeleteShader(pixelShader); + LT_ENGINE_ERROR("Failed to compile {} shader at {}...", stage == Shader::Stage::VERTEX ? "vertex" : "pixel", file.GetPath()); + LT_ENGINE_ERROR(" {}", result.GetErrorMessage()); } - glShader::~glShader() + return result; +} + +unsigned int glShader::CompileShader(std::string source, Shader::Stage stage) +{ + // &(address of) needs an lvalue + const char* lvalue_source = source.c_str(); + LT_ENGINE_WARN("Source______________________________________\n{}", lvalue_source); + unsigned int shader = glCreateShader(stage == Shader::Stage::VERTEX ? GL_VERTEX_SHADER : + stage == Shader::Stage::PIXEL ? GL_FRAGMENT_SHADER : + stage == Shader::Stage::GEOMETRY ? GL_GEOMETRY_SHADER : + NULL); + + // compile + glShaderSource(shader, 1, &lvalue_source, NULL); + glCompileShader(shader); + + // check + int isCompiled = 0; + glGetShaderiv(shader, GL_COMPILE_STATUS, &isCompiled); + if (isCompiled == GL_FALSE) { - glDeleteProgram(m_ShaderID); + int logLength = 0; + glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &logLength); + + char* errorLog = (char*)alloca(logLength); + glGetShaderInfoLog(shader, logLength, &logLength, &errorLog[0]); + + LT_ENGINE_ERROR("glShader::glShader: failed to compile {} shader:\n {}", stage == Shader::Stage::VERTEX ? "Vertex" : "Pixel", errorLog); + + return NULL; } - - void glShader::Bind() - { - glUseProgram(m_ShaderID); - } - - void glShader::UnBind() - { - glUseProgram(NULL); - } - - ShaderConductor::Compiler::ResultDesc glShader::CompileHLSL(BasicFileHandle file, Shader::Stage stage) - { - // check - LT_ENGINE_ASSERT(file.IsValid(), "glShader::CompileHLSL: invalid 'file'"); - LT_ENGINE_ASSERT(stage, "glShader::CompileHLSL: invalid 'stage': None"); - - // compiler options - ShaderConductor::Compiler::Options options = {}; - options.packMatricesInRowMajor = true; - options.enableDebugInfo = true; - options.disableOptimizations = true; - options.inheritCombinedSamplerBindings = true; - options.shaderModel = { 4, 5 }; - - // compiler target descriptor - ShaderConductor::Compiler::TargetDesc targetDesc = {}; - targetDesc.language = ShaderConductor::ShadingLanguage::Glsl; - targetDesc.version = "440 core"; - targetDesc.asModule = false; - - // compiler source descriptor - ShaderConductor::Compiler::SourceDesc sourceDesc = {}; - std::string source = std::string(reinterpret_cast(file.GetData()), file.GetSize()); - sourceDesc.source = source.c_str(); - sourceDesc.fileName = file.GetName().c_str(); - sourceDesc.entryPoint = "main"; - sourceDesc.stage = stage == Shader::Stage::VERTEX ? ShaderConductor::ShaderStage::VertexShader : - stage == Shader::Stage::PIXEL ? ShaderConductor::ShaderStage::PixelShader : - ShaderConductor::ShaderStage::GeometryShader; - sourceDesc.defines = nullptr; - sourceDesc.numDefines = 0u; - sourceDesc.loadIncludeCallback = nullptr; - - // compilation result - ShaderConductor::Compiler::ResultDesc result = ShaderConductor::Compiler::Compile(sourceDesc, options, targetDesc); - - // log error/warning - if (result.errorWarningMsg.Size() != 0u) - { - const char* errorWarningStr = reinterpret_cast(result.errorWarningMsg.Data()); - - if(result.hasError) - LT_ENGINE_ERROR("glShader::CompileHLSL: ShaderConductor error:'{}': {}", file.GetName(), errorWarningStr); - else - LT_ENGINE_WARN("glShader::CompileHLSL: ShaderConductor warning:'{}': {}", errorWarningStr); - } - - return result; - } - - unsigned int glShader::CompileShader(const std::string& source, Shader::Stage stage) - { - // &(address of) needs an lvalue - const char* lvalue_source = reinterpret_cast(source.c_str()); - unsigned int shader = glCreateShader(stage == Shader::Stage::VERTEX ? GL_VERTEX_SHADER : - stage == Shader::Stage::PIXEL ? GL_FRAGMENT_SHADER : - stage == Shader::Stage::GEOMETRY ? GL_GEOMETRY_SHADER : - NULL); - - // compile - glShaderSource(shader, 1, &lvalue_source, NULL); - glCompileShader(shader); - - // check - int isCompiled = 0; - glGetShaderiv(shader, GL_COMPILE_STATUS, &isCompiled); - if (isCompiled == GL_FALSE) - { - int logLength = 0; - glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &logLength); - - char* errorLog = (char*)alloca(logLength); - glGetShaderInfoLog(shader, logLength, &logLength, &errorLog[0]); - - LT_ENGINE_ASSERT(false, "glShader::glShader: failed to compile vertex shader:\n {}", errorLog); - - return NULL; - } - +#define LIGHT_OPENGL_ENABLE_SHADER_INFO_LOG #ifdef LIGHT_OPENGL_ENABLE_SHADER_INFO_LOG - // info log + // info log + { + int logLength = 0; + glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &logLength); + if (logLength) { - int logLength = 0; - glGetShaderiv(vertexShader, GL_INFO_LOG_LENGTH, &logLength); - if (logLength) - { - char* infoLog = (char*)alloca(logLength); - glGetShaderInfoLog(vertexShader, logLength, &logLength, &infoLog[0]); + char* infoLog = (char*)alloca(logLength); + glGetShaderInfoLog(shader, logLength, &logLength, &infoLog[0]); - LT_ENGINE_TRACE(infoLog); - } + LT_ENGINE_TRACE(infoLog); } + } #endif - return shader; - } + return shader; +} -} \ No newline at end of file +} // namespace Light diff --git a/Engine/src/Platform/GraphicsAPI/OpenGL/glShader.h b/Engine/src/Platform/GraphicsAPI/OpenGL/glShader.h index 5a43b97..068e3a2 100644 --- a/Engine/src/Platform/GraphicsAPI/OpenGL/glShader.h +++ b/Engine/src/Platform/GraphicsAPI/OpenGL/glShader.h @@ -6,26 +6,26 @@ #include "Utility/FileManager.h" -#include +#include namespace Light { - class glShader : public Shader - { - private: - unsigned int m_ShaderID; +class glShader: public Shader +{ +private: + unsigned int m_ShaderID; - public: - glShader(BasicFileHandle vertexFile, BasicFileHandle pixelFile); - ~glShader(); +public: + glShader(BasicFileHandle vertexFile, BasicFileHandle pixelFile); + ~glShader(); - void Bind() override; - void UnBind() override; + void Bind() override; + void UnBind() override; - private: - ShaderConductor::Compiler::ResultDesc CompileHLSL(BasicFileHandle file, Shader::Stage stage); +private: + shaderc::SpvCompilationResult CompileGLSL(BasicFileHandle file, Shader::Stage stage); - unsigned int CompileShader(const std::string& source, Shader::Stage stage); - }; + unsigned int CompileShader(std::string source, Shader::Stage stage); +}; -} \ No newline at end of file +} // namespace Light diff --git a/Mirror/.clang-format b/Mirror/.clang-format new file mode 100644 index 0000000..5e7c904 --- /dev/null +++ b/Mirror/.clang-format @@ -0,0 +1,139 @@ +--- +# Core +Language: Cpp +Standard: Cpp11 +ColumnLimit: '0' # No limit + +### Bin pack ### +BinPackArguments: 'true' +BinPackParameters: 'true' + +# Includes +SortIncludes: 'true' +IncludeBlocks: Regroup +IncludeCategories: + # Current Project + - Regex: '"' + Priority: 001 + + # Custom Project Categories... + + # Dependecies + - Regex: '<' + Priority: 500 + + # Custom Deependencies Categories... + + # C++ includes + - Regex: '[^.h .hpp]>' + Priority: 998 + + # C includes + - Regex: '<[^/\n]+[.]h>' + Priority: 999 + +# Braces +BreakBeforeBraces: Custom +BraceWrapping: + AfterCaseLabel: true + AfterClass: true + AfterControlStatement: true + AfterEnum: true + AfterFunction: true + AfterNamespace: false + AfterObjCDeclaration: true + AfterStruct: true + AfterUnion: true + AfterExternBlock: true + BeforeCatch: true + BeforeElse: true + IndentBraces: false + SplitEmptyFunction: true + SplitEmptyRecord: true + SplitEmptyNamespace: true + +# Indentation +UseTab: ForIndentation +TabWidth: '4' +IndentWidth: '4' +ContinuationIndentWidth: '4' +ConstructorInitializerIndentWidth: '4' +IndentCaseLabels: 'false' +IndentWrappedFunctionNames: 'true' +IndentPPDirectives: BeforeHash +NamespaceIndentation: None +AccessModifierOffset: '-4' + +# Space +SpaceAfterCStyleCast: 'false' +SpaceAfterLogicalNot: 'false' +SpaceAfterTemplateKeyword: 'false' +SpaceBeforeAssignmentOperators: 'true' +SpaceBeforeCpp11BracedList: 'true' +SpaceBeforeCtorInitializerColon: 'false' +SpaceBeforeInheritanceColon: 'false' +SpaceBeforeParens: ControlStatements +SpaceBeforeRangeBasedForLoopColon: 'true' +SpaceInEmptyParentheses: 'false' +SpacesBeforeTrailingComments: '1' +SpacesInAngles: 'false' +SpacesInCStyleCastParentheses: 'false' +SpacesInContainerLiterals: 'false' +SpacesInParentheses: 'false' +SpacesInSquareBrackets: 'false' + +### Alignment ### +PointerAlignment: Left +DerivePointerAlignment: 'false' +AlignAfterOpenBracket: Align +AlignEscapedNewlines: Left +AlignConsecutiveDeclarations: 'false' +AlignConsecutiveAssignments: 'true' +AlignConsecutiveMacros: 'true' +AlignOperands: 'true' +AlignTrailingComments: 'true' + +### Single Line ### +AllowShortCaseLabelsOnASingleLine: 'true' +AllowShortFunctionsOnASingleLine: Inline +AllowShortLambdasOnASingleLine: Inline +AllowAllArgumentsOnNextLine: 'false' +AllowShortLoopsOnASingleLine: 'false' +AllowShortBlocksOnASingleLine: 'false' +AllowAllParametersOfDeclarationOnNextLine: 'false' +AllowShortIfStatementsOnASingleLine: Never + +### Break ### +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: 'false' +AlwaysBreakTemplateDeclarations: 'Yes' +BreakBeforeBinaryOperators: None +BreakBeforeTernaryOperators: 'false' +BreakInheritanceList: BeforeComma +BreakStringLiterals: 'false' + +# Penalties +PenaltyBreakAssignment: '0' +PenaltyBreakBeforeFirstCallParameter: '0' +PenaltyBreakComment: '0' +PenaltyBreakFirstLessLess: '0' +PenaltyBreakString: '0' +PenaltyBreakTemplateDeclaration: '0' +PenaltyExcessCharacter: '0' +PenaltyReturnTypeOnItsOwnLine: '999999999' # Nope + +# Constructor Initializers +ConstructorInitializerAllOnOneLineOrOnePerLine: 'true' +AllowAllConstructorInitializersOnNextLine: 'true' +BreakConstructorInitializers: BeforeComma + +# Comments +ReflowComments: 'false' +CommentPragmas: '^ TODO@:' +FixNamespaceComments: 'true' + +# Misc +Cpp11BracedListStyle: 'false' +SortUsingDeclarations: 'true' +KeepEmptyLinesAtTheStartOfBlocks: 'false' +MaxEmptyLinesToKeep: '2' diff --git a/Mirror/CMakeLists.txt b/Mirror/CMakeLists.txt index ec12de4..3b4c635 100644 --- a/Mirror/CMakeLists.txt +++ b/Mirror/CMakeLists.txt @@ -1,27 +1,19 @@ cmake_minimum_required(VERSION 3.14) -if (CMAKE_COMPILER_IS_GNUCC) - add_compile_options(-w) -endif() -if(MSVC) - add_compile_options(/MP) - add_compile_options(/W0) -endif() - add_compile_definitions(LIGHT_PLATFORM_WINDOWS) include_directories( -${ENGINE_DIR}src/Engine/ -${ENGINE_DIR}src/Platform/GraphicsAPI/ -${ENGINE_DIR}src/Platform/OS/ -${DEPENDENCIES_DIR}entt/src/ -${DEPENDENCIES_DIR}GLAD/include/ -${DEPENDENCIES_DIR}GLFW/include/ -${DEPENDENCIES_DIR}glm/ -${DEPENDENCIES_DIR}imgui/ -${DEPENDENCIES_DIR}spdlog/include -${DEPENDENCIES_DIR}stb_image/ -${DEPENDENCIES_DIR}yaml-cpp/include + ${ENGINE_DIR}src/Engine/ + ${ENGINE_DIR}src/Platform/GraphicsAPI/ + ${ENGINE_DIR}src/Platform/OS/ + ${DEPENDENCIES_DIR}entt/src/ + ${DEPENDENCIES_DIR}GLAD/include/ + ${DEPENDENCIES_DIR}GLFW/include/ + ${DEPENDENCIES_DIR}glm/ + ${DEPENDENCIES_DIR}imgui/ + ${DEPENDENCIES_DIR}spdlog/include + ${DEPENDENCIES_DIR}stb_image/ + ${DEPENDENCIES_DIR}yaml-cpp/include ) diff --git a/Mirror/src/EditorLayer.cpp b/Mirror/src/EditorLayer.cpp index e6f1eb1..c6f953c 100644 --- a/Mirror/src/EditorLayer.cpp +++ b/Mirror/src/EditorLayer.cpp @@ -4,93 +4,100 @@ namespace Light { - EditorLayer::EditorLayer(const std::string& name, const std::vector& args) : - Layer(name), - m_SceneDir(args.empty() ? "" : args[0]) +EditorLayer::EditorLayer(const std::string& name, const std::vector& args) + : Layer(name), m_SceneDir(args.empty() ? "" : args[0]) +{ + m_Scene = CreateRef(); + + m_PropertiesPanel = CreateRef(); + m_SceneHierarchyPanel = CreateRef(m_Scene, m_PropertiesPanel); + m_ContentBrowserPanel = CreateRef(); + + m_Framebuffer = Framebuffer::Create({ 1, 1, 1 }, GraphicsContext::GetSharedContext()); + + if (m_SceneDir.empty()) { - m_Scene = CreateRef(); - - m_PropertiesPanel = CreateRef(); - m_SceneHierarchyPanel = CreateRef(m_Scene, m_PropertiesPanel); - m_ContentBrowserPanel = CreateRef(); - - m_Framebuffer = Framebuffer::Create({ 1, 1, 1 }, GraphicsContext::GetSharedContext()); - - if (m_SceneDir.empty()) - { - m_CameraEntity = m_Scene->CreateEntity("Camera"); - m_CameraEntity.AddComponent(SceneCamera(), true); - return; - } + m_CameraEntity = m_Scene->CreateEntity("Camera"); + m_CameraEntity.AddComponent(SceneCamera(), true); + ResourceManager::LoadTexture("Awesomeface", "Assets/Textures/awesomeface.png"); + Entity entity = m_Scene->CreateEntity("Awesomeface", {}); + entity.AddComponent(ResourceManager::GetTexture("Awesomeface"), glm::vec4 { 0.0f, 1.0f, 1.0f, 1.0f }); + } + else + { SceneSerializer serializer(m_Scene); LT_ENGINE_ASSERT(serializer.Deserialize(m_SceneDir), "EditorLayer::EditorLayer: failed to de-serialize: ", m_SceneDir); m_CameraEntity = m_Scene->GetEntityByTag("Game Camera"); } +} - EditorLayer::~EditorLayer() +EditorLayer::~EditorLayer() +{ + if (!m_SceneDir.empty()) { - if (!m_SceneDir.empty()) + SceneSerializer serializer(m_Scene); + serializer.Serialize(m_SceneDir); + } +} + +void EditorLayer::OnUpdate(float deltaTime) +{ + m_Scene->OnUpdate(deltaTime); + + m_Direction.x = Input::GetKeyboardKey(Key::A) ? -1.0f : + Input::GetKeyboardKey(Key::D) ? 1.0f : + 0.0f; + + m_Direction.y = Input::GetKeyboardKey(Key::S) ? -1.0f : + Input::GetKeyboardKey(Key::W) ? 1.0f : + 0.0f; + + auto& cameraTranslation = m_CameraEntity.GetComponent().translation; + cameraTranslation += glm::vec3(m_Direction * m_Speed * deltaTime, 0.0f); + + if (Input::GetKeyboardKey(Key::Escape)) + Application::Quit(); +} + +void EditorLayer::OnRender() +{ + m_Scene->OnRender(m_Framebuffer); +} + +void EditorLayer::OnUserInterfaceUpdate() +{ + UserInterface::DockspaceBegin(); + ImGui::ShowDemoWindow(); + + if (ImGui::Begin("Game")) + { + Input::ReceiveGameEvents(ImGui::IsWindowFocused()); + ImVec2 regionAvail = ImGui::GetContentRegionAvail(); + + if (m_AvailableContentRegionPrev != regionAvail) { - SceneSerializer serializer(m_Scene); - serializer.Serialize(m_SceneDir); + m_Framebuffer->Resize({ regionAvail.x, regionAvail.y }); + auto& camera = m_CameraEntity.GetComponent().camera; + camera.SetViewportSize(regionAvail.x, regionAvail.y); + + m_AvailableContentRegionPrev = regionAvail; } + + if (GraphicsContext::GetGraphicsAPI() == GraphicsAPI::DirectX) + ImGui::Image(m_Framebuffer->GetColorAttachment(), regionAvail); + else + ImGui::Image(m_Framebuffer->GetColorAttachment(), regionAvail, ImVec2(0, 1), ImVec2(1, 0)); } + ImGui::End(); - void EditorLayer::OnUpdate(float deltaTime) - { - m_Scene->OnUpdate(deltaTime); + // Panels + m_SceneHierarchyPanel->OnUserInterfaceUpdate(); + m_PropertiesPanel->OnUserInterfaceUpdate(); + m_ContentBrowserPanel->OnUserInterfaceUpdate(); - m_Direction.x = Input::GetKeyboardKey(Key::A) ? -1.0f : - Input::GetKeyboardKey(Key::D) ? 1.0f : 0.0f; + UserInterface::DockspaceEnd(); +} - m_Direction.y = Input::GetKeyboardKey(Key::S) ? -1.0f : - Input::GetKeyboardKey(Key::W) ? 1.0f : 0.0f; - - auto& cameraTranslation = m_CameraEntity.GetComponent().translation; - cameraTranslation += glm::vec3(m_Direction * m_Speed * deltaTime, 0.0f); - - if (Input::GetKeyboardKey(Key::Escape)) - Application::Quit(); - } - - void EditorLayer::OnRender() - { - m_Scene->OnRender(m_Framebuffer); - } - - void EditorLayer::OnUserInterfaceUpdate() - { - UserInterface::DockspaceBegin(); - ImGui::ShowDemoWindow(); - - if (ImGui::Begin("Game")) - { - Input::ReceiveGameEvents(ImGui::IsWindowFocused()); - ImVec2 regionAvail = ImGui::GetContentRegionAvail(); - - if (m_AvailableContentRegionPrev != regionAvail) - { - m_Framebuffer->Resize({ regionAvail.x, regionAvail.y }); - auto& camera = m_CameraEntity.GetComponent().camera; - camera.SetViewportSize(regionAvail.x, regionAvail.y); - - m_AvailableContentRegionPrev = regionAvail; - } - - if (GraphicsContext::GetGraphicsAPI() == GraphicsAPI::DirectX) - ImGui::Image(m_Framebuffer->GetColorAttachment(), regionAvail); - else - ImGui::Image(m_Framebuffer->GetColorAttachment(), regionAvail, ImVec2(0, 1), ImVec2(1, 0)); - } ImGui::End(); - - // panels - m_SceneHierarchyPanel->OnUserInterfaceUpdate(); - m_PropertiesPanel->OnUserInterfaceUpdate(); - m_ContentBrowserPanel->OnUserInterfaceUpdate(); - - UserInterface::DockspaceEnd(); - } - -} \ No newline at end of file +} // namespace Light diff --git a/Mirror/src/EditorLayer.h b/Mirror/src/EditorLayer.h index b451ad2..0134f45 100644 --- a/Mirror/src/EditorLayer.h +++ b/Mirror/src/EditorLayer.h @@ -1,45 +1,44 @@ #pragma once -#include - -#include "Panels/SceneHierarchyPanel.h" -#include "Panels/PropertiesPanel.h" #include "Panels/ContentBrowser.h" +#include "Panels/PropertiesPanel.h" +#include "Panels/SceneHierarchyPanel.h" +#include #include namespace Light { - class EditorLayer : public Layer - { - private: - std::string m_SceneDir; +class EditorLayer: public Layer +{ +private: + std::string m_SceneDir; - // #todo: add camera controller class to the engine - glm::vec2 m_Direction; - float m_Speed = 1000.0f; + // #todo: add camera controller class to the engine + glm::vec2 m_Direction; + float m_Speed = 1000.0f; - Ref m_Scene; + Ref m_Scene; - Ref m_SceneHierarchyPanel; - Ref m_PropertiesPanel; - Ref m_ContentBrowserPanel; + Ref m_SceneHierarchyPanel; + Ref m_PropertiesPanel; + Ref m_ContentBrowserPanel; - Ref m_Framebuffer; + Ref m_Framebuffer; - Entity m_CameraEntity; + Entity m_CameraEntity; - ImVec2 m_AvailableContentRegionPrev; + ImVec2 m_AvailableContentRegionPrev; - public: - EditorLayer(const std::string& name, const std::vector& args); - ~EditorLayer(); +public: + EditorLayer(const std::string& name, const std::vector& args); + ~EditorLayer(); - void OnUpdate(float deltaTime) override; + void OnUpdate(float deltaTime) override; - void OnRender() override; + void OnRender() override; - void OnUserInterfaceUpdate() override; - }; + void OnUserInterfaceUpdate() override; +}; -} \ No newline at end of file +} // namespace Light diff --git a/Mirror/src/Panels/ContentBrowser.cpp b/Mirror/src/Panels/ContentBrowser.cpp index 3b06bc1..fe634a3 100644 --- a/Mirror/src/Panels/ContentBrowser.cpp +++ b/Mirror/src/Panels/ContentBrowser.cpp @@ -4,29 +4,26 @@ namespace Light { - ContentBrowserPanel::ContentBrowserPanel() : - m_CurrentDirectory("assets"), - m_AssetsPath("assets") +ContentBrowserPanel::ContentBrowserPanel() + : m_CurrentDirectory("Assets"), m_AssetsPath("Assets") {} + +void ContentBrowserPanel::OnUserInterfaceUpdate() +{ + ImGui::Begin("Content Browser"); + + if (m_CurrentDirectory != std::filesystem::path("Assets")) { + if (ImGui::Button(" <-- ")) + { + m_CurrentDirectory = m_CurrentDirectory.parent_path(); + } } - void ContentBrowserPanel::OnUserInterfaceUpdate() + for (auto& dirEntry : std::filesystem::directory_iterator(m_CurrentDirectory)) { - ImGui::Begin("Content Browser"); - - if (m_CurrentDirectory != std::filesystem::path("assets")) + const auto& path = dirEntry.path(); { - if (ImGui::Button(" <-- ")) - { - m_CurrentDirectory = m_CurrentDirectory.parent_path(); - } - } - - for (auto& dirEntry : std::filesystem::directory_iterator(m_CurrentDirectory)) - { - const auto& path = dirEntry.path(); - Texture2D - auto relativePathasd; = std::filesystem::relative(path, m_AssetsPath); + auto relativePath = std::filesystem::relative(path, m_AssetsPath); std::string relativePathString = relativePath.string(); if (dirEntry.is_directory()) @@ -40,12 +37,12 @@ namespace Light { { if (ImGui::Button(relativePathString.c_str())) { - } } } ImGui::End(); } +} -} \ No newline at end of file +} // namespace Light diff --git a/compile_commands.json b/compile_commands.json new file mode 120000 index 0000000..25eb4b2 --- /dev/null +++ b/compile_commands.json @@ -0,0 +1 @@ +build/compile_commands.json \ No newline at end of file diff --git a/default_gui_layout.ini b/default_gui_layout.ini index 57064f4..6c691d9 100644 --- a/default_gui_layout.ini +++ b/default_gui_layout.ini @@ -1,43 +1,53 @@ [Window][Dockspace] Pos=0,0 -Size=1280,720 +Size=1270,1404 Collapsed=0 [Window][Debug##Default] -Pos=60,60 +ViewportPos=2170,695 +ViewportId=0x4DBAC3CB Size=400,400 Collapsed=0 +DockId=0x00000007,0 [Window][Dear ImGui Demo] -Pos=730,24 -Size=275,696 +Pos=737,24 +Size=335,1380 Collapsed=0 DockId=0x00000004,0 [Window][Hierarchy] Pos=0,24 -Size=363,696 +Size=363,1380 Collapsed=0 DockId=0x00000001,0 [Window][Properties] -Pos=1007,24 -Size=273,696 +Pos=1074,24 +Size=182,1380 Collapsed=0 DockId=0x00000005,0 [Window][Game] Pos=365,24 -Size=363,696 +Size=370,1380 Collapsed=0 DockId=0x00000002,0 -[Docking][Data] -DockSpace ID=0x1ED03EE2 Window=0x5B816B74 Pos=366,289 Size=1280,696 Split=X - DockNode ID=0x00000006 Parent=0x1ED03EE2 SizeRef=728,696 Split=X - DockNode ID=0x00000001 Parent=0x00000006 SizeRef=363,696 Selected=0x788BAA0D - DockNode ID=0x00000002 Parent=0x00000006 SizeRef=363,696 CentralNode=1 Selected=0x83199EB2 - DockNode ID=0x00000003 Parent=0x1ED03EE2 SizeRef=550,696 Split=X - DockNode ID=0x00000004 Parent=0x00000003 SizeRef=275,680 Selected=0xE927CF2F - DockNode ID=0x00000005 Parent=0x00000003 SizeRef=273,680 Selected=0xC89E3217 +[Window][Content Browser] +ViewportPos=2170,695 +ViewportId=0x4DBAC3CB +Size=400,400 +Collapsed=0 +DockId=0x00000007,1 + +[Docking][Data] +DockNode ID=0x00000007 Pos=2170,695 Size=400,400 Selected=0x371352B7 +DockSpace ID=0x1ED03EE2 Window=0x5B816B74 Pos=6,30 Size=1256,1380 Split=X + DockNode ID=0x00000006 Parent=0x1ED03EE2 SizeRef=735,696 Split=X + DockNode ID=0x00000001 Parent=0x00000006 SizeRef=363,696 Selected=0x788BAA0D + DockNode ID=0x00000002 Parent=0x00000006 SizeRef=370,696 CentralNode=1 Selected=0x83199EB2 + DockNode ID=0x00000003 Parent=0x1ED03EE2 SizeRef=519,696 Split=X + DockNode ID=0x00000004 Parent=0x00000003 SizeRef=335,680 Selected=0xE927CF2F + DockNode ID=0x00000005 Parent=0x00000003 SizeRef=182,680 Selected=0xC89E3217