From 39e91be3b3ca444d8c6439c1cf1e02205a4c8ec3 Mon Sep 17 00:00:00 2001 From: sheazy_wi Date: Tue, 11 Feb 2025 22:29:35 -0500 Subject: [PATCH 01/27] made ALOT of changes changed starstudio to engine, because of starstudio(editor) coming soon. renaming all SS to SE etc... --- .../src/Platform/OpenGL/OpenGLBuffer.cpp | 0 .../src/Platform/OpenGL/OpenGLBuffer.h | 0 .../src/Platform/OpenGL/OpenGLContext.cpp | 0 .../src/Platform/OpenGL/OpenGLContext.h | 0 .../src/Platform/OpenGL/OpenGLRendererAPI.cpp | 0 .../src/Platform/OpenGL/OpenGLRendererAPI.h | 0 .../src/Platform/OpenGL/OpenGLShader.cpp | 0 .../src/Platform/OpenGL/OpenGLShader.h | 0 .../src/Platform/OpenGL/OpenGLTexture.cpp | 0 .../src/Platform/OpenGL/OpenGLTexture.h | 0 .../src/Platform/OpenGL/OpenGLVertexArray.cpp | 0 .../src/Platform/OpenGL/OpenGLVertexArray.h | 0 .../src/Platform/Windows/WindowsInput.cpp | 0 .../src/Platform/Windows/WindowsInput.h | 0 .../src/Platform/Windows/WindowsWindow.cpp | 0 .../src/Platform/Windows/WindowsWindow.h | 0 StarEngine/src/StarEngine.h | 29 ++ .../src/StarEngine}/Core/Application.cpp | 38 +-- .../src/StarEngine}/Core/Application.h | 16 +- .../src/StarEngine}/Core/Base.h | 38 +-- StarEngine/src/StarEngine/Core/EntryPoint.h | 23 ++ .../src/StarEngine}/Core/Input.cpp | 12 +- .../src/StarEngine}/Core/Input.h | 8 +- StarEngine/src/StarEngine/Core/KeyCodes.h | 272 ++++++++++++++++++ .../src/StarEngine}/Core/Layer.cpp | 4 +- .../src/StarEngine}/Core/Layer.h | 8 +- .../src/StarEngine}/Core/LayerStack.cpp | 6 +- .../src/StarEngine}/Core/LayerStack.h | 7 +- .../src/StarEngine}/Core/Log.cpp | 10 +- StarEngine/src/StarEngine/Core/Log.h | 32 +++ StarEngine/src/StarEngine/Core/MouseCodes.h | 41 +++ .../src/StarEngine}/Core/Timestep.h | 2 +- .../src/StarEngine}/Core/Window.cpp | 12 +- .../src/StarEngine}/Core/Window.h | 10 +- .../src/StarEngine}/Debug/Instrumentor.h | 42 +-- .../src/StarEngine}/Events/ApplicationEvent.h | 4 +- .../src/StarEngine}/Events/Event.h | 6 +- .../src/StarEngine}/Events/KeyEvent.h | 0 .../src/StarEngine}/Events/MouseEvent.h | 6 +- .../src/StarEngine}/ImGui/ImGuiBuild.cpp | 2 +- .../src/StarEngine}/ImGui/ImGuiLayer.cpp | 16 +- .../src/StarEngine}/ImGui/ImGuiLayer.h | 10 +- .../src/StarEngine}/Renderer/Buffer.cpp | 18 +- .../src/StarEngine}/Renderer/Buffer.h | 7 +- .../StarEngine}/Renderer/GraphicsContext.cpp | 12 +- .../StarEngine}/Renderer/GraphicsContext.h | 2 +- .../Renderer/OrthographicCamera.cpp | 12 +- .../StarEngine}/Renderer/OrthographicCamera.h | 2 +- .../Renderer/OrthographicCameraController.cpp | 18 +- .../Renderer/OrthographicCameraController.h | 11 +- .../src/StarEngine/Renderer/RenderCommand.cpp | 7 + .../src/StarEngine}/Renderer/RenderCommand.h | 2 +- .../src/StarEngine}/Renderer/Renderer.cpp | 10 +- .../src/StarEngine}/Renderer/Renderer.h | 8 +- .../src/StarEngine}/Renderer/Renderer2D.cpp | 28 +- .../src/StarEngine}/Renderer/Renderer2D.h | 6 +- .../src/StarEngine}/Renderer/RendererAPI.cpp | 10 +- .../src/StarEngine}/Renderer/RendererAPI.h | 4 +- .../src/StarEngine}/Renderer/Shader.cpp | 20 +- .../src/StarEngine}/Renderer/Shader.h | 2 +- .../src/StarEngine}/Renderer/Texture.cpp | 16 +- .../src/StarEngine}/Renderer/Texture.h | 4 +- .../src/StarEngine}/Renderer/VertexArray.cpp | 12 +- .../src/StarEngine}/Renderer/VertexArray.h | 4 +- StarEngine/src/sepch.cpp | 1 + .../src/sspch.h => StarEngine/src/sepch.h | 6 +- .../bin/Debug-windows-x86_64/GLAD/GLAD.idb | Bin 0 -> 240640 bytes .../bin/Debug-windows-x86_64/GLAD/GLAD.lib | Bin 0 -> 638052 bytes .../bin/Debug-windows-x86_64/GLAD/GLAD.pdb | Bin 0 -> 110592 bytes .../vendor/GLAD/include/KHR/khrplatform.h | 0 .../vendor/GLAD/include/glad/glad.h | 0 .../vendor/GLAD/premake5.lua | 0 .../vendor/GLAD/src/glad.c | 0 .../vendor/stb_image/stb_image.cpp | 0 .../vendor/stb_image/stb_image.h | 0 StarStudio/src/StarStudio.h | 29 -- StarStudio/src/StarStudio/Core/EntryPoint.h | 23 -- StarStudio/src/StarStudio/Core/KeyCodes.h | 272 ------------------ StarStudio/src/StarStudio/Core/Log.h | 33 --- StarStudio/src/StarStudio/Core/MouseCodes.h | 41 --- .../src/StarStudio/Renderer/RenderCommand.cpp | 7 - StarStudio/src/sspch.cpp | 1 - StarStudio/vendor/GLFW | 1 - StarStudio/vendor/glm | 1 - StarStudio/vendor/imgui | 1 - StarStudio/vendor/spdlog | 1 - premake5.lua | 46 +-- 87 files changed, 664 insertions(+), 668 deletions(-) rename {StarStudio => StarEngine}/src/Platform/OpenGL/OpenGLBuffer.cpp (100%) rename {StarStudio => StarEngine}/src/Platform/OpenGL/OpenGLBuffer.h (100%) rename {StarStudio => StarEngine}/src/Platform/OpenGL/OpenGLContext.cpp (100%) rename {StarStudio => StarEngine}/src/Platform/OpenGL/OpenGLContext.h (100%) rename {StarStudio => StarEngine}/src/Platform/OpenGL/OpenGLRendererAPI.cpp (100%) rename {StarStudio => StarEngine}/src/Platform/OpenGL/OpenGLRendererAPI.h (100%) rename {StarStudio => StarEngine}/src/Platform/OpenGL/OpenGLShader.cpp (100%) rename {StarStudio => StarEngine}/src/Platform/OpenGL/OpenGLShader.h (100%) rename {StarStudio => StarEngine}/src/Platform/OpenGL/OpenGLTexture.cpp (100%) rename {StarStudio => StarEngine}/src/Platform/OpenGL/OpenGLTexture.h (100%) rename {StarStudio => StarEngine}/src/Platform/OpenGL/OpenGLVertexArray.cpp (100%) rename {StarStudio => StarEngine}/src/Platform/OpenGL/OpenGLVertexArray.h (100%) rename {StarStudio => StarEngine}/src/Platform/Windows/WindowsInput.cpp (100%) rename {StarStudio => StarEngine}/src/Platform/Windows/WindowsInput.h (100%) rename {StarStudio => StarEngine}/src/Platform/Windows/WindowsWindow.cpp (100%) rename {StarStudio => StarEngine}/src/Platform/Windows/WindowsWindow.h (100%) create mode 100644 StarEngine/src/StarEngine.h rename {StarStudio/src/StarStudio => StarEngine/src/StarEngine}/Core/Application.cpp (68%) rename {StarStudio/src/StarStudio => StarEngine/src/StarEngine}/Core/Application.h (73%) rename {StarStudio/src/StarStudio => StarEngine/src/StarEngine}/Core/Base.h (68%) create mode 100644 StarEngine/src/StarEngine/Core/EntryPoint.h rename {StarStudio/src/StarStudio => StarEngine/src/StarEngine}/Core/Input.cpp (54%) rename {StarStudio/src/StarStudio => StarEngine/src/StarEngine}/Core/Input.h (87%) create mode 100644 StarEngine/src/StarEngine/Core/KeyCodes.h rename {StarStudio/src/StarStudio => StarEngine/src/StarEngine}/Core/Layer.cpp (63%) rename {StarStudio/src/StarStudio => StarEngine/src/StarEngine}/Core/Layer.h (75%) rename {StarStudio/src/StarStudio => StarEngine/src/StarEngine}/Core/LayerStack.cpp (90%) rename {StarStudio/src/StarStudio => StarEngine/src/StarEngine}/Core/LayerStack.h (91%) rename {StarStudio/src/StarStudio => StarEngine/src/StarEngine}/Core/Log.cpp (83%) create mode 100644 StarEngine/src/StarEngine/Core/Log.h create mode 100644 StarEngine/src/StarEngine/Core/MouseCodes.h rename {StarStudio/src/StarStudio => StarEngine/src/StarEngine}/Core/Timestep.h (92%) rename {StarStudio/src/StarStudio => StarEngine/src/StarEngine}/Core/Window.cpp (52%) rename {StarStudio/src/StarStudio => StarEngine/src/StarEngine}/Core/Window.h (82%) rename {StarStudio/src/StarStudio => StarEngine/src/StarEngine}/Debug/Instrumentor.h (84%) rename {StarStudio/src/StarStudio => StarEngine/src/StarEngine}/Events/ApplicationEvent.h (95%) rename {StarStudio/src/StarStudio => StarEngine/src/StarEngine}/Events/Event.h (96%) rename {StarStudio/src/StarStudio => StarEngine/src/StarEngine}/Events/KeyEvent.h (100%) rename {StarStudio/src/StarStudio => StarEngine/src/StarEngine}/Events/MouseEvent.h (95%) rename {StarStudio/src/StarStudio => StarEngine/src/StarEngine}/ImGui/ImGuiBuild.cpp (86%) rename {StarStudio/src/StarStudio => StarEngine/src/StarEngine}/ImGui/ImGuiLayer.cpp (91%) rename {StarStudio/src/StarStudio => StarEngine/src/StarEngine}/ImGui/ImGuiLayer.h (60%) rename {StarStudio/src/StarStudio => StarEngine/src/StarEngine}/Renderer/Buffer.cpp (66%) rename {StarStudio/src/StarStudio => StarEngine/src/StarEngine}/Renderer/Buffer.h (96%) rename {StarStudio/src/StarStudio => StarEngine/src/StarEngine}/Renderer/GraphicsContext.cpp (57%) rename {StarStudio/src/StarStudio => StarEngine/src/StarEngine}/Renderer/GraphicsContext.h (88%) rename {StarStudio/src/StarStudio => StarEngine/src/StarEngine}/Renderer/OrthographicCamera.cpp (83%) rename {StarStudio/src/StarStudio => StarEngine/src/StarEngine}/Renderer/OrthographicCamera.h (97%) rename {StarStudio/src/StarStudio => StarEngine/src/StarEngine}/Renderer/OrthographicCameraController.cpp (90%) rename {StarStudio/src/StarStudio => StarEngine/src/StarEngine}/Renderer/OrthographicCameraController.h (79%) create mode 100644 StarEngine/src/StarEngine/Renderer/RenderCommand.cpp rename {StarStudio/src/StarStudio => StarEngine/src/StarEngine}/Renderer/RenderCommand.h (93%) rename {StarStudio/src/StarStudio => StarEngine/src/StarEngine}/Renderer/Renderer.cpp (84%) rename {StarStudio/src/StarStudio => StarEngine/src/StarEngine}/Renderer/Renderer.h (77%) rename {StarStudio/src/StarStudio => StarEngine/src/StarEngine}/Renderer/Renderer2D.cpp (96%) rename {StarStudio/src/StarStudio => StarEngine/src/StarEngine}/Renderer/Renderer2D.h (93%) rename {StarStudio/src/StarStudio => StarEngine/src/StarEngine}/Renderer/RendererAPI.cpp (63%) rename {StarStudio/src/StarStudio => StarEngine/src/StarEngine}/Renderer/RendererAPI.h (88%) rename {StarStudio/src/StarStudio => StarEngine/src/StarEngine}/Renderer/Shader.cpp (75%) rename {StarStudio/src/StarStudio => StarEngine/src/StarEngine}/Renderer/Shader.h (98%) rename {StarStudio/src/StarStudio => StarEngine/src/StarEngine}/Renderer/Texture.cpp (62%) rename {StarStudio/src/StarStudio => StarEngine/src/StarEngine}/Renderer/Texture.h (90%) rename {StarStudio/src/StarStudio => StarEngine/src/StarEngine}/Renderer/VertexArray.cpp (53%) rename {StarStudio/src/StarStudio => StarEngine/src/StarEngine}/Renderer/VertexArray.h (88%) create mode 100644 StarEngine/src/sepch.cpp rename StarStudio/src/sspch.h => StarEngine/src/sepch.h (72%) create mode 100644 StarEngine/vendor/GLAD/bin/Debug-windows-x86_64/GLAD/GLAD.idb create mode 100644 StarEngine/vendor/GLAD/bin/Debug-windows-x86_64/GLAD/GLAD.lib create mode 100644 StarEngine/vendor/GLAD/bin/Debug-windows-x86_64/GLAD/GLAD.pdb rename {StarStudio => StarEngine}/vendor/GLAD/include/KHR/khrplatform.h (100%) rename {StarStudio => StarEngine}/vendor/GLAD/include/glad/glad.h (100%) rename {StarStudio => StarEngine}/vendor/GLAD/premake5.lua (100%) rename {StarStudio => StarEngine}/vendor/GLAD/src/glad.c (100%) rename {StarStudio => StarEngine}/vendor/stb_image/stb_image.cpp (100%) rename {StarStudio => StarEngine}/vendor/stb_image/stb_image.h (100%) delete mode 100644 StarStudio/src/StarStudio.h delete mode 100644 StarStudio/src/StarStudio/Core/EntryPoint.h delete mode 100644 StarStudio/src/StarStudio/Core/KeyCodes.h delete mode 100644 StarStudio/src/StarStudio/Core/Log.h delete mode 100644 StarStudio/src/StarStudio/Core/MouseCodes.h delete mode 100644 StarStudio/src/StarStudio/Renderer/RenderCommand.cpp delete mode 100644 StarStudio/src/sspch.cpp delete mode 160000 StarStudio/vendor/GLFW delete mode 160000 StarStudio/vendor/glm delete mode 160000 StarStudio/vendor/imgui delete mode 160000 StarStudio/vendor/spdlog diff --git a/StarStudio/src/Platform/OpenGL/OpenGLBuffer.cpp b/StarEngine/src/Platform/OpenGL/OpenGLBuffer.cpp similarity index 100% rename from StarStudio/src/Platform/OpenGL/OpenGLBuffer.cpp rename to StarEngine/src/Platform/OpenGL/OpenGLBuffer.cpp diff --git a/StarStudio/src/Platform/OpenGL/OpenGLBuffer.h b/StarEngine/src/Platform/OpenGL/OpenGLBuffer.h similarity index 100% rename from StarStudio/src/Platform/OpenGL/OpenGLBuffer.h rename to StarEngine/src/Platform/OpenGL/OpenGLBuffer.h diff --git a/StarStudio/src/Platform/OpenGL/OpenGLContext.cpp b/StarEngine/src/Platform/OpenGL/OpenGLContext.cpp similarity index 100% rename from StarStudio/src/Platform/OpenGL/OpenGLContext.cpp rename to StarEngine/src/Platform/OpenGL/OpenGLContext.cpp diff --git a/StarStudio/src/Platform/OpenGL/OpenGLContext.h b/StarEngine/src/Platform/OpenGL/OpenGLContext.h similarity index 100% rename from StarStudio/src/Platform/OpenGL/OpenGLContext.h rename to StarEngine/src/Platform/OpenGL/OpenGLContext.h diff --git a/StarStudio/src/Platform/OpenGL/OpenGLRendererAPI.cpp b/StarEngine/src/Platform/OpenGL/OpenGLRendererAPI.cpp similarity index 100% rename from StarStudio/src/Platform/OpenGL/OpenGLRendererAPI.cpp rename to StarEngine/src/Platform/OpenGL/OpenGLRendererAPI.cpp diff --git a/StarStudio/src/Platform/OpenGL/OpenGLRendererAPI.h b/StarEngine/src/Platform/OpenGL/OpenGLRendererAPI.h similarity index 100% rename from StarStudio/src/Platform/OpenGL/OpenGLRendererAPI.h rename to StarEngine/src/Platform/OpenGL/OpenGLRendererAPI.h diff --git a/StarStudio/src/Platform/OpenGL/OpenGLShader.cpp b/StarEngine/src/Platform/OpenGL/OpenGLShader.cpp similarity index 100% rename from StarStudio/src/Platform/OpenGL/OpenGLShader.cpp rename to StarEngine/src/Platform/OpenGL/OpenGLShader.cpp diff --git a/StarStudio/src/Platform/OpenGL/OpenGLShader.h b/StarEngine/src/Platform/OpenGL/OpenGLShader.h similarity index 100% rename from StarStudio/src/Platform/OpenGL/OpenGLShader.h rename to StarEngine/src/Platform/OpenGL/OpenGLShader.h diff --git a/StarStudio/src/Platform/OpenGL/OpenGLTexture.cpp b/StarEngine/src/Platform/OpenGL/OpenGLTexture.cpp similarity index 100% rename from StarStudio/src/Platform/OpenGL/OpenGLTexture.cpp rename to StarEngine/src/Platform/OpenGL/OpenGLTexture.cpp diff --git a/StarStudio/src/Platform/OpenGL/OpenGLTexture.h b/StarEngine/src/Platform/OpenGL/OpenGLTexture.h similarity index 100% rename from StarStudio/src/Platform/OpenGL/OpenGLTexture.h rename to StarEngine/src/Platform/OpenGL/OpenGLTexture.h diff --git a/StarStudio/src/Platform/OpenGL/OpenGLVertexArray.cpp b/StarEngine/src/Platform/OpenGL/OpenGLVertexArray.cpp similarity index 100% rename from StarStudio/src/Platform/OpenGL/OpenGLVertexArray.cpp rename to StarEngine/src/Platform/OpenGL/OpenGLVertexArray.cpp diff --git a/StarStudio/src/Platform/OpenGL/OpenGLVertexArray.h b/StarEngine/src/Platform/OpenGL/OpenGLVertexArray.h similarity index 100% rename from StarStudio/src/Platform/OpenGL/OpenGLVertexArray.h rename to StarEngine/src/Platform/OpenGL/OpenGLVertexArray.h diff --git a/StarStudio/src/Platform/Windows/WindowsInput.cpp b/StarEngine/src/Platform/Windows/WindowsInput.cpp similarity index 100% rename from StarStudio/src/Platform/Windows/WindowsInput.cpp rename to StarEngine/src/Platform/Windows/WindowsInput.cpp diff --git a/StarStudio/src/Platform/Windows/WindowsInput.h b/StarEngine/src/Platform/Windows/WindowsInput.h similarity index 100% rename from StarStudio/src/Platform/Windows/WindowsInput.h rename to StarEngine/src/Platform/Windows/WindowsInput.h diff --git a/StarStudio/src/Platform/Windows/WindowsWindow.cpp b/StarEngine/src/Platform/Windows/WindowsWindow.cpp similarity index 100% rename from StarStudio/src/Platform/Windows/WindowsWindow.cpp rename to StarEngine/src/Platform/Windows/WindowsWindow.cpp diff --git a/StarStudio/src/Platform/Windows/WindowsWindow.h b/StarEngine/src/Platform/Windows/WindowsWindow.h similarity index 100% rename from StarStudio/src/Platform/Windows/WindowsWindow.h rename to StarEngine/src/Platform/Windows/WindowsWindow.h diff --git a/StarEngine/src/StarEngine.h b/StarEngine/src/StarEngine.h new file mode 100644 index 00000000..458ccef8 --- /dev/null +++ b/StarEngine/src/StarEngine.h @@ -0,0 +1,29 @@ +#pragma once + +// for use by StarEngine applications +#include "StarEngine/Core/Application.h" +#include "StarEngine/Core/Layer.h" +#include "StarEngine/Core/Log.h" + +#include "StarEngine/Core/Timestep.h" + +#include "StarEngine/ImGui/ImGuiLayer.h" + +// ---Input------------------------- +#include "StarEngine/Core/Input.h" +#include "StarEngine/Core/KeyCodes.h" +#include "StarEngine/Core/MouseCodes.h" +// --------------------------------- + +// ---Renderer------------------------ +#include "StarEngine/Renderer/Renderer.h" +#include "StarEngine/Renderer/Renderer2D.h" +#include "StarEngine/Renderer/RenderCommand.h" + +#include "StarEngine/Renderer/Buffer.h" +#include "StarEngine/Renderer/Shader.h" +#include "StarEngine/Renderer/Texture.h" +#include "StarEngine/Renderer/VertexArray.h" + +#include "StarEngine/Renderer/OrthographicCamera.h" +// ----------------------------------- \ No newline at end of file diff --git a/StarStudio/src/StarStudio/Core/Application.cpp b/StarEngine/src/StarEngine/Core/Application.cpp similarity index 68% rename from StarStudio/src/StarStudio/Core/Application.cpp rename to StarEngine/src/StarEngine/Core/Application.cpp index 602d9f28..3b354929 100644 --- a/StarStudio/src/StarStudio/Core/Application.cpp +++ b/StarEngine/src/StarEngine/Core/Application.cpp @@ -1,25 +1,25 @@ #include "sspch.h" -#include "StarStudio/Core/Application.h" +#include "StarEngine/Core/Application.h" -#include "StarStudio/Core/Log.h" +#include "StarEngine/Core/Log.h" -#include "StarStudio/Core/Input.h" -#include "StarStudio/Renderer/Renderer.h" +#include "StarEngine/Core/Input.h" +#include "StarEngine/Renderer/Renderer.h" #include -namespace StarStudio +namespace StarEngine { Application* Application::s_Instance = nullptr; Application::Application() { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); - SS_CORE_ASSERT(!s_Instance, "Application already exists!"); + SE_CORE_ASSERT(!s_Instance, "Application already exists!"); s_Instance = this; m_Window = Window::Create(); - m_Window->SetEventCallback(SS_BIND_EVENT_FN(Application::OnEvent)); + m_Window->SetEventCallback(SE_BIND_EVENT_FN(Application::OnEvent)); Renderer::Init(); @@ -29,14 +29,14 @@ namespace StarStudio Application::~Application() { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); Renderer::Shutdown(); } void Application::PushLayer(Layer* layer) { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); m_LayerStack.PushLayer(layer); layer->OnAttach(); @@ -44,7 +44,7 @@ namespace StarStudio void Application::PushOverlay(Layer* layer) { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); m_LayerStack.PushOverlay(layer); layer->OnAttach(); @@ -52,11 +52,11 @@ namespace StarStudio void Application::OnEvent(Event& e) { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); EventDispatcher dispatcher(e); - dispatcher.Dispatch(SS_BIND_EVENT_FN(Application::OnWindowClose)); - dispatcher.Dispatch(SS_BIND_EVENT_FN(Application::OnWindowResize)); + dispatcher.Dispatch(SE_BIND_EVENT_FN(Application::OnWindowClose)); + dispatcher.Dispatch(SE_BIND_EVENT_FN(Application::OnWindowResize)); for (auto it = m_LayerStack.rbegin(); it != m_LayerStack.rend(); ++it) { @@ -68,11 +68,11 @@ namespace StarStudio void Application::Run() { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); while (m_Running) { - SS_PROFILE_SCOPE("RunLoop"); + SE_PROFILE_SCOPE("RunLoop"); float time = (float)glfwGetTime(); Timestep timestep = time - m_LastFrameTime; @@ -81,7 +81,7 @@ namespace StarStudio if (!m_Minimized) { { - SS_PROFILE_SCOPE("LayerStack OnUpdate"); + SE_PROFILE_SCOPE("LayerStack OnUpdate"); for (Layer* layer : m_LayerStack) layer->OnUpdate(timestep); @@ -89,7 +89,7 @@ namespace StarStudio m_ImGuiLayer->Begin(); { - SS_PROFILE_SCOPE("LayerStack OnImGuiRender"); + SE_PROFILE_SCOPE("LayerStack OnImGuiRender"); for (Layer* layer : m_LayerStack) layer->OnImGuiRender(); @@ -109,7 +109,7 @@ namespace StarStudio bool Application::OnWindowResize(WindowResizeEvent& e) { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); if (e.GetWidth() == 0 || e.GetHeight() == 0) { diff --git a/StarStudio/src/StarStudio/Core/Application.h b/StarEngine/src/StarEngine/Core/Application.h similarity index 73% rename from StarStudio/src/StarStudio/Core/Application.h rename to StarEngine/src/StarEngine/Core/Application.h index 494e414c..e4fa481e 100644 --- a/StarStudio/src/StarStudio/Core/Application.h +++ b/StarEngine/src/StarEngine/Core/Application.h @@ -1,19 +1,19 @@ #pragma once -#include "StarStudio/Core/Base.h" +#include "StarEngine/Core/Base.h" -#include "StarStudio/Core/Window.h" -#include "StarStudio/Core/LayerStack.h" -#include "StarStudio/Events/Event.h" -#include "StarStudio/Events/ApplicationEvent.h" +#include "StarEngine/Core/Window.h" +#include "StarEngine/Core/LayerStack.h" +#include "StarEngine/Events/Event.h" +#include "StarEngine/Events/ApplicationEvent.h" -#include "StarStudio/Core/Timestep.h" +#include "StarEngine/Core/Timestep.h" -#include "StarStudio/ImGui/ImGuiLayer.h" +#include "StarEngine/ImGui/ImGuiLayer.h" int main(int argc, char** argv); -namespace StarStudio +namespace StarEngine { class Application { diff --git a/StarStudio/src/StarStudio/Core/Base.h b/StarEngine/src/StarEngine/Core/Base.h similarity index 68% rename from StarStudio/src/StarStudio/Core/Base.h rename to StarEngine/src/StarEngine/Core/Base.h index c9ecd711..87b86314 100644 --- a/StarStudio/src/StarStudio/Core/Base.h +++ b/StarEngine/src/StarEngine/Core/Base.h @@ -7,7 +7,7 @@ /* Windows x64/x86 */ #ifdef _WIN64 /* Windows x64 */ -#define SS_PLATFORM_WINDOWS +#define SE_PLATFORM_WINDOWS #else /* Windows x86 */ #error "x86 Builds are not supported!" @@ -21,10 +21,10 @@ #if TARGET_IPHONE_SIMULATOR == 1 #error "IOS simulator is not supported!" #elif TARGET_OS_IPHONE == 1 -#define SS_PLATFORM_IOS +#define SE_PLATFORM_IOS #error "IOS is not supported!" #elif TARGET_OS_MAC == 1 -#define SS_PLATFORM_MACOS +#define SE_PLATFORM_MACOS #error "MacOS is not supported!" #else #error "Unknown Apple platform!" @@ -33,10 +33,10 @@ * since android is based on the linux kernel * it has __linux__ defined */ #elif defined(__ANDROID__) -#define SS_PLATFORM_ANDROID +#define SE_PLATFORM_ANDROID #error "Android is not supported!" #elif defined(__linux__) -#define SS_PLATFORM_LINUX +#define SE_PLATFORM_LINUX #error "Linux is not supported!" #else /* Unknown compiler/platform */ @@ -44,33 +44,33 @@ #endif // End of platform detection -#ifdef SS_DEBUG -#if defined(SS_PLATFORM_WINDOWS) -#define SS_DEBUGBREAK() __debugbreak() -#elif defined(SS_PLATFORM_LINUX) +#ifdef SE_DEBUG +#if defined(SE_PLATFORM_WINDOWS) +#define SE_DEBUGBREAK() __debugbreak() +#elif defined(SE_PLATFORM_LINUX) #include -#define SS_DEBUGBREAK() raise(SIGTRAP) +#define SE_DEBUGBREAK() raise(SIGTRAP) #else #error "Platform doesn't support debugbreak yet!" #endif -#define SS_ENABLE_ASSERTS +#define SE_ENABLE_ASSERTS #else -#define SS_DEBUGBREAK() +#define SE_DEBUGBREAK() #endif -#ifdef SS_ENABLE_ASSERTS -#define SS_ASSERT(x, ...) { if(!(x)) { SS_ERROR("Assertion Failed: {0}", __VA_ARGS__); SS_DEBUGBREAK(); } } -#define SS_CORE_ASSERT(x, ...) { if(!(x)) { SS_CORE_ERROR("Assertion Failed: {0}", __VA_ARGS__); SS_DEBUGBREAK(); } } +#ifdef SE_ENABLE_ASSERTS +#define SE_ASSERT(x, ...) { if(!(x)) { SE_ERROR("Assertion Failed: {0}", __VA_ARGS__); SE_DEBUGBREAK(); } } +#define SE_CORE_ASSERT(x, ...) { if(!(x)) { SE_CORE_ERROR("Assertion Failed: {0}", __VA_ARGS__); SE_DEBUGBREAK(); } } #else -#define SS_ASSERT(x, ...) -#define SS_CORE_ASSERT(x, ...) +#define SE_ASSERT(x, ...) +#define SE_CORE_ASSERT(x, ...) #endif #define BIT(x) (1 << x) -#define SS_BIND_EVENT_FN(fn) std::bind(&fn, this, std::placeholders::_1) +#define SE_BIND_EVENT_FN(fn) std::bind(&fn, this, std::placeholders::_1) -namespace StarStudio { +namespace StarEngine { template using Scope = std::unique_ptr; diff --git a/StarEngine/src/StarEngine/Core/EntryPoint.h b/StarEngine/src/StarEngine/Core/EntryPoint.h new file mode 100644 index 00000000..4b4c1629 --- /dev/null +++ b/StarEngine/src/StarEngine/Core/EntryPoint.h @@ -0,0 +1,23 @@ +#pragma once +#include "StarEngine/Core/Base.h" + +#ifdef SE_PLATFORM_WINDOWS + +extern StarEngine::Application* StarEngine::CreateApplication(); + + int main(int argc, char** argv) { + StarEngine::Log::Init(); + + SE_PROFILE_BEGIN_SESSION("Startup", "StarEngineProfile-Startup.json"); + auto app = StarStudio::CreateApplication(); + SE_PROFILE_END_SESSION(); + + SE_PROFILE_BEGIN_SESSION("Runtime", "StarEngineProfile-Runtime.json"); + app->Run(); + SE_PROFILE_END_SESSION(); + + SE_PROFILE_BEGIN_SESSION("Shutdown", "StarEngineProfile-Shutdown.json"); + delete app; + SE_PROFILE_END_SESSION(); + } +#endif \ No newline at end of file diff --git a/StarStudio/src/StarStudio/Core/Input.cpp b/StarEngine/src/StarEngine/Core/Input.cpp similarity index 54% rename from StarStudio/src/StarStudio/Core/Input.cpp rename to StarEngine/src/StarEngine/Core/Input.cpp index a881721d..002c7fe2 100644 --- a/StarStudio/src/StarStudio/Core/Input.cpp +++ b/StarEngine/src/StarEngine/Core/Input.cpp @@ -1,19 +1,19 @@ -#include "sspch.h" -#include "StarStudio/Core/Input.h" +#include "sepch.h" +#include "StarEngine/Core/Input.h" -#ifdef SS_PLATFORM_WINDOWS +#ifdef SE_PLATFORM_WINDOWS #include "Platform/Windows/WindowsInput.h" #endif -namespace StarStudio { +namespace StarEngine { Scope Input::s_Instance = Input::Create(); Scope Input::Create() { -#ifdef SS_PLATFORM_WINDOWS +#ifdef SE_PLATFORM_WINDOWS return CreateScope(); #else - SS_CORE_ASSERT(false, "Unknown platform!"); + SE_CORE_ASSERT(false, "Unknown platform!"); return nullptr; #endif } diff --git a/StarStudio/src/StarStudio/Core/Input.h b/StarEngine/src/StarEngine/Core/Input.h similarity index 87% rename from StarStudio/src/StarStudio/Core/Input.h rename to StarEngine/src/StarEngine/Core/Input.h index eb1f32b7..ad867e81 100644 --- a/StarStudio/src/StarStudio/Core/Input.h +++ b/StarEngine/src/StarEngine/Core/Input.h @@ -1,10 +1,10 @@ #pragma once -#include "StarStudio/Core/Base.h" -#include "StarStudio/Core/KeyCodes.h" -#include "StarStudio/Core/MouseCodes.h" +#include "StarEngine/Core/Base.h" +#include "StarEngine/Core/KeyCodes.h" +#include "StarEngine/Core/MouseCodes.h" -namespace StarStudio { +namespace StarEngine { class Input { diff --git a/StarEngine/src/StarEngine/Core/KeyCodes.h b/StarEngine/src/StarEngine/Core/KeyCodes.h new file mode 100644 index 00000000..6fbe1740 --- /dev/null +++ b/StarEngine/src/StarEngine/Core/KeyCodes.h @@ -0,0 +1,272 @@ +#pragma once + +namespace StarEngine +{ + typedef enum claSE KeyCode : uint16_t + { + // From glfw3.h + Space = 32, + Apostrophe = 39, /* ' */ + Comma = 44, /* , */ + Minus = 45, /* - */ + Period = 46, /* . */ + Slash = 47, /* / */ + + D0 = 48, /* 0 */ + D1 = 49, /* 1 */ + D2 = 50, /* 2 */ + D3 = 51, /* 3 */ + D4 = 52, /* 4 */ + D5 = 53, /* 5 */ + D6 = 54, /* 6 */ + D7 = 55, /* 7 */ + D8 = 56, /* 8 */ + D9 = 57, /* 9 */ + + Semicolon = 59, /* ; */ + Equal = 61, /* = */ + + A = 65, + B = 66, + C = 67, + D = 68, + E = 69, + F = 70, + G = 71, + H = 72, + I = 73, + J = 74, + K = 75, + L = 76, + M = 77, + N = 78, + O = 79, + P = 80, + Q = 81, + R = 82, + S = 83, + T = 84, + U = 85, + V = 86, + W = 87, + X = 88, + Y = 89, + Z = 90, + + LeftBracket = 91, /* [ */ + Backslash = 92, /* \ */ + RightBracket = 93, /* ] */ + GraveAccent = 96, /* ` */ + + World1 = 161, /* non-US #1 */ + World2 = 162, /* non-US #2 */ + + /* Function keys */ + Escape = 256, + Enter = 257, + Tab = 258, + Backspace = 259, + Insert = 260, + Delete = 261, + Right = 262, + Left = 263, + Down = 264, + Up = 265, + PageUp = 266, + PageDown = 267, + Home = 268, + End = 269, + CapsLock = 280, + ScrollLock = 281, + NumLock = 282, + PrintScreen = 283, + Pause = 284, + F1 = 290, + F2 = 291, + F3 = 292, + F4 = 293, + F5 = 294, + F6 = 295, + F7 = 296, + F8 = 297, + F9 = 298, + F10 = 299, + F11 = 300, + F12 = 301, + F13 = 302, + F14 = 303, + F15 = 304, + F16 = 305, + F17 = 306, + F18 = 307, + F19 = 308, + F20 = 309, + F21 = 310, + F22 = 311, + F23 = 312, + F24 = 313, + F25 = 314, + + /* Keypad */ + KP0 = 320, + KP1 = 321, + KP2 = 322, + KP3 = 323, + KP4 = 324, + KP5 = 325, + KP6 = 326, + KP7 = 327, + KP8 = 328, + KP9 = 329, + KPDecimal = 330, + KPDivide = 331, + KPMultiply = 332, + KPSubtract = 333, + KPAdd = 334, + KPEnter = 335, + KPEqual = 336, + + LeftShift = 340, + LeftControl = 341, + LeftAlt = 342, + LeftSuper = 343, + RightShift = 344, + RightControl = 345, + RightAlt = 346, + RightSuper = 347, + Menu = 348 + } Key; + + inline std::ostream& operator<<(std::ostream& os, KeyCode keyCode) + { + os << static_cast(keyCode); + return os; + } +} + +// From glfw3.h +#define SE_KEY_SPACE ::StarEngine::Key::Space +#define SE_KEY_APOSTROPHE ::StarEngine::Key::Apostrophe /* ' */ +#define SE_KEY_COMMA ::StarEngine::Key::Comma /* , */ +#define SE_KEY_MINUS ::StarEngine::Key::Minus /* - */ +#define SE_KEY_PERIOD ::StarEngine::Key::Period /* . */ +#define SE_KEY_SLASH ::StarEngine::Key::Slash /* / */ +#define SE_KEY_0 ::StarEngine::Key::D0 +#define SE_KEY_1 ::StarEngine::Key::D1 +#define SE_KEY_2 ::StarEngine::Key::D2 +#define SE_KEY_3 ::StarEngine::Key::D3 +#define SE_KEY_4 ::StarEngine::Key::D4 +#define SE_KEY_5 ::StarEngine::Key::D5 +#define SE_KEY_6 ::StarEngine::Key::D6 +#define SE_KEY_7 ::StarEngine::Key::D7 +#define SE_KEY_8 ::StarEngine::Key::D8 +#define SE_KEY_9 ::StarEngine::Key::D9 +#define SE_KEY_SEMICOLON ::StarEngine::Key::Semicolon /* ; */ +#define SE_KEY_EQUAL ::StarEngine::Key::Equal /* = */ +#define SE_KEY_A ::StarEngine::Key::A +#define SE_KEY_B ::StarEngine::Key::B +#define SE_KEY_C ::StarEngine::Key::C +#define SE_KEY_D ::StarEngine::Key::D +#define SE_KEY_E ::StarEngine::Key::E +#define SE_KEY_F ::StarEngine::Key::F +#define SE_KEY_G ::StarEngine::Key::G +#define SE_KEY_H ::StarEngine::Key::H +#define SE_KEY_I ::StarEngine::Key::I +#define SE_KEY_J ::StarEngine::Key::J +#define SE_KEY_K ::StarEngine::Key::K +#define SE_KEY_L ::StarEngine::Key::L +#define SE_KEY_M ::StarEngine::Key::M +#define SE_KEY_N ::StarEngine::Key::N +#define SE_KEY_O ::StarEngine::Key::O +#define SE_KEY_P ::StarEngine::Key::P +#define SE_KEY_Q ::StarEngine::Key::Q +#define SE_KEY_R ::StarEngine::Key::R +#define SE_KEY_S ::StarEngine::Key::S +#define SE_KEY_T ::StarEngine::Key::T +#define SE_KEY_U ::StarEngine::Key::U +#define SE_KEY_V ::StarEngine::Key::V +#define SE_KEY_W ::StarEngine::Key::W +#define SE_KEY_X ::StarEngine::Key::X +#define SE_KEY_Y ::StarEngine::Key::Y +#define SE_KEY_Z ::StarEngine::Key::Z +#define SE_KEY_LEFT_BRACKET ::StarEngine::Key::LeftBracket /* [ */ +#define SE_KEY_BACKSLASH ::StarEngine::Key::Backslash /* \ */ +#define SE_KEY_RIGHT_BRACKET ::StarEngine::Key::RightBracket /* ] */ +#define SE_KEY_GRAVE_ACCENT ::StarEngine::Key::GraveAccent /* ` */ +#define SE_KEY_WORLD_1 ::StarEngine::Key::World1 /* non-US #1 */ +#define SE_KEY_WORLD_2 ::StarEngine::Key::World2 /* non-US #2 */ + +/* Function keys */ +#define SE_KEY_ESCAPE ::StarEngine::Key::Escape +#define SE_KEY_ENTER ::StarEngine::Key::Enter +#define SE_KEY_TAB ::StarEngine::Key::Tab +#define SE_KEY_BACKSPACE ::StarEngine::Key::Backspace +#define SE_KEY_INSERT ::StarEngine::Key::Insert +#define SE_KEY_DELETE ::StarEngine::Key::Delete +#define SE_KEY_RIGHT ::StarEngine::Key::Right +#define SE_KEY_LEFT ::StarEngine::Key::Left +#define SE_KEY_DOWN ::StarEngine::Key::Down +#define SE_KEY_UP ::StarEngine::Key::Up +#define SE_KEY_PAGE_UP ::StarEngine::Key::PageUp +#define SE_KEY_PAGE_DOWN ::StarEngine::Key::PageDown +#define SE_KEY_HOME ::StarEngine::Key::Home +#define SE_KEY_END ::StarEngine::Key::End +#define SE_KEY_CAPS_LOCK ::StarEngine::Key::CapsLock +#define SE_KEY_SCROLL_LOCK ::StarEngine::Key::ScrollLock +#define SE_KEY_NUM_LOCK ::StarEngine::Key::NumLock +#define SE_KEY_PRINT_SCREEN ::StarEngine::Key::PrintScreen +#define SE_KEY_PAUSE ::StarEngine::Key::Pause +#define SE_KEY_F1 ::StarEngine::Key::F1 +#define SE_KEY_F2 ::StarEngine::Key::F2 +#define SE_KEY_F3 ::StarEngine::Key::F3 +#define SE_KEY_F4 ::StarEngine::Key::F4 +#define SE_KEY_F5 ::StarEngine::Key::F5 +#define SE_KEY_F6 ::StarEngine::Key::F6 +#define SE_KEY_F7 ::StarEngine::Key::F7 +#define SE_KEY_F8 ::StarEngine::Key::F8 +#define SE_KEY_F9 ::StarEngine::Key::F9 +#define SE_KEY_F10 ::StarEngine::Key::F10 +#define SE_KEY_F11 ::StarEngine::Key::F11 +#define SE_KEY_F12 ::StarEngine::Key::F12 +#define SE_KEY_F13 ::StarEngine::Key::F13 +#define SE_KEY_F14 ::StarEngine::Key::F14 +#define SE_KEY_F15 ::StarEngine::Key::F15 +#define SE_KEY_F16 ::StarEngine::Key::F16 +#define SE_KEY_F17 ::StarEngine::Key::F17 +#define SE_KEY_F18 ::StarEngine::Key::F18 +#define SE_KEY_F19 ::StarEngine::Key::F19 +#define SE_KEY_F20 ::StarEngine::Key::F20 +#define SE_KEY_F21 ::StarEngine::Key::F21 +#define SE_KEY_F22 ::StarEngine::Key::F22 +#define SE_KEY_F23 ::StarEngine::Key::F23 +#define SE_KEY_F24 ::StarEngine::Key::F24 +#define SE_KEY_F25 ::StarEngine::Key::F25 + +/* Keypad */ +#define SE_KEY_KP_0 ::StarEngine::Key::KP0 +#define SE_KEY_KP_1 ::StarEngine::Key::KP1 +#define SE_KEY_KP_2 ::StarEngine::Key::KP2 +#define SE_KEY_KP_3 ::StarEngine::Key::KP3 +#define SE_KEY_KP_4 ::StarEngine::Key::KP4 +#define SE_KEY_KP_5 ::StarEngine::Key::KP5 +#define SE_KEY_KP_6 ::StarEngine::Key::KP6 +#define SE_KEY_KP_7 ::StarEngine::Key::KP7 +#define SE_KEY_KP_8 ::StarEngine::Key::KP8 +#define SE_KEY_KP_9 ::StarEngine::Key::KP9 +#define SE_KEY_KP_DECIMAL ::StarEngine::Key::KPDecimal +#define SE_KEY_KP_DIVIDE ::StarEngine::Key::KPDivide +#define SE_KEY_KP_MULTIPLY ::StarEngine::Key::KPMultiply +#define SE_KEY_KP_SUBTRACT ::StarEngine::Key::KPSubtract +#define SE_KEY_KP_ADD ::StarEngine::Key::KPAdd +#define SE_KEY_KP_ENTER ::StarEngine::Key::KPEnter +#define SE_KEY_KP_EQUAL ::StarEngine::Key::KPEqual + +#define SE_KEY_LEFT_SHIFT ::StarEngine::Key::LeftShift +#define SE_KEY_LEFT_CONTROL ::StarEngine::Key::LeftControl +#define SE_KEY_LEFT_ALT ::StarEngine::Key::LeftAlt +#define SE_KEY_LEFT_SUPER ::StarEngine::Key::LeftSuper +#define SE_KEY_RIGHT_SHIFT ::StarEngine::Key::RightShift +#define SE_KEY_RIGHT_CONTROL ::StarEngine::Key::RightControl +#define SE_KEY_RIGHT_ALT ::StarEngine::Key::RightAlt +#define SE_KEY_RIGHT_SUPER ::StarEngine::Key::RightSuper +#define SE_KEY_MENU ::StarEngine::Key::Menu \ No newline at end of file diff --git a/StarStudio/src/StarStudio/Core/Layer.cpp b/StarEngine/src/StarEngine/Core/Layer.cpp similarity index 63% rename from StarStudio/src/StarStudio/Core/Layer.cpp rename to StarEngine/src/StarEngine/Core/Layer.cpp index ab21d8e1..6e1e730b 100644 --- a/StarStudio/src/StarStudio/Core/Layer.cpp +++ b/StarEngine/src/StarEngine/Core/Layer.cpp @@ -1,7 +1,7 @@ #include "sspch.h" -#include "StarStudio/Core/Layer.h" +#include "StarEngine/Core/Layer.h" -namespace StarStudio { +namespace StarEngine { Layer::Layer(const std::string& debugName) : m_DebugName(debugName) diff --git a/StarStudio/src/StarStudio/Core/Layer.h b/StarEngine/src/StarEngine/Core/Layer.h similarity index 75% rename from StarStudio/src/StarStudio/Core/Layer.h rename to StarEngine/src/StarEngine/Core/Layer.h index ed042c34..540a32c9 100644 --- a/StarStudio/src/StarStudio/Core/Layer.h +++ b/StarEngine/src/StarEngine/Core/Layer.h @@ -1,10 +1,10 @@ #pragma once -#include "StarStudio/Core/Base.h" -#include "StarStudio/Core/Timestep.h" -#include "StarStudio/Events/Event.h" +#include "StarEngine/Core/Base.h" +#include "StarEngine/Core/Timestep.h" +#include "StarEngine/Events/Event.h" -namespace StarStudio +namespace StarEngine { class Layer { diff --git a/StarStudio/src/StarStudio/Core/LayerStack.cpp b/StarEngine/src/StarEngine/Core/LayerStack.cpp similarity index 90% rename from StarStudio/src/StarStudio/Core/LayerStack.cpp rename to StarEngine/src/StarEngine/Core/LayerStack.cpp index 665e84f4..43ef8fba 100644 --- a/StarStudio/src/StarStudio/Core/LayerStack.cpp +++ b/StarEngine/src/StarEngine/Core/LayerStack.cpp @@ -1,7 +1,7 @@ -#include "sspch.h" -#include "StarStudio/Core/LayerStack.h" +#include "sepch.h" +#include "StarEngine/Core/LayerStack.h" -namespace StarStudio { +namespace StarEngine { LayerStack::~LayerStack() { diff --git a/StarStudio/src/StarStudio/Core/LayerStack.h b/StarEngine/src/StarEngine/Core/LayerStack.h similarity index 91% rename from StarStudio/src/StarStudio/Core/LayerStack.h rename to StarEngine/src/StarEngine/Core/LayerStack.h index 8d739b43..1248dce6 100644 --- a/StarStudio/src/StarStudio/Core/LayerStack.h +++ b/StarEngine/src/StarEngine/Core/LayerStack.h @@ -1,10 +1,11 @@ #pragma once -#include "StarStudio/Core/Base.h" -#include "StarStudio/Core/Layer.h" +#include "StarEngine/Core/Base.h" +#include "StarEngine/Core/Layer.h" #include -namespace StarStudio { + +namespace StarEngine { class LayerStack { public: diff --git a/StarStudio/src/StarStudio/Core/Log.cpp b/StarEngine/src/StarEngine/Core/Log.cpp similarity index 83% rename from StarStudio/src/StarStudio/Core/Log.cpp rename to StarEngine/src/StarEngine/Core/Log.cpp index 5cd9355c..75cedc18 100644 --- a/StarStudio/src/StarStudio/Core/Log.cpp +++ b/StarEngine/src/StarEngine/Core/Log.cpp @@ -1,12 +1,12 @@ -#include "sspch.h" +#include "sepch.h" -#include "StarStudio/Core/Log.h" +#include "StarEngine/Core/Log.h" #include #include -namespace StarStudio +namespace StarEngine { Ref Log::s_CoreLogger; Ref Log::s_ClientLogger; @@ -15,12 +15,12 @@ namespace StarStudio { std::vector logSinks; logSinks.emplace_back(std::make_shared()); - logSinks.emplace_back(std::make_shared("StarStudio.log", true)); + logSinks.emplace_back(std::make_shared("StarEngine.log", true)); logSinks[0]->set_pattern("%^[%T] %n: %v%$"); logSinks[1]->set_pattern("[%T] [%l] %n: %v"); - s_CoreLogger = std::make_shared("STARSTUDIO", begin(logSinks), end(logSinks)); + s_CoreLogger = std::make_shared("STARENGINE", begin(logSinks), end(logSinks)); spdlog::register_logger(s_CoreLogger); s_CoreLogger->set_level(spdlog::level::trace); s_CoreLogger->flush_on(spdlog::level::trace); diff --git a/StarEngine/src/StarEngine/Core/Log.h b/StarEngine/src/StarEngine/Core/Log.h new file mode 100644 index 00000000..38ea060c --- /dev/null +++ b/StarEngine/src/StarEngine/Core/Log.h @@ -0,0 +1,32 @@ +#pragma once + +#include "StarEngine/Core/Base.h" + +#include "spdlog/spdlog.h" +#include "spdlog/fmt/ostr.h" + +namespace StarEngine { + class Log + { + public: + static void Init(); + + static Ref& GetCoreLogger() { return s_CoreLogger; } + static Ref& GetClientLogger() { return s_ClientLogger; } + private: + static Ref s_CoreLogger; + static Ref s_ClientLogger; + }; +} + +#define SE_CORE_TRACE(...) ::StarEngine::Log::GetCoreLogger()->trace(__VA_ARGS__) +#define SE_CORE_INFO(...) ::StarEngine::Log::GetCoreLogger()->info(__VA_ARGS__) +#define SE_CORE_WARN(...) ::StarEngine::Log::GetCoreLogger()->warn(__VA_ARGS__) +#define SE_CORE_ERROR(...) ::StarEngine::Log::GetCoreLogger()->error(__VA_ARGS__) +#define SE_CORE_CRITICAL(...) ::StarEngine::Log::GetClientLogger()->critical(__VA_ARGS__) + +#define SE_TRACE(...) ::StarEngine::Log::GetClientLogger()->trace(__VA_ARGS__) +#define SE_INFO(...) ::StarEngine::Log::GetClientLogger()->info(__VA_ARGS__) +#define SE_WARN(...) ::StarEngine::Log::GetClientLogger()->warn(__VA_ARGS__) +#define SE_ERROR(...) ::StarEngine::Log::GetClientLogger()->error(__VA_ARGS__) +#define SE_CRITICAL(...) ::StarEngine::Log::GetClientLogger()->critical(__VA_ARGS__) \ No newline at end of file diff --git a/StarEngine/src/StarEngine/Core/MouseCodes.h b/StarEngine/src/StarEngine/Core/MouseCodes.h new file mode 100644 index 00000000..0fe15465 --- /dev/null +++ b/StarEngine/src/StarEngine/Core/MouseCodes.h @@ -0,0 +1,41 @@ +#pragma once + +namespace StarEngine +{ + typedef enum class MouseCode : uint16_t + { + // From glfw3.h + Button0 = 0, + Button1 = 1, + Button2 = 2, + Button3 = 3, + Button4 = 4, + Button5 = 5, + Button6 = 6, + Button7 = 7, + + ButtonLast = Button7, + ButtonLeft = Button0, + ButtonRight = Button1, + ButtonMiddle = Button2 + } Mouse; + + inline std::ostream& operator<<(std::ostream& os, MouseCode mouseCode) + { + os << static_cast(mouseCode); + return os; + } +} + +#define SE_MOUSE_BUTTON_0 ::StarEngine::Mouse::Button0 +#define SE_MOUSE_BUTTON_1 ::StarEngine::Mouse::Button1 +#define SE_MOUSE_BUTTON_2 ::StarEngine::Mouse::Button2 +#define SE_MOUSE_BUTTON_3 ::StarEngine::Mouse::Button3 +#define SE_MOUSE_BUTTON_4 ::StarEngine::Mouse::Button4 +#define SE_MOUSE_BUTTON_5 ::StarEngine::Mouse::Button5 +#define SE_MOUSE_BUTTON_6 ::StarEngine::Mouse::Button6 +#define SE_MOUSE_BUTTON_7 ::StarEngine::Mouse::Button7 +#define SE_MOUSE_BUTTON_LAST ::StarEngine::Mouse::ButtonLast +#define SE_MOUSE_BUTTON_LEFT ::StarEngine::Mouse::ButtonLeft +#define SE_MOUSE_BUTTON_RIGHT ::StarEngine::Mouse::ButtonRight +#define SE_MOUSE_BUTTON_MIDDLE ::StarEngine::Mouse::ButtonMiddle \ No newline at end of file diff --git a/StarStudio/src/StarStudio/Core/Timestep.h b/StarEngine/src/StarEngine/Core/Timestep.h similarity index 92% rename from StarStudio/src/StarStudio/Core/Timestep.h rename to StarEngine/src/StarEngine/Core/Timestep.h index 4fe3e4b0..e8403172 100644 --- a/StarStudio/src/StarStudio/Core/Timestep.h +++ b/StarEngine/src/StarEngine/Core/Timestep.h @@ -1,6 +1,6 @@ #pragma once -namespace StarStudio { +namespace StarEngine { class Timestep { diff --git a/StarStudio/src/StarStudio/Core/Window.cpp b/StarEngine/src/StarEngine/Core/Window.cpp similarity index 52% rename from StarStudio/src/StarStudio/Core/Window.cpp rename to StarEngine/src/StarEngine/Core/Window.cpp index b46ef9e7..9bbda7ea 100644 --- a/StarStudio/src/StarStudio/Core/Window.cpp +++ b/StarEngine/src/StarEngine/Core/Window.cpp @@ -1,18 +1,18 @@ -#include "sspch.h" -#include "StarStudio/Core/Window.h" +#include "sepch.h" +#include "StarEngine/Core/Window.h" -#ifdef SS_PLATFORM_WINDOWS +#ifdef SE_PLATFORM_WINDOWS #include "Platform/Windows/WindowsWindow.h" #endif -namespace StarStudio +namespace StarEngine { Scope Window::Create(const WindowProps& props) { -#ifdef SS_PLATFORM_WINDOWS +#ifdef SE_PLATFORM_WINDOWS return CreateScope(props); #else - SS_CORE_ASSERT(false, "Unknown platform!"); + SE_CORE_ASSERT(false, "Unknown platform!"); return nullptr; #endif } diff --git a/StarStudio/src/StarStudio/Core/Window.h b/StarEngine/src/StarEngine/Core/Window.h similarity index 82% rename from StarStudio/src/StarStudio/Core/Window.h rename to StarEngine/src/StarEngine/Core/Window.h index 308fba4d..fc0ee4a7 100644 --- a/StarStudio/src/StarStudio/Core/Window.h +++ b/StarEngine/src/StarEngine/Core/Window.h @@ -1,11 +1,11 @@ #pragma once -#include "sspch.h" +#include "sepch.h" -#include "StarStudio/Core/Base.h" -#include "StarStudio/Events/Event.h" +#include "StarEngine/Core/Base.h" +#include "StarEngine/Events/Event.h" -namespace StarStudio { +namespace StarEngine { struct WindowProps { @@ -13,7 +13,7 @@ namespace StarStudio { unsigned int Width; unsigned int Height; - WindowProps(const std::string& title = "StarStudio Engine", + WindowProps(const std::string& title = "StarEngine Engine", unsigned int width = 1280, unsigned int height = 720) : Title(title), Width(width), Height(height) diff --git a/StarStudio/src/StarStudio/Debug/Instrumentor.h b/StarEngine/src/StarEngine/Debug/Instrumentor.h similarity index 84% rename from StarStudio/src/StarStudio/Debug/Instrumentor.h rename to StarEngine/src/StarEngine/Debug/Instrumentor.h index 986c663e..cc53325d 100644 --- a/StarStudio/src/StarStudio/Debug/Instrumentor.h +++ b/StarEngine/src/StarEngine/Debug/Instrumentor.h @@ -7,7 +7,7 @@ #include #include -namespace StarStudio { +namespace StarEngine { using FloatingPointMicroseconds = std::chrono::duration; @@ -48,7 +48,7 @@ namespace StarStudio { // profiling output. if (Log::GetCoreLogger()) // Edge case: BeginSession() might be before Log::Init() { - SS_CORE_ERROR("Instrumentor::BeginSession('{0}') when session '{1}' already open.", name, m_CurrentSession->Name); + SE_CORE_ERROR("Instrumentor::BeginSession('{0}') when session '{1}' already open.", name, m_CurrentSession->Name); } InternalEndSession(); } @@ -63,7 +63,7 @@ namespace StarStudio { { if (Log::GetCoreLogger()) // Edge case: BeginSession() might be before Log::Init() { - SS_CORE_ERROR("Instrumentor could not open results file '{0}'.", filepath); + SE_CORE_ERROR("Instrumentor could not open results file '{0}'.", filepath); } } } @@ -191,37 +191,37 @@ namespace StarStudio { } } -#define SS_PROFILE 0 -#if SS_PROFILE +#define SE_PROFILE 0 +#if SE_PROFILE // Resolve which function signature macro will be used. Note that this only // is resolved when the (pre)compiler starts, so the syntax highlighting // could mark the wrong one in your editor! #if defined(__GNUC__) || (defined(__MWERKS__) && (__MWERKS__ >= 0x3000)) || (defined(__ICC) && (__ICC >= 600)) || defined(__ghs__) -#define SS_FUNC_SIG __PRETTY_FUNCTION__ +#define SE_FUNC_SIG __PRETTY_FUNCTION__ #elif defined(__DMC__) && (__DMC__ >= 0x810) -#define SS_FUNC_SIG __PRETTY_FUNCTION__ +#define SE_FUNC_SIG __PRETTY_FUNCTION__ #elif defined(__FUNCSIG__) #elif (defined(__FUNCSIG__) || (_MSC_VER)) #elif (defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 600)) || (defined(__IBMCPP__) && (__IBMCPP__ >= 500)) -#define SS_FUNC_SIG __FUNCTION__ +#define SE_FUNC_SIG __FUNCTION__ #elif defined(__BORLANDC__) && (__BORLANDC__ >= 0x550) -#define SS_FUNC_SIG __FUNC__ +#define SE_FUNC_SIG __FUNC__ #elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901) -#define SS_FUNC_SIG __func__ +#define SE_FUNC_SIG __func__ #elif defined(__cplusplus) && (__cplusplus >= 201103) -#define SS_FUNC_SIG __func__ +#define SE_FUNC_SIG __func__ #else -#define SS_FUNC_SIG "SS_FUNC_SIG unknown!" +#define SE_FUNC_SIG "SE_FUNC_SIG unknown!" #endif -#define SS_PROFILE_BEGIN_SESSION(name, filepath) ::StarStudio::Instrumentor::Get().BeginSession(name, filepath) -#define SS_PROFILE_END_SESSION() ::StarStudio::Instrumentor::Get().EndSession() -#define HZ_PROFILE_SCOPE(name) constexpr auto fixedName = ::StarStudio::InstrumentorUtils::CleanupOutputString(name, "__cdecl ");\ - ::StarStudio::InstrumentationTimer timer##__LINE__(fixedName.Data) -#define SS_PROFILE_FUNCTION() SS_PROFILE_SCOPE(SS_FUNC_SIG) +#define SE_PROFILE_BEGIN_SESSION(name, filepath) ::StarEngine::Instrumentor::Get().BeginSession(name, filepath) +#define SE_PROFILE_END_SESSION() ::StarEngine::Instrumentor::Get().EndSession() +#define SE_PROFILE_SCOPE(name) constexpr auto fixedName = ::StarEngine::InstrumentorUtils::CleanupOutputString(name, "__cdecl ");\ + ::StarEngine::InstrumentationTimer timer##__LINE__(fixedName.Data) +#define SE_PROFILE_FUNCTION() SE_PROFILE_SCOPE(SS_FUNC_SIG) #else -#define SS_PROFILE_BEGIN_SESSION(name, filepath) -#define SS_PROFILE_END_SESSION() -#define SS_PROFILE_SCOPE(name) -#define SS_PROFILE_FUNCTION() +#define SE_PROFILE_BEGIN_SESSION(name, filepath) +#define SE_PROFILE_END_SESSION() +#define SE_PROFILE_SCOPE(name) +#define SE_PROFILE_FUNCTION() #endif \ No newline at end of file diff --git a/StarStudio/src/StarStudio/Events/ApplicationEvent.h b/StarEngine/src/StarEngine/Events/ApplicationEvent.h similarity index 95% rename from StarStudio/src/StarStudio/Events/ApplicationEvent.h rename to StarEngine/src/StarEngine/Events/ApplicationEvent.h index 12ac0617..b19819df 100644 --- a/StarStudio/src/StarStudio/Events/ApplicationEvent.h +++ b/StarEngine/src/StarEngine/Events/ApplicationEvent.h @@ -1,8 +1,8 @@ #pragma once -#include "StarStudio/Events/Event.h" +#include "StarEngine/Events/Event.h" -namespace StarStudio { +namespace StarEngine { class WindowResizeEvent : public Event { public: diff --git a/StarStudio/src/StarStudio/Events/Event.h b/StarEngine/src/StarEngine/Events/Event.h similarity index 96% rename from StarStudio/src/StarStudio/Events/Event.h rename to StarEngine/src/StarEngine/Events/Event.h index 62da9735..7c8ab509 100644 --- a/StarStudio/src/StarStudio/Events/Event.h +++ b/StarEngine/src/StarEngine/Events/Event.h @@ -1,9 +1,9 @@ #pragma once -#include "sspch.h" -#include "StarStudio/Core/Base.h" +#include "sepch.h" +#include "StarEngine/Core/Base.h" -namespace StarStudio { +namespace StarEngine { // Events in Hazel are currently blocking, meaning when an event occurs it // immediately gets dispatched and must be dealt with right then an there. diff --git a/StarStudio/src/StarStudio/Events/KeyEvent.h b/StarEngine/src/StarEngine/Events/KeyEvent.h similarity index 100% rename from StarStudio/src/StarStudio/Events/KeyEvent.h rename to StarEngine/src/StarEngine/Events/KeyEvent.h diff --git a/StarStudio/src/StarStudio/Events/MouseEvent.h b/StarEngine/src/StarEngine/Events/MouseEvent.h similarity index 95% rename from StarStudio/src/StarStudio/Events/MouseEvent.h rename to StarEngine/src/StarEngine/Events/MouseEvent.h index a3aa54a9..760f7eb4 100644 --- a/StarStudio/src/StarStudio/Events/MouseEvent.h +++ b/StarEngine/src/StarEngine/Events/MouseEvent.h @@ -1,9 +1,9 @@ #pragma once -#include "StarStudio/Events/Event.h" -#include "StarStudio/Core/Input.h" +#include "StarEngine/Events/Event.h" +#include "StarEngine/Core/Input.h" -namespace StarStudio { +namespace StarEngine { class MouseMovedEvent : public Event { diff --git a/StarStudio/src/StarStudio/ImGui/ImGuiBuild.cpp b/StarEngine/src/StarEngine/ImGui/ImGuiBuild.cpp similarity index 86% rename from StarStudio/src/StarStudio/ImGui/ImGuiBuild.cpp rename to StarEngine/src/StarEngine/ImGui/ImGuiBuild.cpp index 014d3c27..cdea2890 100644 --- a/StarStudio/src/StarStudio/ImGui/ImGuiBuild.cpp +++ b/StarEngine/src/StarEngine/ImGui/ImGuiBuild.cpp @@ -1,4 +1,4 @@ -#include "sspch.h" +#include "sepch.h" #define IMGUI_IMPL_OPENGL_LOADER_GLAD #include diff --git a/StarStudio/src/StarStudio/ImGui/ImGuiLayer.cpp b/StarEngine/src/StarEngine/ImGui/ImGuiLayer.cpp similarity index 91% rename from StarStudio/src/StarStudio/ImGui/ImGuiLayer.cpp rename to StarEngine/src/StarEngine/ImGui/ImGuiLayer.cpp index 0b63286a..72a4429a 100644 --- a/StarStudio/src/StarStudio/ImGui/ImGuiLayer.cpp +++ b/StarEngine/src/StarEngine/ImGui/ImGuiLayer.cpp @@ -1,17 +1,17 @@ -#include "sspch.h" -#include "StarStudio/ImGui/ImGuiLayer.h" +#include "sepch.h" +#include "StarEngine/ImGui/ImGuiLayer.h" #include #include #include -#include "StarStudio/Core/Application.h" +#include "StarEngine/Core/Application.h" // TEMPORARY #include #include -namespace StarStudio { +namespace StarEngine { ImGuiLayer::ImGuiLayer() : Layer("ImGuiLayer") @@ -21,7 +21,7 @@ namespace StarStudio { void ImGuiLayer::OnAttach() { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); // Setup Dear ImGui context IMGUI_CHECKVERSION(); @@ -56,7 +56,7 @@ namespace StarStudio { void ImGuiLayer::OnDetach() { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); ImGui_ImplOpenGL3_Shutdown(); ImGui_ImplGlfw_Shutdown(); @@ -72,7 +72,7 @@ namespace StarStudio { void ImGuiLayer::Begin() { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); ImGui_ImplOpenGL3_NewFrame(); ImGui_ImplGlfw_NewFrame(); @@ -81,7 +81,7 @@ namespace StarStudio { void ImGuiLayer::End() { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); ImGuiIO& io = ImGui::GetIO(); Application& app = Application::Get(); diff --git a/StarStudio/src/StarStudio/ImGui/ImGuiLayer.h b/StarEngine/src/StarEngine/ImGui/ImGuiLayer.h similarity index 60% rename from StarStudio/src/StarStudio/ImGui/ImGuiLayer.h rename to StarEngine/src/StarEngine/ImGui/ImGuiLayer.h index b2c9f279..fe288414 100644 --- a/StarStudio/src/StarStudio/ImGui/ImGuiLayer.h +++ b/StarEngine/src/StarEngine/ImGui/ImGuiLayer.h @@ -1,12 +1,12 @@ #pragma once -#include "StarStudio/Core/Layer.h" +#include "StarEngine/Core/Layer.h" -#include "StarStudio/Events/ApplicationEvent.h" -#include "StarStudio/Events/KeyEvent.h" -#include "StarStudio/Events/MouseEvent.h" +#include "StarEngine/Events/ApplicationEvent.h" +#include "StarEngine/Events/KeyEvent.h" +#include "StarEngine/Events/MouseEvent.h" -namespace StarStudio { +namespace StarEngine { class ImGuiLayer : public Layer { diff --git a/StarStudio/src/StarStudio/Renderer/Buffer.cpp b/StarEngine/src/StarEngine/Renderer/Buffer.cpp similarity index 66% rename from StarStudio/src/StarStudio/Renderer/Buffer.cpp rename to StarEngine/src/StarEngine/Renderer/Buffer.cpp index f17f24de..7fe7c3f6 100644 --- a/StarStudio/src/StarStudio/Renderer/Buffer.cpp +++ b/StarEngine/src/StarEngine/Renderer/Buffer.cpp @@ -1,7 +1,7 @@ -#include "sspch.h" -#include "StarStudio/Renderer/Buffer.h" +#include "sepch.h" +#include "StarEngine/Renderer/Buffer.h" -#include "StarStudio/Renderer/Renderer.h" +#include "StarEngine/Renderer/Renderer.h" #include "Platform/OpenGL/OpenGLBuffer.h" @@ -11,11 +11,11 @@ namespace StarStudio { { switch (Renderer::GetAPI()) { - case RendererAPI::API::None: SS_CORE_ASSERT(false, "Renderer API::None is currently not supported"); return nullptr; + case RendererAPI::API::None: SE_CORE_ASSERT(false, "Renderer API::None is currently not supported"); return nullptr; case RendererAPI::API::OpenGL: return CreateRef(size); } - SS_CORE_ASSERT(false, "Unknown RendererAPI!"); + SE_CORE_ASSERT(false, "Unknown RendererAPI!"); return nullptr; } @@ -23,11 +23,11 @@ namespace StarStudio { switch (Renderer::GetAPI()) { - case RendererAPI::API::None: SS_CORE_ASSERT(false, "RendererAPI::None is currently not supported") return nullptr; + case RendererAPI::API::None: SE_CORE_ASSERT(false, "RendererAPI::None is currently not supported") return nullptr; case RendererAPI::API::OpenGL: return CreateRef(vertices, size); } - SS_CORE_ASSERT(false, "Unknown RendererAPI!"); + SE_CORE_ASSERT(false, "Unknown RendererAPI!"); return nullptr; } @@ -35,11 +35,11 @@ namespace StarStudio { switch (Renderer::GetAPI()) { - case RendererAPI::API::None: SS_CORE_ASSERT(false, "RendererAPI::None is currently not supported") return nullptr; + case RendererAPI::API::None: SE_CORE_ASSERT(false, "RendererAPI::None is currently not supported") return nullptr; case RendererAPI::API::OpenGL: return CreateRef(indices, size); } - SS_CORE_ASSERT(false, "Unknown RendererAPI!"); + SE_CORE_ASSERT(false, "Unknown RendererAPI!"); return nullptr; } }; \ No newline at end of file diff --git a/StarStudio/src/StarStudio/Renderer/Buffer.h b/StarEngine/src/StarEngine/Renderer/Buffer.h similarity index 96% rename from StarStudio/src/StarStudio/Renderer/Buffer.h rename to StarEngine/src/StarEngine/Renderer/Buffer.h index e6604578..24ce9419 100644 --- a/StarStudio/src/StarStudio/Renderer/Buffer.h +++ b/StarEngine/src/StarEngine/Renderer/Buffer.h @@ -1,7 +1,6 @@ #pragma once - -namespace StarStudio { +namespace StarEngine { enum class ShaderDataType { @@ -26,7 +25,7 @@ namespace StarStudio { } - SS_CORE_ASSERT(false, "Unknown ShaderDataType!"); + SE_CORE_ASSERT(false, "Unknown ShaderDataType!"); return 0; } @@ -60,7 +59,7 @@ namespace StarStudio { case ShaderDataType::Bool: return 1; } - SS_CORE_ASSERT(false, "Unknown ShaderDataType!"); + SE_CORE_ASSERT(false, "Unknown ShaderDataType!"); return 0; } diff --git a/StarStudio/src/StarStudio/Renderer/GraphicsContext.cpp b/StarEngine/src/StarEngine/Renderer/GraphicsContext.cpp similarity index 57% rename from StarStudio/src/StarStudio/Renderer/GraphicsContext.cpp rename to StarEngine/src/StarEngine/Renderer/GraphicsContext.cpp index bbfd08e2..5b49b015 100644 --- a/StarStudio/src/StarStudio/Renderer/GraphicsContext.cpp +++ b/StarEngine/src/StarEngine/Renderer/GraphicsContext.cpp @@ -1,19 +1,19 @@ -#include "sspch.h" -#include "StarStudio/Renderer/GraphicsContext.h" +#include "sepch.h" +#include "StarEngine/Renderer/GraphicsContext.h" -#include "StarStudio/Renderer/Renderer.h" +#include "StarEngine/Renderer/Renderer.h" #include "Platform/OpenGL/OpenGLContext.h" -namespace StarStudio +namespace StarEngine { Scope GraphicsContext::Create(void* window) { switch (Renderer::GetAPI()) { - case RendererAPI::API::None: SS_CORE_ASSERT(false, "RendererAPI::None is currently not supported!"); return nullptr; + case RendererAPI::API::None: SE_CORE_ASSERT(false, "RendererAPI::None is currently not supported!"); return nullptr; case RendererAPI::API::OpenGL: return CreateScope(static_cast(window)); } - SS_CORE_ASSERT(false, "Unknown RendererAPI!"); + SE_CORE_ASSERT(false, "Unknown RendererAPI!"); return nullptr; } } \ No newline at end of file diff --git a/StarStudio/src/StarStudio/Renderer/GraphicsContext.h b/StarEngine/src/StarEngine/Renderer/GraphicsContext.h similarity index 88% rename from StarStudio/src/StarStudio/Renderer/GraphicsContext.h rename to StarEngine/src/StarEngine/Renderer/GraphicsContext.h index b176ba21..e6ead260 100644 --- a/StarStudio/src/StarStudio/Renderer/GraphicsContext.h +++ b/StarEngine/src/StarEngine/Renderer/GraphicsContext.h @@ -1,5 +1,5 @@ #pragma once -namespace StarStudio { +namespace StarEngine { class GraphicsContext { diff --git a/StarStudio/src/StarStudio/Renderer/OrthographicCamera.cpp b/StarEngine/src/StarEngine/Renderer/OrthographicCamera.cpp similarity index 83% rename from StarStudio/src/StarStudio/Renderer/OrthographicCamera.cpp rename to StarEngine/src/StarEngine/Renderer/OrthographicCamera.cpp index c16e6af1..580cdd97 100644 --- a/StarStudio/src/StarStudio/Renderer/OrthographicCamera.cpp +++ b/StarEngine/src/StarEngine/Renderer/OrthographicCamera.cpp @@ -1,21 +1,21 @@ -#include "sspch.h" -#include "StarStudio/Renderer/OrthographicCamera.h" +#include "sepch.h" +#include "StarEngine/Renderer/OrthographicCamera.h" #include -namespace StarStudio { +namespace StarEngine { OrthographicCamera::OrthographicCamera(float left, float right, float bottom, float top) : m_ProjectionMatrix(glm::ortho(left, right, bottom, top, -1.0f, 1.0f)), m_ViewMatrix(1.0f) { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); m_ViewProjectionMatrix = m_ProjectionMatrix * m_ViewMatrix; } void OrthographicCamera::SetProjection(float left, float right, float bottom, float top) { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); m_ProjectionMatrix = glm::ortho(left, right, bottom, top, -1.0f, 1.0f); m_ViewProjectionMatrix = m_ProjectionMatrix * m_ViewMatrix; @@ -23,7 +23,7 @@ namespace StarStudio { void OrthographicCamera::RecalculateViewMatrix() { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); glm::mat4 transform = glm::translate(glm::mat4(1.0f), m_Position) * glm::rotate(glm::mat4(1.0f), glm::radians(m_Rotation), glm::vec3(0, 0, 1)); diff --git a/StarStudio/src/StarStudio/Renderer/OrthographicCamera.h b/StarEngine/src/StarEngine/Renderer/OrthographicCamera.h similarity index 97% rename from StarStudio/src/StarStudio/Renderer/OrthographicCamera.h rename to StarEngine/src/StarEngine/Renderer/OrthographicCamera.h index d53703d3..6c32e0d6 100644 --- a/StarStudio/src/StarStudio/Renderer/OrthographicCamera.h +++ b/StarEngine/src/StarEngine/Renderer/OrthographicCamera.h @@ -4,7 +4,7 @@ #include "glm/ext/matrix_clip_space.hpp" -namespace StarStudio { +namespace StarEngine { class OrthographicCamera { diff --git a/StarStudio/src/StarStudio/Renderer/OrthographicCameraController.cpp b/StarEngine/src/StarEngine/Renderer/OrthographicCameraController.cpp similarity index 90% rename from StarStudio/src/StarStudio/Renderer/OrthographicCameraController.cpp rename to StarEngine/src/StarEngine/Renderer/OrthographicCameraController.cpp index 1c35056a..bfb8db89 100644 --- a/StarStudio/src/StarStudio/Renderer/OrthographicCameraController.cpp +++ b/StarEngine/src/StarEngine/Renderer/OrthographicCameraController.cpp @@ -1,10 +1,10 @@ -#include "sspch.h" -#include "StarStudio/Renderer/OrthographicCameraController.h" +#include "sepch.h" +#include "StarEngine/Renderer/OrthographicCameraController.h" -#include "StarStudio/Core/Input.h" -#include "StarStudio/Core/KeyCodes.h" +#include "StarEngine/Core/Input.h" +#include "StarEngine/Core/KeyCodes.h" -namespace StarStudio { +namespace StarEngine { OrthographicCameraController::OrthographicCameraController(float aspectRatio, bool rotation) : m_AspectRatio(aspectRatio), m_Camera(-m_AspectRatio * m_ZoomLevel, m_AspectRatio* m_ZoomLevel, -m_ZoomLevel, m_ZoomLevel), m_Rotation(rotation), m_CameraPosition(), m_CameraRotation() @@ -13,7 +13,7 @@ namespace StarStudio { } void OrthographicCameraController::OnUpdate(Timestep ts) { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); if (Input::IsKeyPressed(SS_KEY_A)) { @@ -59,7 +59,7 @@ namespace StarStudio { void OrthographicCameraController::OnEvent(Event& e) { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); EventDispatcher dispatcher(e); dispatcher.Dispatch(SS_BIND_EVENT_FN(OrthographicCameraController::OnMouseScrolled)); @@ -68,7 +68,7 @@ namespace StarStudio { bool OrthographicCameraController::OnMouseScrolled(MouseScrolledEvent& e) { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); m_ZoomLevel -= e.GetYOffset() * 0.25f; m_ZoomLevel = std::max(m_ZoomLevel, 0.25f); @@ -78,7 +78,7 @@ namespace StarStudio { bool OrthographicCameraController::OnWindowResized(WindowResizeEvent& e) { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); m_AspectRatio = (float)e.GetWidth() / (float)e.GetHeight(); m_Camera.SetProjection(-m_AspectRatio * m_ZoomLevel, m_AspectRatio * m_ZoomLevel, -m_ZoomLevel, m_ZoomLevel); diff --git a/StarStudio/src/StarStudio/Renderer/OrthographicCameraController.h b/StarEngine/src/StarEngine/Renderer/OrthographicCameraController.h similarity index 79% rename from StarStudio/src/StarStudio/Renderer/OrthographicCameraController.h rename to StarEngine/src/StarEngine/Renderer/OrthographicCameraController.h index cd40e793..81667352 100644 --- a/StarStudio/src/StarStudio/Renderer/OrthographicCameraController.h +++ b/StarEngine/src/StarEngine/Renderer/OrthographicCameraController.h @@ -1,11 +1,12 @@ #pragma once -#include "StarStudio/Renderer/OrthographicCamera.h" -#include "StarStudio/Core/Timestep.h" -#include "StarStudio/Events/ApplicationEvent.h" -#include "StarStudio/Events/MouseEvent.h" +#include "StarEngine/Renderer/OrthographicCamera.h" +#include "StarEngine/Core/Timestep.h" -namespace StarStudio { +#include "StarEngine/Events/ApplicationEvent.h" +#include "StarEngine/Events/MouseEvent.h" + +namespace StarEngine { class OrthographicCameraController { diff --git a/StarEngine/src/StarEngine/Renderer/RenderCommand.cpp b/StarEngine/src/StarEngine/Renderer/RenderCommand.cpp new file mode 100644 index 00000000..412f769f --- /dev/null +++ b/StarEngine/src/StarEngine/Renderer/RenderCommand.cpp @@ -0,0 +1,7 @@ +#include "sepch.h" +#include "StarEngine/Renderer/RenderCommand.h" + +namespace StarEngine +{ + Scope RenderCommand::s_RendererAPI = RendererAPI::Create(); +} \ No newline at end of file diff --git a/StarStudio/src/StarStudio/Renderer/RenderCommand.h b/StarEngine/src/StarEngine/Renderer/RenderCommand.h similarity index 93% rename from StarStudio/src/StarStudio/Renderer/RenderCommand.h rename to StarEngine/src/StarEngine/Renderer/RenderCommand.h index 7cbdaa8d..f6958b1a 100644 --- a/StarStudio/src/StarStudio/Renderer/RenderCommand.h +++ b/StarEngine/src/StarEngine/Renderer/RenderCommand.h @@ -1,6 +1,6 @@ #pragma once -#include "StarStudio/Renderer/RendererAPI.h" +#include "StarEngine/Renderer/RendererAPI.h" namespace StarStudio { diff --git a/StarStudio/src/StarStudio/Renderer/Renderer.cpp b/StarEngine/src/StarEngine/Renderer/Renderer.cpp similarity index 84% rename from StarStudio/src/StarStudio/Renderer/Renderer.cpp rename to StarEngine/src/StarEngine/Renderer/Renderer.cpp index f5f92c2d..87d38b2e 100644 --- a/StarStudio/src/StarStudio/Renderer/Renderer.cpp +++ b/StarEngine/src/StarEngine/Renderer/Renderer.cpp @@ -1,15 +1,15 @@ -#include "sspch.h" +#include "sepch.h" -#include "StarStudio/Renderer/Renderer.h" -#include "StarStudio/Renderer/Renderer2D.h" +#include "StarEngine/Renderer/Renderer.h" +#include "StarEngine/Renderer/Renderer2D.h" -namespace StarStudio { +namespace StarEngine { Scope Renderer::s_SceneData = CreateScope(); void Renderer::Init() { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); RenderCommand::Init(); Renderer2D::Init(); diff --git a/StarStudio/src/StarStudio/Renderer/Renderer.h b/StarEngine/src/StarEngine/Renderer/Renderer.h similarity index 77% rename from StarStudio/src/StarStudio/Renderer/Renderer.h rename to StarEngine/src/StarEngine/Renderer/Renderer.h index 08c37bdf..6bfc4c0a 100644 --- a/StarStudio/src/StarStudio/Renderer/Renderer.h +++ b/StarEngine/src/StarEngine/Renderer/Renderer.h @@ -1,11 +1,11 @@ #pragma once -#include "StarStudio/Renderer/RenderCommand.h" +#include "StarEngine/Renderer/RenderCommand.h" -#include "StarStudio/Renderer/OrthographicCamera.h" -#include "StarStudio/Renderer/Shader.h" +#include "StarEngine/Renderer/OrthographicCamera.h" +#include "StarEngine/Renderer/Shader.h" -namespace StarStudio { +namespace StarEngine { class Renderer { diff --git a/StarStudio/src/StarStudio/Renderer/Renderer2D.cpp b/StarEngine/src/StarEngine/Renderer/Renderer2D.cpp similarity index 96% rename from StarStudio/src/StarStudio/Renderer/Renderer2D.cpp rename to StarEngine/src/StarEngine/Renderer/Renderer2D.cpp index c91f7694..67b8a133 100644 --- a/StarStudio/src/StarStudio/Renderer/Renderer2D.cpp +++ b/StarEngine/src/StarEngine/Renderer/Renderer2D.cpp @@ -1,13 +1,13 @@ -#include "sspch.h" -#include "StarStudio/Renderer/Renderer2D.h" +#include "sepch.h" +#include "StarEngine/Renderer/Renderer2D.h" -#include "StarStudio/Renderer/VertexArray.h" -#include "StarStudio/Renderer/Shader.h" -#include "StarStudio/Renderer/RenderCommand.h" +#include "StarEngine/Renderer/VertexArray.h" +#include "StarEngine/Renderer/Shader.h" +#include "StarEngine/Renderer/RenderCommand.h" #include -namespace StarStudio { +namespace StarEngine { struct QuadVertex { @@ -46,7 +46,7 @@ namespace StarStudio { void Renderer2D::Init() { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); s_Data.QuadVertexArray = VertexArray::Create(); @@ -105,14 +105,14 @@ namespace StarStudio { void Renderer2D::Shutdown() { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); delete[] s_Data.QuadVertexBufferBase; } void Renderer2D::BeginScene(const OrthographicCamera& camera) { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); s_Data.TextureShader->Bind(); s_Data.TextureShader->SetMat4("u_ViewProjection", camera.GetViewProjectionMatrix()); @@ -125,7 +125,7 @@ namespace StarStudio { void Renderer2D::EndScene() { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); uint32_t dataSize = (uint32_t)((uint8_t*)s_Data.QuadVertexBufferPtr - (uint8_t*)s_Data.QuadVertexBufferBase); s_Data.QuadVertexBuffer->SetData(s_Data.QuadVertexBufferBase, dataSize); @@ -163,7 +163,7 @@ namespace StarStudio { void Renderer2D::DrawQuad(const glm::vec3& position, const glm::vec2& size, const glm::vec4& color) { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); constexpr size_t quadVertexCount = 4; const float textureIndex = 0.0f; // White Texture @@ -198,7 +198,7 @@ namespace StarStudio { void Renderer2D::DrawQuad(const glm::vec3& position, const glm::vec2& size, const Ref& texture, float tilingFactor, const glm::vec4& tintColor) { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); constexpr size_t quadVertexCount = 4; constexpr glm::vec2 textureCoords[] = { { 0.0f, 0.0f }, { 1.0f, 0.0f }, { 1.0f, 1.0f }, { 0.0f, 1.0f } }; @@ -251,7 +251,7 @@ namespace StarStudio { void Renderer2D::DrawRotatedQuad(const glm::vec3& position, const glm::vec2& size, float rotation, const glm::vec4& color) { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); constexpr size_t quadVertexCount = 4; const float textureIndex = 0.0f; // White Texture @@ -287,7 +287,7 @@ namespace StarStudio { void Renderer2D::DrawRotatedQuad(const glm::vec3& position, const glm::vec2& size, float rotation, const Ref& texture, float tilingFactor, const glm::vec4& tintColor) { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); constexpr size_t quadVertexCount = 4; constexpr glm::vec2 textureCoords[] = { { 0.0f, 0.0f }, { 1.0f, 0.0f }, { 1.0f, 1.0f }, { 0.0f, 1.0f } }; diff --git a/StarStudio/src/StarStudio/Renderer/Renderer2D.h b/StarEngine/src/StarEngine/Renderer/Renderer2D.h similarity index 93% rename from StarStudio/src/StarStudio/Renderer/Renderer2D.h rename to StarEngine/src/StarEngine/Renderer/Renderer2D.h index 82045860..10bcca5f 100644 --- a/StarStudio/src/StarStudio/Renderer/Renderer2D.h +++ b/StarEngine/src/StarEngine/Renderer/Renderer2D.h @@ -1,10 +1,10 @@ #pragma once -#include "StarStudio/Renderer/OrthographicCamera.h" +#include "StarEngine/Renderer/OrthographicCamera.h" -#include "StarStudio/Renderer/Texture.h" +#include "StarEngine/Renderer/Texture.h" -namespace StarStudio { +namespace StarEngine { class Renderer2D { public: diff --git a/StarStudio/src/StarStudio/Renderer/RendererAPI.cpp b/StarEngine/src/StarEngine/Renderer/RendererAPI.cpp similarity index 63% rename from StarStudio/src/StarStudio/Renderer/RendererAPI.cpp rename to StarEngine/src/StarEngine/Renderer/RendererAPI.cpp index 322126bb..fd082fd8 100644 --- a/StarStudio/src/StarStudio/Renderer/RendererAPI.cpp +++ b/StarEngine/src/StarEngine/Renderer/RendererAPI.cpp @@ -1,9 +1,9 @@ -#include "sspch.h" -#include "StarStudio/Renderer/RendererAPI.h" +#include "sepch.h" +#include "StarEngine/Renderer/RendererAPI.h" #include "Platform/OpenGL/OpenGLRendererAPI.h" -namespace StarStudio { +namespace StarEngine { RendererAPI::API RendererAPI::s_API = RendererAPI::API::OpenGL; @@ -11,11 +11,11 @@ namespace StarStudio { { switch (s_API) { - case RendererAPI::API::None: SS_CORE_ASSERT(false, "RendererAPI::None is currently not supported!"); return nullptr; + case RendererAPI::API::None: SE_CORE_ASSERT(false, "RendererAPI::None is currently not supported!"); return nullptr; case RendererAPI::API::OpenGL: return CreateScope(); } - SS_CORE_ASSERT(false, "Unknown RendererAPI!"); + SE_CORE_ASSERT(false, "Unknown RendererAPI!"); return nullptr; } diff --git a/StarStudio/src/StarStudio/Renderer/RendererAPI.h b/StarEngine/src/StarEngine/Renderer/RendererAPI.h similarity index 88% rename from StarStudio/src/StarStudio/Renderer/RendererAPI.h rename to StarEngine/src/StarEngine/Renderer/RendererAPI.h index 3d9154c0..c3275187 100644 --- a/StarStudio/src/StarStudio/Renderer/RendererAPI.h +++ b/StarEngine/src/StarEngine/Renderer/RendererAPI.h @@ -2,9 +2,9 @@ #include -#include "StarStudio/Renderer/VertexArray.h" +#include "StarEngine/Renderer/VertexArray.h" -namespace StarStudio { +namespace StarEngine { class RendererAPI { diff --git a/StarStudio/src/StarStudio/Renderer/Shader.cpp b/StarEngine/src/StarEngine/Renderer/Shader.cpp similarity index 75% rename from StarStudio/src/StarStudio/Renderer/Shader.cpp rename to StarEngine/src/StarEngine/Renderer/Shader.cpp index a4a7c532..b0f1b337 100644 --- a/StarStudio/src/StarStudio/Renderer/Shader.cpp +++ b/StarEngine/src/StarEngine/Renderer/Shader.cpp @@ -1,20 +1,20 @@ -#include "sspch.h" -#include "StarStudio/Renderer/Shader.h" +#include "sepch.h" +#include "StarEngine/Renderer/Shader.h" -#include "StarStudio/Renderer/Renderer.h" +#include "StarEngine/Renderer/Renderer.h" #include "Platform/OpenGL/OpenGLShader.h" -namespace StarStudio { +namespace StarEngine { Ref Shader::Create(const std::string& filepath) { switch (Renderer::GetAPI()) { - case RendererAPI::API::None: SS_CORE_ASSERT(false, "RendererAPI::None is currently not supported!"); return nullptr; + case RendererAPI::API::None: SE_CORE_ASSERT(false, "RendererAPI::None is currently not supported!"); return nullptr; case RendererAPI::API::OpenGL: return CreateRef(filepath); } - SS_CORE_ASSERT(false, "Unknown RendererAPI!"); + SE_CORE_ASSERT(false, "Unknown RendererAPI!"); return nullptr; } @@ -23,17 +23,17 @@ namespace StarStudio { { switch (Renderer::GetAPI()) { - case RendererAPI::API::None: SS_CORE_ASSERT(false, "RendererAPI::None is currently not supported!"); return nullptr; + case RendererAPI::API::None: SE_CORE_ASSERT(false, "RendererAPI::None is currently not supported!"); return nullptr; case RendererAPI::API::OpenGL: return CreateRef(name, vertexSrc, fragmentSrc);; } - SS_CORE_ASSERT(false, "Unknown RendererAPI!"); + SE_CORE_ASSERT(false, "Unknown RendererAPI!"); return nullptr; } void ShaderLibrary::Add(const std::string& name, const Ref& shader) { - SS_CORE_ASSERT(!Exists(name), "Shader already exists!"); + SE_CORE_ASSERT(!Exists(name), "Shader already exists!"); m_Shaders[name] = shader; } @@ -59,7 +59,7 @@ namespace StarStudio { Ref ShaderLibrary::Get(const std::string& name) { - SS_CORE_ASSERT(Exists(name), "Shader not found!"); + SE_CORE_ASSERT(Exists(name), "Shader not found!"); return m_Shaders[name]; } diff --git a/StarStudio/src/StarStudio/Renderer/Shader.h b/StarEngine/src/StarEngine/Renderer/Shader.h similarity index 98% rename from StarStudio/src/StarStudio/Renderer/Shader.h rename to StarEngine/src/StarEngine/Renderer/Shader.h index 825e6e68..10f41b1b 100644 --- a/StarStudio/src/StarStudio/Renderer/Shader.h +++ b/StarEngine/src/StarEngine/Renderer/Shader.h @@ -5,7 +5,7 @@ #include -namespace StarStudio { +namespace StarEngine { class Shader { diff --git a/StarStudio/src/StarStudio/Renderer/Texture.cpp b/StarEngine/src/StarEngine/Renderer/Texture.cpp similarity index 62% rename from StarStudio/src/StarStudio/Renderer/Texture.cpp rename to StarEngine/src/StarEngine/Renderer/Texture.cpp index 10bb611d..6a8e6a42 100644 --- a/StarStudio/src/StarStudio/Renderer/Texture.cpp +++ b/StarEngine/src/StarEngine/Renderer/Texture.cpp @@ -1,19 +1,19 @@ -#include "sspch.h" -#include "StarStudio/Renderer/Texture.h" +#include "sepch.h" +#include "StarEngine/Renderer/Texture.h" -#include "StarStudio/Renderer/Renderer.h" +#include "StarEngine/Renderer/Renderer.h" #include "Platform/OpenGL/OpenGLTexture.h" -namespace StarStudio +namespace StarEngine { Ref Texture2D::Create(uint32_t width, uint32_t height) { switch (Renderer::GetAPI()) { - case RendererAPI::API::None: SS_CORE_ASSERT(false, "RendererAPI::None is currently not supported!"); return nullptr; + case RendererAPI::API::None: SE_CORE_ASSERT(false, "RendererAPI::None is currently not supported!"); return nullptr; case RendererAPI::API::OpenGL: return CreateRef(width, height); } - SS_CORE_ASSERT(false, "Unknown RendererAPI!"); + SE_CORE_ASSERT(false, "Unknown RendererAPI!"); return nullptr; } @@ -21,11 +21,11 @@ namespace StarStudio { switch (Renderer::GetAPI()) { - case RendererAPI::API::None: SS_CORE_ASSERT(false, "RendererAPI::None is currently not supported") return nullptr; + case RendererAPI::API::None: SE_CORE_ASSERT(false, "RendererAPI::None is currently not supported") return nullptr; case RendererAPI::API::OpenGL: return CreateRef(path); } - SS_CORE_ASSERT(false, "Unknown RendererAPI!"); + SE_CORE_ASSERT(false, "Unknown RendererAPI!"); return nullptr; } diff --git a/StarStudio/src/StarStudio/Renderer/Texture.h b/StarEngine/src/StarEngine/Renderer/Texture.h similarity index 90% rename from StarStudio/src/StarStudio/Renderer/Texture.h rename to StarEngine/src/StarEngine/Renderer/Texture.h index 002754f8..13e5a90c 100644 --- a/StarStudio/src/StarStudio/Renderer/Texture.h +++ b/StarEngine/src/StarEngine/Renderer/Texture.h @@ -2,9 +2,9 @@ #include -#include "StarStudio/Core/Base.h" +#include "StarEngine/Core/Base.h" -namespace StarStudio{ +namespace StarEngine { class Texture { diff --git a/StarStudio/src/StarStudio/Renderer/VertexArray.cpp b/StarEngine/src/StarEngine/Renderer/VertexArray.cpp similarity index 53% rename from StarStudio/src/StarStudio/Renderer/VertexArray.cpp rename to StarEngine/src/StarEngine/Renderer/VertexArray.cpp index a58f7a7f..1183d35c 100644 --- a/StarStudio/src/StarStudio/Renderer/VertexArray.cpp +++ b/StarEngine/src/StarEngine/Renderer/VertexArray.cpp @@ -1,20 +1,20 @@ -#include "sspch.h" -#include "StarStudio/Renderer/VertexArray.h" +#include "sepch.h" +#include "StarEngine/Renderer/VertexArray.h" -#include "StarStudio/Renderer/Renderer.h" +#include "StarEngine/Renderer/Renderer.h" #include "Platform/OpenGL/OpenGLVertexArray.h" -namespace StarStudio { +namespace StarEngine { Ref VertexArray::Create() { switch (Renderer::GetAPI()) { - case RendererAPI::API::None: SS_CORE_ASSERT(false, "RendererAPI::None is currently not supported") return nullptr; + case RendererAPI::API::None: SE_CORE_ASSERT(false, "RendererAPI::None is currently not supported") return nullptr; case RendererAPI::API::OpenGL: return CreateRef(); } - SS_CORE_ASSERT(false, "Unknown RendererAPI!"); + SE_CORE_ASSERT(false, "Unknown RendererAPI!"); return nullptr; } } \ No newline at end of file diff --git a/StarStudio/src/StarStudio/Renderer/VertexArray.h b/StarEngine/src/StarEngine/Renderer/VertexArray.h similarity index 88% rename from StarStudio/src/StarStudio/Renderer/VertexArray.h rename to StarEngine/src/StarEngine/Renderer/VertexArray.h index 2991dc26..9d890e80 100644 --- a/StarStudio/src/StarStudio/Renderer/VertexArray.h +++ b/StarEngine/src/StarEngine/Renderer/VertexArray.h @@ -1,9 +1,9 @@ #pragma once #include -#include "StarStudio/Renderer/Buffer.h" +#include "StarEngine/Renderer/Buffer.h" -namespace StarStudio { +namespace StarEngine { class VertexArray { diff --git a/StarEngine/src/sepch.cpp b/StarEngine/src/sepch.cpp new file mode 100644 index 00000000..1f7080a4 --- /dev/null +++ b/StarEngine/src/sepch.cpp @@ -0,0 +1 @@ +#include "sepch.h" \ No newline at end of file diff --git a/StarStudio/src/sspch.h b/StarEngine/src/sepch.h similarity index 72% rename from StarStudio/src/sspch.h rename to StarEngine/src/sepch.h index b7c1414e..921cacc3 100644 --- a/StarStudio/src/sspch.h +++ b/StarEngine/src/sepch.h @@ -13,10 +13,10 @@ #include #include -#include "StarStudio/Core/Log.h" +#include "StarEngine/Core/Log.h" -#include "StarStudio/Debug/Instrumentor.h" +#include "StarEngine/Debug/Instrumentor.h" -#ifdef SS_PLATFORM_WINDOWS +#ifdef SE_PLATFORM_WINDOWS #include #endif \ No newline at end of file diff --git a/StarEngine/vendor/GLAD/bin/Debug-windows-x86_64/GLAD/GLAD.idb b/StarEngine/vendor/GLAD/bin/Debug-windows-x86_64/GLAD/GLAD.idb new file mode 100644 index 0000000000000000000000000000000000000000..9c7187a2e06ba2fb0306bf5d04ec93b726e94181 GIT binary patch literal 240640 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 literal 0 HcmV?d00001 diff --git a/StarEngine/vendor/GLAD/bin/Debug-windows-x86_64/GLAD/GLAD.lib b/StarEngine/vendor/GLAD/bin/Debug-windows-x86_64/GLAD/GLAD.lib new file mode 100644 index 0000000000000000000000000000000000000000..82e3a548df1121677eab72cb1464efd5c83b6851 GIT binary patch literal 638052 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

Y0vR%7_LpWg^b~l z(K5o-X$QHlmHVCL{!F=_EB9I48_!(-}6BS7@s#vbS<9 z?vw88fwF5>_V8tTa`--q+AFH}^7Y46dl!=$Rqw|f&pcP@-JaOFhy6|iz4 zhUtBcnx`wV)7x(uEN6DUteun|{_bBBwnGTUlv)p=)0>9dO&vq9K;332Tdwl9ZJY8! zbb)$@V5;6)muaq^?OGX=XBftW+Fo;AI(H|nQMX`u&|dSkO|+4Xb_>Cj{#sV0qSJ44 z_;w7I2W16ethv93RbW~R&p!g?%+AnnAJJXBSHZM?{0@0?Rd2U!!}ffN%l%?s{vsFO zW2M_dWJr0iK0%mUA5GU3ke^hx)3AgKYxjg1bqc`(e!=g$qfVNxXAoN`|JAlw=F;`E zZJ=Cit7%f8S>?WTqxP8V@>=ZM^@k7pUlw%+!1I+??MReZ0|>svusAHO-|#iH|F zI*eq=6)Eq?8uu0CEIx^~#^~GUFs|$mZeMwb@*i!}+X0KG+BzcbhxVnjsd=VtG^`<0 zo$786!tMs$;%qvXil;hLcui}bA^vH*+`x?NIaYKd#9!x(;gm76B+IJa!?MwB<$Bq!-OmV<99$!c>sF#@?bupS1;W* z@wU~f&9t9+wpReZpK80KSlLzMd$w}{-o9~d9~65w^XkuqsJrH&>xW`hH(l=O?*hF2 z@chzpb59IAPt*8d=HaPIyc4;st^JT__o{R@)9t+ju(85Rq;eXed1V%^+JpV%-X8pM zVVp|1WB32l-npza3`AkLTU`qx2)b}BZ5jo)8d{-|mTp`QwZ=3Wlah;Ad>5aL#n zq1&ifcyYB(>R61!ZM{hrrI-&Zw54^v^*ND3YIz}rNH@pj!2>r-SNc9R2*bX1(H~;H zu1YvxC&eJT!&;zYK8_%}Mp03e%B)NIp_DbsCpY6bh1?5XqIuxu&l4R(bBQ?Ar-pUc z)bWsX0jQ?4Bt&IBB)=5Me@FJ`%1ZrF}+Ek?U)=r`3Wd#Y=Z_bhV9BJW$|u0?*aNPq-LfCNZ@1W14cNPq-L jfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNb3pA+~30n}{X literal 0 HcmV?d00001 diff --git a/StarStudio/vendor/GLAD/include/KHR/khrplatform.h b/StarEngine/vendor/GLAD/include/KHR/khrplatform.h similarity index 100% rename from StarStudio/vendor/GLAD/include/KHR/khrplatform.h rename to StarEngine/vendor/GLAD/include/KHR/khrplatform.h diff --git a/StarStudio/vendor/GLAD/include/glad/glad.h b/StarEngine/vendor/GLAD/include/glad/glad.h similarity index 100% rename from StarStudio/vendor/GLAD/include/glad/glad.h rename to StarEngine/vendor/GLAD/include/glad/glad.h diff --git a/StarStudio/vendor/GLAD/premake5.lua b/StarEngine/vendor/GLAD/premake5.lua similarity index 100% rename from StarStudio/vendor/GLAD/premake5.lua rename to StarEngine/vendor/GLAD/premake5.lua diff --git a/StarStudio/vendor/GLAD/src/glad.c b/StarEngine/vendor/GLAD/src/glad.c similarity index 100% rename from StarStudio/vendor/GLAD/src/glad.c rename to StarEngine/vendor/GLAD/src/glad.c diff --git a/StarStudio/vendor/stb_image/stb_image.cpp b/StarEngine/vendor/stb_image/stb_image.cpp similarity index 100% rename from StarStudio/vendor/stb_image/stb_image.cpp rename to StarEngine/vendor/stb_image/stb_image.cpp diff --git a/StarStudio/vendor/stb_image/stb_image.h b/StarEngine/vendor/stb_image/stb_image.h similarity index 100% rename from StarStudio/vendor/stb_image/stb_image.h rename to StarEngine/vendor/stb_image/stb_image.h diff --git a/StarStudio/src/StarStudio.h b/StarStudio/src/StarStudio.h deleted file mode 100644 index 5a7cbff1..00000000 --- a/StarStudio/src/StarStudio.h +++ /dev/null @@ -1,29 +0,0 @@ -#pragma once - -// for use by StarStudio applications -#include "StarStudio/Core/Application.h" -#include "StarStudio/Core/Layer.h" -#include "StarStudio/Core/Log.h" - -#include "StarStudio/Core/Timestep.h" - -#include "StarStudio/ImGui/ImGuiLayer.h" - -// ---Input------------------------- -#include "StarStudio/Core/Input.h" -#include "StarStudio/Core/KeyCodes.h" -#include "StarStudio/Core/MouseCodes.h" -// --------------------------------- - -// ---Renderer------------------------ -#include "StarStudio/Renderer/Renderer.h" -#include "StarStudio/Renderer/Renderer2D.h" -#include "StarStudio/Renderer/RenderCommand.h" - -#include "StarStudio/Renderer/Buffer.h" -#include "StarStudio/Renderer/Shader.h" -#include "StarStudio/Renderer/Texture.h" -#include "StarStudio/Renderer/VertexArray.h" - -#include "StarStudio/Renderer/OrthographicCamera.h" -// ----------------------------------- \ No newline at end of file diff --git a/StarStudio/src/StarStudio/Core/EntryPoint.h b/StarStudio/src/StarStudio/Core/EntryPoint.h deleted file mode 100644 index cb12ea61..00000000 --- a/StarStudio/src/StarStudio/Core/EntryPoint.h +++ /dev/null @@ -1,23 +0,0 @@ -#pragma once -#include "StarStudio/Core/Base.h" - -#ifdef SS_PLATFORM_WINDOWS - -extern StarStudio::Application* StarStudio::CreateApplication(); - - int main(int argc, char** argv) { - StarStudio::Log::Init(); - - SS_PROFILE_BEGIN_SESSION("Startup", "StarStudioProfile-Startup.json"); - auto app = StarStudio::CreateApplication(); - SS_PROFILE_END_SESSION(); - - SS_PROFILE_BEGIN_SESSION("Runtime", "StarStudioProfile-Runtime.json"); - app->Run(); - SS_PROFILE_END_SESSION(); - - SS_PROFILE_BEGIN_SESSION("Shutdown", "StarStudioProfile-Shutdown.json"); - delete app; - SS_PROFILE_END_SESSION(); - } -#endif \ No newline at end of file diff --git a/StarStudio/src/StarStudio/Core/KeyCodes.h b/StarStudio/src/StarStudio/Core/KeyCodes.h deleted file mode 100644 index 706887d2..00000000 --- a/StarStudio/src/StarStudio/Core/KeyCodes.h +++ /dev/null @@ -1,272 +0,0 @@ -#pragma once - -namespace StarStudio -{ - typedef enum class KeyCode : uint16_t - { - // From glfw3.h - Space = 32, - Apostrophe = 39, /* ' */ - Comma = 44, /* , */ - Minus = 45, /* - */ - Period = 46, /* . */ - Slash = 47, /* / */ - - D0 = 48, /* 0 */ - D1 = 49, /* 1 */ - D2 = 50, /* 2 */ - D3 = 51, /* 3 */ - D4 = 52, /* 4 */ - D5 = 53, /* 5 */ - D6 = 54, /* 6 */ - D7 = 55, /* 7 */ - D8 = 56, /* 8 */ - D9 = 57, /* 9 */ - - Semicolon = 59, /* ; */ - Equal = 61, /* = */ - - A = 65, - B = 66, - C = 67, - D = 68, - E = 69, - F = 70, - G = 71, - H = 72, - I = 73, - J = 74, - K = 75, - L = 76, - M = 77, - N = 78, - O = 79, - P = 80, - Q = 81, - R = 82, - S = 83, - T = 84, - U = 85, - V = 86, - W = 87, - X = 88, - Y = 89, - Z = 90, - - LeftBracket = 91, /* [ */ - Backslash = 92, /* \ */ - RightBracket = 93, /* ] */ - GraveAccent = 96, /* ` */ - - World1 = 161, /* non-US #1 */ - World2 = 162, /* non-US #2 */ - - /* Function keys */ - Escape = 256, - Enter = 257, - Tab = 258, - Backspace = 259, - Insert = 260, - Delete = 261, - Right = 262, - Left = 263, - Down = 264, - Up = 265, - PageUp = 266, - PageDown = 267, - Home = 268, - End = 269, - CapsLock = 280, - ScrollLock = 281, - NumLock = 282, - PrintScreen = 283, - Pause = 284, - F1 = 290, - F2 = 291, - F3 = 292, - F4 = 293, - F5 = 294, - F6 = 295, - F7 = 296, - F8 = 297, - F9 = 298, - F10 = 299, - F11 = 300, - F12 = 301, - F13 = 302, - F14 = 303, - F15 = 304, - F16 = 305, - F17 = 306, - F18 = 307, - F19 = 308, - F20 = 309, - F21 = 310, - F22 = 311, - F23 = 312, - F24 = 313, - F25 = 314, - - /* Keypad */ - KP0 = 320, - KP1 = 321, - KP2 = 322, - KP3 = 323, - KP4 = 324, - KP5 = 325, - KP6 = 326, - KP7 = 327, - KP8 = 328, - KP9 = 329, - KPDecimal = 330, - KPDivide = 331, - KPMultiply = 332, - KPSubtract = 333, - KPAdd = 334, - KPEnter = 335, - KPEqual = 336, - - LeftShift = 340, - LeftControl = 341, - LeftAlt = 342, - LeftSuper = 343, - RightShift = 344, - RightControl = 345, - RightAlt = 346, - RightSuper = 347, - Menu = 348 - } Key; - - inline std::ostream& operator<<(std::ostream& os, KeyCode keyCode) - { - os << static_cast(keyCode); - return os; - } -} - -// From glfw3.h -#define SS_KEY_SPACE ::StarStudio::Key::Space -#define SS_KEY_APOSTROPHE ::StarStudio::Key::Apostrophe /* ' */ -#define SS_KEY_COMMA ::StarStudio::Key::Comma /* , */ -#define SS_KEY_MINUS ::StarStudio::Key::Minus /* - */ -#define SS_KEY_PERIOD ::StarStudio::Key::Period /* . */ -#define SS_KEY_SLASH ::StarStudio::Key::Slash /* / */ -#define SS_KEY_0 ::StarStudio::Key::D0 -#define SS_KEY_1 ::StarStudio::Key::D1 -#define SS_KEY_2 ::StarStudio::Key::D2 -#define SS_KEY_3 ::StarStudio::Key::D3 -#define SS_KEY_4 ::StarStudio::Key::D4 -#define SS_KEY_5 ::StarStudio::Key::D5 -#define SS_KEY_6 ::StarStudio::Key::D6 -#define SS_KEY_7 ::StarStudio::Key::D7 -#define SS_KEY_8 ::StarStudio::Key::D8 -#define SS_KEY_9 ::StarStudio::Key::D9 -#define SS_KEY_SEMICOLON ::StarStudio::Key::Semicolon /* ; */ -#define SS_KEY_EQUAL ::StarStudio::Key::Equal /* = */ -#define SS_KEY_A ::StarStudio::Key::A -#define SS_KEY_B ::StarStudio::Key::B -#define SS_KEY_C ::StarStudio::Key::C -#define SS_KEY_D ::StarStudio::Key::D -#define SS_KEY_E ::StarStudio::Key::E -#define SS_KEY_F ::StarStudio::Key::F -#define SS_KEY_G ::StarStudio::Key::G -#define SS_KEY_H ::StarStudio::Key::H -#define SS_KEY_I ::StarStudio::Key::I -#define SS_KEY_J ::StarStudio::Key::J -#define SS_KEY_K ::StarStudio::Key::K -#define SS_KEY_L ::StarStudio::Key::L -#define SS_KEY_M ::StarStudio::Key::M -#define SS_KEY_N ::StarStudio::Key::N -#define SS_KEY_O ::StarStudio::Key::O -#define SS_KEY_P ::StarStudio::Key::P -#define SS_KEY_Q ::StarStudio::Key::Q -#define SS_KEY_R ::StarStudio::Key::R -#define SS_KEY_S ::StarStudio::Key::S -#define SS_KEY_T ::StarStudio::Key::T -#define SS_KEY_U ::StarStudio::Key::U -#define SS_KEY_V ::StarStudio::Key::V -#define SS_KEY_W ::StarStudio::Key::W -#define SS_KEY_X ::StarStudio::Key::X -#define SS_KEY_Y ::StarStudio::Key::Y -#define SS_KEY_Z ::StarStudio::Key::Z -#define SS_KEY_LEFT_BRACKET ::StarStudio::Key::LeftBracket /* [ */ -#define SS_KEY_BACKSLASH ::StarStudio::Key::Backslash /* \ */ -#define SS_KEY_RIGHT_BRACKET ::StarStudio::Key::RightBracket /* ] */ -#define SS_KEY_GRAVE_ACCENT ::StarStudio::Key::GraveAccent /* ` */ -#define SS_KEY_WORLD_1 ::StarStudio::Key::World1 /* non-US #1 */ -#define SS_KEY_WORLD_2 ::StarStudio::Key::World2 /* non-US #2 */ - -/* Function keys */ -#define SS_KEY_ESCAPE ::StarStudio::Key::Escape -#define SS_KEY_ENTER ::StarStudio::Key::Enter -#define SS_KEY_TAB ::StarStudio::Key::Tab -#define SS_KEY_BACKSPACE ::StarStudio::Key::Backspace -#define SS_KEY_INSERT ::StarStudio::Key::Insert -#define SS_KEY_DELETE ::StarStudio::Key::Delete -#define SS_KEY_RIGHT ::StarStudio::Key::Right -#define SS_KEY_LEFT ::StarStudio::Key::Left -#define SS_KEY_DOWN ::StarStudio::Key::Down -#define SS_KEY_UP ::StarStudio::Key::Up -#define SS_KEY_PAGE_UP ::StarStudio::Key::PageUp -#define SS_KEY_PAGE_DOWN ::StarStudio::Key::PageDown -#define SS_KEY_HOME ::StarStudio::Key::Home -#define SS_KEY_END ::StarStudio::Key::End -#define SS_KEY_CAPS_LOCK ::StarStudio::Key::CapsLock -#define SS_KEY_SCROLL_LOCK ::StarStudio::Key::ScrollLock -#define SS_KEY_NUM_LOCK ::StarStudio::Key::NumLock -#define SS_KEY_PRINT_SCREEN ::StarStudio::Key::PrintScreen -#define SS_KEY_PAUSE ::StarStudio::Key::Pause -#define SS_KEY_F1 ::StarStudio::Key::F1 -#define SS_KEY_F2 ::StarStudio::Key::F2 -#define SS_KEY_F3 ::StarStudio::Key::F3 -#define SS_KEY_F4 ::StarStudio::Key::F4 -#define SS_KEY_F5 ::StarStudio::Key::F5 -#define SS_KEY_F6 ::StarStudio::Key::F6 -#define SS_KEY_F7 ::StarStudio::Key::F7 -#define SS_KEY_F8 ::StarStudio::Key::F8 -#define SS_KEY_F9 ::StarStudio::Key::F9 -#define SS_KEY_F10 ::StarStudio::Key::F10 -#define SS_KEY_F11 ::StarStudio::Key::F11 -#define SS_KEY_F12 ::StarStudio::Key::F12 -#define SS_KEY_F13 ::StarStudio::Key::F13 -#define SS_KEY_F14 ::StarStudio::Key::F14 -#define SS_KEY_F15 ::StarStudio::Key::F15 -#define SS_KEY_F16 ::StarStudio::Key::F16 -#define SS_KEY_F17 ::StarStudio::Key::F17 -#define SS_KEY_F18 ::StarStudio::Key::F18 -#define SS_KEY_F19 ::StarStudio::Key::F19 -#define SS_KEY_F20 ::StarStudio::Key::F20 -#define SS_KEY_F21 ::StarStudio::Key::F21 -#define SS_KEY_F22 ::StarStudio::Key::F22 -#define SS_KEY_F23 ::StarStudio::Key::F23 -#define SS_KEY_F24 ::StarStudio::Key::F24 -#define SS_KEY_F25 ::StarStudio::Key::F25 - -/* Keypad */ -#define SS_KEY_KP_0 ::StarStudio::Key::KP0 -#define SS_KEY_KP_1 ::StarStudio::Key::KP1 -#define SS_KEY_KP_2 ::StarStudio::Key::KP2 -#define SS_KEY_KP_3 ::StarStudio::Key::KP3 -#define SS_KEY_KP_4 ::StarStudio::Key::KP4 -#define SS_KEY_KP_5 ::StarStudio::Key::KP5 -#define SS_KEY_KP_6 ::StarStudio::Key::KP6 -#define SS_KEY_KP_7 ::StarStudio::Key::KP7 -#define SS_KEY_KP_8 ::StarStudio::Key::KP8 -#define SS_KEY_KP_9 ::StarStudio::Key::KP9 -#define SS_KEY_KP_DECIMAL ::StarStudio::Key::KPDecimal -#define SS_KEY_KP_DIVIDE ::StarStudio::Key::KPDivide -#define SS_KEY_KP_MULTIPLY ::StarStudio::Key::KPMultiply -#define SS_KEY_KP_SUBTRACT ::StarStudio::Key::KPSubtract -#define SS_KEY_KP_ADD ::StarStudio::Key::KPAdd -#define SS_KEY_KP_ENTER ::StarStudio::Key::KPEnter -#define SS_KEY_KP_EQUAL ::StarStudio::Key::KPEqual - -#define SS_KEY_LEFT_SHIFT ::StarStudio::Key::LeftShift -#define SS_KEY_LEFT_CONTROL ::StarStudio::Key::LeftControl -#define SS_KEY_LEFT_ALT ::StarStudio::Key::LeftAlt -#define SS_KEY_LEFT_SUPER ::StarStudio::Key::LeftSuper -#define SS_KEY_RIGHT_SHIFT ::StarStudio::Key::RightShift -#define SS_KEY_RIGHT_CONTROL ::StarStudio::Key::RightControl -#define SS_KEY_RIGHT_ALT ::StarStudio::Key::RightAlt -#define SS_KEY_RIGHT_SUPER ::StarStudio::Key::RightSuper -#define SS_KEY_MENU ::StarStudio::Key::Menu \ No newline at end of file diff --git a/StarStudio/src/StarStudio/Core/Log.h b/StarStudio/src/StarStudio/Core/Log.h deleted file mode 100644 index 504821df..00000000 --- a/StarStudio/src/StarStudio/Core/Log.h +++ /dev/null @@ -1,33 +0,0 @@ -#pragma once - - -#include "StarStudio/Core/Base.h" - -#include "spdlog/spdlog.h" -#include "spdlog/fmt/ostr.h" - -namespace StarStudio { - class Log - { - public: - static void Init(); - - static Ref& GetCoreLogger() { return s_CoreLogger; } - static Ref& GetClientLogger() { return s_ClientLogger; } - private: - static Ref s_CoreLogger; - static Ref s_ClientLogger; - }; -} - -#define SS_CORE_TRACE(...) ::StarStudio::Log::GetCoreLogger()->trace(__VA_ARGS__) -#define SS_CORE_INFO(...) ::StarStudio::Log::GetCoreLogger()->info(__VA_ARGS__) -#define SS_CORE_WARN(...) ::StarStudio::Log::GetCoreLogger()->warn(__VA_ARGS__) -#define SS_CORE_ERROR(...) ::StarStudio::Log::GetCoreLogger()->error(__VA_ARGS__) -#define SS_CORE_CRITICAL(...) ::StarStudio::Log::GetClientLogger()->critical(__VA_ARGS__) - -#define SS_TRACE(...) ::StarStudio::Log::GetClientLogger()->trace(__VA_ARGS__) -#define SS_INFO(...) ::StarStudio::Log::GetClientLogger()->info(__VA_ARGS__) -#define SS_WARN(...) ::StarStudio::Log::GetClientLogger()->warn(__VA_ARGS__) -#define SS_ERROR(...) ::StarStudio::Log::GetClientLogger()->error(__VA_ARGS__) -#define SS_CRITICAL(...) ::StarStudio::Log::GetClientLogger()->critical(__VA_ARGS__) \ No newline at end of file diff --git a/StarStudio/src/StarStudio/Core/MouseCodes.h b/StarStudio/src/StarStudio/Core/MouseCodes.h deleted file mode 100644 index 9cca7def..00000000 --- a/StarStudio/src/StarStudio/Core/MouseCodes.h +++ /dev/null @@ -1,41 +0,0 @@ -#pragma once - -namespace StarStudio -{ - typedef enum class MouseCode : uint16_t - { - // From glfw3.h - Button0 = 0, - Button1 = 1, - Button2 = 2, - Button3 = 3, - Button4 = 4, - Button5 = 5, - Button6 = 6, - Button7 = 7, - - ButtonLast = Button7, - ButtonLeft = Button0, - ButtonRight = Button1, - ButtonMiddle = Button2 - } Mouse; - - inline std::ostream& operator<<(std::ostream& os, MouseCode mouseCode) - { - os << static_cast(mouseCode); - return os; - } -} - -#define SS_MOUSE_BUTTON_0 ::StarStudio::Mouse::Button0 -#define SS_MOUSE_BUTTON_1 ::StarStudio::Mouse::Button1 -#define SS_MOUSE_BUTTON_2 ::StarStudio::Mouse::Button2 -#define SS_MOUSE_BUTTON_3 ::StarStudio::Mouse::Button3 -#define SS_MOUSE_BUTTON_4 ::StarStudio::Mouse::Button4 -#define SS_MOUSE_BUTTON_5 ::StarStudio::Mouse::Button5 -#define SS_MOUSE_BUTTON_6 ::StarStudio::Mouse::Button6 -#define SS_MOUSE_BUTTON_7 ::StarStudio::Mouse::Button7 -#define SS_MOUSE_BUTTON_LAST ::StarStudio::Mouse::ButtonLast -#define SS_MOUSE_BUTTON_LEFT ::StarStudio::Mouse::ButtonLeft -#define SS_MOUSE_BUTTON_RIGHT ::StarStudio::Mouse::ButtonRight -#define SS_MOUSE_BUTTON_MIDDLE ::StarStudio::Mouse::ButtonMiddle \ No newline at end of file diff --git a/StarStudio/src/StarStudio/Renderer/RenderCommand.cpp b/StarStudio/src/StarStudio/Renderer/RenderCommand.cpp deleted file mode 100644 index 3ca0f87e..00000000 --- a/StarStudio/src/StarStudio/Renderer/RenderCommand.cpp +++ /dev/null @@ -1,7 +0,0 @@ -#include "sspch.h" -#include "StarStudio/Renderer/RenderCommand.h" - -namespace StarStudio -{ - Scope RenderCommand::s_RendererAPI = RendererAPI::Create(); -} \ No newline at end of file diff --git a/StarStudio/src/sspch.cpp b/StarStudio/src/sspch.cpp deleted file mode 100644 index 4819e1f4..00000000 --- a/StarStudio/src/sspch.cpp +++ /dev/null @@ -1 +0,0 @@ -#include "sspch.h" \ No newline at end of file diff --git a/StarStudio/vendor/GLFW b/StarStudio/vendor/GLFW deleted file mode 160000 index 8729dd89..00000000 --- a/StarStudio/vendor/GLFW +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 8729dd89d4944c6f24942fda7788d051b950762a diff --git a/StarStudio/vendor/glm b/StarStudio/vendor/glm deleted file mode 160000 index 69b130c1..00000000 --- a/StarStudio/vendor/glm +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 69b130c162e6266e07392741bd04feacc55dcda2 diff --git a/StarStudio/vendor/imgui b/StarStudio/vendor/imgui deleted file mode 160000 index 0ca274b4..00000000 --- a/StarStudio/vendor/imgui +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 0ca274b469f9c35aec9ab16502b35b95ca7dd848 diff --git a/StarStudio/vendor/spdlog b/StarStudio/vendor/spdlog deleted file mode 160000 index 7cbf2a69..00000000 --- a/StarStudio/vendor/spdlog +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 7cbf2a696764f3c2c84ff4b8eb592fce5924919e diff --git a/premake5.lua b/premake5.lua index 40f77533..63a9a87f 100644 --- a/premake5.lua +++ b/premake5.lua @@ -1,4 +1,4 @@ -workspace "StarStudio" +workspace "StarEngine" architecture "x86_64" startproject "Sandbox" @@ -17,21 +17,21 @@ workspace "StarStudio" outputdir = "%{cfg.buildcfg}-%{cfg.system}-%{cfg.architecture}" IncludeDir = {} -IncludeDir["GLFW"] = "StarStudio/vendor/GLFW/include" -IncludeDir["GLAD"] = "StarStudio/vendor/GLAD/include" -IncludeDir["imgui"] = "StarStudio/vendor/imgui" -IncludeDir["glm"] = "StarStudio/vendor/glm" -IncludeDir["stb_image"] = "StarStudio/vendor/stb_image" +IncludeDir["GLFW"] = "StarEngine/vendor/GLFW/include" +IncludeDir["GLAD"] = "StarEngine/vendor/GLAD/include" +IncludeDir["imgui"] = "StarEngine/vendor/imgui" +IncludeDir["glm"] = "StarEngine/vendor/glm" +IncludeDir["stb_image"] = "StarEngine/vendor/stb_image" group "Dependencies" - include "StarStudio/vendor/GLFW" - include "StarStudio/vendor/GLAD" - include "StarStudio/vendor/imgui" + include "StarEngine/vendor/GLFW" + include "StarEngine/vendor/GLAD" + include "StarEngine/vendor/imgui" group "" -project "StarStudio" - location "StarStudio" +project "StarEngine" + location "StarEngine" kind "StaticLib" language "C++" cppdialect "C++17" @@ -40,8 +40,8 @@ project "StarStudio" targetdir ("bin/" .. outputdir .. "/%{prj.name}") objdir ("bin-int/" .. outputdir .. "/%{prj.name}") - pchheader "sspch.h" - pchsource "StarStudio/src/sspch.cpp" + pchheader "sepch.h" + pchsource "StarEngine/src/sepch.cpp" files { @@ -90,17 +90,17 @@ project "StarStudio" } filter "configurations:Debug" - defines "SS_DEBUG" + defines "SE_DEBUG" runtime "Debug" symbols "on" filter "configurations:Release" - defines "SS_RELEASE" + defines "SE_RELEASE" runtime "Release" optimize "on" filter "configurations:Dist" - defines "SS_DIST" + defines "SE_DIST" runtime "Release" optimize "on" @@ -125,29 +125,29 @@ project "Sandbox" includedirs { - "StarStudio/vendor/spdlog/include", - "StarStudio/src", - "StarStudio/vendor", + "StarEngine/vendor/spdlog/include", + "StarEngine/src", + "StarEngine/vendor", "%{IncludeDir.glm}" } links { - "StarStudio" + "StarEngine" } filter "configurations:Debug" - defines "SS_DEBUG" + defines "SE_DEBUG" runtime "Debug" symbols "on" filter "configurations:Release" - defines "SS_RELEASE" + defines "SE_RELEASE" runtime "Release" optimize "on" filter "configurations:Dist" - defines "SS_DIST" + defines "SE_DIST" runtime "Release" optimize "on" From c15b0a9a1d3940dd5fda3b8005a0c85b53f321ff Mon Sep 17 00:00:00 2001 From: sheazy_wi Date: Tue, 11 Feb 2025 22:41:00 -0500 Subject: [PATCH 02/27] moved the submodules --- .gitmodules | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.gitmodules b/.gitmodules index bbadd89c..f0a223b3 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,12 +1,12 @@ -[submodule "StarStudio/vendor/spdlog"] - path = StarStudio/vendor/spdlog +[submodule "StarEngine/vendor/spdlog"] + path = StarEngine/vendor/spdlog url = https://github.com/gabime/spdlog/ -[submodule "StarStudio/vendor/GLFW"] - path = StarStudio/vendor/GLFW +[submodule "StarEngine/vendor/GLFW"] + path = StarEngine/vendor/GLFW url = https://github.com/TheCherno/glfw/ -[submodule "StarStudio/vendor/imgui"] - path = StarStudio/vendor/imgui +[submodule "StarEngine/vendor/imgui"] + path = StarEngine/vendor/imgui url = https://github.com/starbounded-dev/imgui -[submodule "StarStudio/vendor/glm"] - path = StarStudio/vendor/glm +[submodule "StarEngine/vendor/glm"] + path = StarEngine/vendor/glm url = https://github.com/g-truc/glm From 929f5913543ba944e8fb23f1b5d87c48d7dc11d3 Mon Sep 17 00:00:00 2001 From: sheazy_wi Date: Tue, 11 Feb 2025 22:42:24 -0500 Subject: [PATCH 03/27] Update KeyEvent.h --- StarEngine/src/StarEngine/Events/KeyEvent.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/StarEngine/src/StarEngine/Events/KeyEvent.h b/StarEngine/src/StarEngine/Events/KeyEvent.h index 2d51cd2f..f791a7ae 100644 --- a/StarEngine/src/StarEngine/Events/KeyEvent.h +++ b/StarEngine/src/StarEngine/Events/KeyEvent.h @@ -1,9 +1,9 @@ #pragma once -#include "StarStudio/Events/Event.h" -#include "StarStudio/Core/Input.h" +#include "StarEngine/Events/Event.h" +#include "StarEngine/Core/Input.h" -namespace StarStudio { +namespace StarEngine { class KeyEvent : public Event { From e23c3b3f4d93431a702174ccef50a00b5b2e3466 Mon Sep 17 00:00:00 2001 From: sheazy_wi Date: Thu, 13 Feb 2025 11:10:17 -0500 Subject: [PATCH 04/27] removed modules cuz aint working --- .gitmodules | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 .gitmodules diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index f0a223b3..00000000 --- a/.gitmodules +++ /dev/null @@ -1,12 +0,0 @@ -[submodule "StarEngine/vendor/spdlog"] - path = StarEngine/vendor/spdlog - url = https://github.com/gabime/spdlog/ -[submodule "StarEngine/vendor/GLFW"] - path = StarEngine/vendor/GLFW - url = https://github.com/TheCherno/glfw/ -[submodule "StarEngine/vendor/imgui"] - path = StarEngine/vendor/imgui - url = https://github.com/starbounded-dev/imgui -[submodule "StarEngine/vendor/glm"] - path = StarEngine/vendor/glm - url = https://github.com/g-truc/glm From b43cdcf34551d1955186fb71a65322d7738d2d07 Mon Sep 17 00:00:00 2001 From: sheazy_wi Date: Thu, 13 Feb 2025 11:13:04 -0500 Subject: [PATCH 05/27] added spdlog --- .gitmodules | 3 +++ StarEngine/vendor/spdlog | 1 + 2 files changed, 4 insertions(+) create mode 100644 .gitmodules create mode 160000 StarEngine/vendor/spdlog diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..dd6d4b71 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "StarEngine/vendor/spdlog"] + path = StarEngine/vendor/spdlog + url = https://github.com/gabime/spdlog/ diff --git a/StarEngine/vendor/spdlog b/StarEngine/vendor/spdlog new file mode 160000 index 00000000..3335c380 --- /dev/null +++ b/StarEngine/vendor/spdlog @@ -0,0 +1 @@ +Subproject commit 3335c380a08c5e0f5117a66622df6afdb3d74959 From d5d7a8b9fce357b8f8e4c198315620a242d97103 Mon Sep 17 00:00:00 2001 From: sheazy_wi Date: Thu, 13 Feb 2025 18:20:21 +0000 Subject: [PATCH 06/27] added modules back --- .gitmodules | 11 ++++++++++- StarEngine/vendor/glfw | 1 + StarEngine/vendor/glm | 1 + StarEngine/vendor/imgui | 1 + 4 files changed, 13 insertions(+), 1 deletion(-) create mode 160000 StarEngine/vendor/glfw create mode 160000 StarEngine/vendor/glm create mode 160000 StarEngine/vendor/imgui diff --git a/.gitmodules b/.gitmodules index dd6d4b71..bc9b9afc 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,12 @@ [submodule "StarEngine/vendor/spdlog"] path = StarEngine/vendor/spdlog - url = https://github.com/gabime/spdlog/ + url = https://github.com/gabime/spdlog +[submodule "StarEngine/vendor/glfw"] + path = StarEngine/vendor/glfw + url = https://github.com/TheCherno/glfw +[submodule "StarEngine/vendor/imgui"] + path = StarEngine/vendor/imgui + url = https://github.com/starbounded-dev/imgui +[submodule "StarEngine/vendor/glm"] + path = StarEngine/vendor/glm + url = https://github.com/g-truc/glm diff --git a/StarEngine/vendor/glfw b/StarEngine/vendor/glfw new file mode 160000 index 00000000..026a148d --- /dev/null +++ b/StarEngine/vendor/glfw @@ -0,0 +1 @@ +Subproject commit 026a148d7dd78d597de380c4e77ca0869f0ceaab diff --git a/StarEngine/vendor/glm b/StarEngine/vendor/glm new file mode 160000 index 00000000..2d4c4b4d --- /dev/null +++ b/StarEngine/vendor/glm @@ -0,0 +1 @@ +Subproject commit 2d4c4b4dd31fde06cfffad7915c2b3006402322f diff --git a/StarEngine/vendor/imgui b/StarEngine/vendor/imgui new file mode 160000 index 00000000..53a2f323 --- /dev/null +++ b/StarEngine/vendor/imgui @@ -0,0 +1 @@ +Subproject commit 53a2f323bb2202a05e7ec1e67ded8d51cde8fe85 From 5c8cbec0a1bcbe43034e1483aa4f896e477aecbf Mon Sep 17 00:00:00 2001 From: sheazy_wi Date: Thu, 13 Feb 2025 18:22:41 +0000 Subject: [PATCH 07/27] fixed up workflow --- .github/workflows/main.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index d350a65d..d712dcff 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,4 +1,4 @@ -name: Build StarStudio +name: Build StarEngine on: push: @@ -29,10 +29,10 @@ jobs: run: premake5 vs2022 - name: Build project with MSBuild - run: MSBuild /m /p:Configuration=Debug StarStudio.sln + run: MSBuild /m /p:Configuration=Debug StarEngine.sln - name: Upload executable uses: actions/upload-artifact@v4 with: - name: StarStudio-Windows + name: StarEngine-Windows path: "bin/Debug-windows-x86_64/Sandbox/Sandbox.exe" \ No newline at end of file From ded3f220e24db7ab942d91c7f7dd5611a009c696 Mon Sep 17 00:00:00 2001 From: sheazy_wi Date: Thu, 13 Feb 2025 18:27:46 +0000 Subject: [PATCH 08/27] added backslash --- .gitmodules | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.gitmodules b/.gitmodules index bc9b9afc..b1e24d33 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,12 +1,12 @@ [submodule "StarEngine/vendor/spdlog"] path = StarEngine/vendor/spdlog - url = https://github.com/gabime/spdlog + url = https://github.com/gabime/spdlog/ [submodule "StarEngine/vendor/glfw"] path = StarEngine/vendor/glfw - url = https://github.com/TheCherno/glfw + url = https://github.com/TheCherno/glfw/ [submodule "StarEngine/vendor/imgui"] path = StarEngine/vendor/imgui - url = https://github.com/starbounded-dev/imgui + url = https://github.com/starbounded-dev/imgui/ [submodule "StarEngine/vendor/glm"] path = StarEngine/vendor/glm - url = https://github.com/g-truc/glm + url = https://github.com/g-truc/glm/ From 6d2ca45a8040c5f47f6e22c07c28d4a3494fb0e7 Mon Sep 17 00:00:00 2001 From: sheazy_wi Date: Thu, 13 Feb 2025 18:29:22 +0000 Subject: [PATCH 09/27] doing stuff trying to fix the studio --- .gitmodules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index b1e24d33..89897fe8 100644 --- a/.gitmodules +++ b/.gitmodules @@ -3,7 +3,7 @@ url = https://github.com/gabime/spdlog/ [submodule "StarEngine/vendor/glfw"] path = StarEngine/vendor/glfw - url = https://github.com/TheCherno/glfw/ + url = https://github.com/TheCherno/glfw [submodule "StarEngine/vendor/imgui"] path = StarEngine/vendor/imgui url = https://github.com/starbounded-dev/imgui/ From a2ac5fb02d01ca29a0549873dfddfed0fa7c2070 Mon Sep 17 00:00:00 2001 From: sheazy_wi Date: Thu, 13 Feb 2025 18:35:10 +0000 Subject: [PATCH 10/27] made changes that i forgot to do earlier --- .../src/Platform/OpenGL/OpenGLBuffer.cpp | 22 ++++---- StarEngine/src/Platform/OpenGL/OpenGLBuffer.h | 4 +- .../src/Platform/OpenGL/OpenGLContext.cpp | 22 ++++---- .../src/Platform/OpenGL/OpenGLContext.h | 4 +- .../src/Platform/OpenGL/OpenGLRendererAPI.cpp | 10 ++-- .../src/Platform/OpenGL/OpenGLRendererAPI.h | 4 +- .../src/Platform/OpenGL/OpenGLShader.cpp | 52 +++++++++---------- StarEngine/src/Platform/OpenGL/OpenGLShader.h | 6 +-- .../src/Platform/OpenGL/OpenGLTexture.cpp | 18 +++---- .../src/Platform/OpenGL/OpenGLTexture.h | 4 +- .../src/Platform/OpenGL/OpenGLVertexArray.cpp | 22 ++++---- .../src/Platform/OpenGL/OpenGLVertexArray.h | 4 +- 12 files changed, 86 insertions(+), 86 deletions(-) diff --git a/StarEngine/src/Platform/OpenGL/OpenGLBuffer.cpp b/StarEngine/src/Platform/OpenGL/OpenGLBuffer.cpp index 7e02da6e..f19891ae 100644 --- a/StarEngine/src/Platform/OpenGL/OpenGLBuffer.cpp +++ b/StarEngine/src/Platform/OpenGL/OpenGLBuffer.cpp @@ -1,9 +1,9 @@ -#include "sspch.h" +#include "sepch.h" #include "Platform/OpenGL/OpenGLBuffer.h" #include -namespace StarStudio { +namespace StarEngine { ///////////////////////////////////////////////////////////////////////////// // VertexBuffer ///////////////////////////////////////////////////////////// @@ -11,7 +11,7 @@ namespace StarStudio { OpenGLVertexBuffer::OpenGLVertexBuffer(uint32_t size) { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); glCreateBuffers(1, &m_RendererID); glBindBuffer(GL_ARRAY_BUFFER, m_RendererID); glBufferData(GL_ARRAY_BUFFER, size, nullptr, GL_DYNAMIC_DRAW); @@ -19,7 +19,7 @@ namespace StarStudio { OpenGLVertexBuffer::OpenGLVertexBuffer(float* vertices, uint32_t size) { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); glCreateBuffers(1, &m_RendererID); glBindBuffer(GL_ARRAY_BUFFER, m_RendererID); @@ -28,21 +28,21 @@ namespace StarStudio { OpenGLVertexBuffer::~OpenGLVertexBuffer() { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); glDeleteBuffers(1, &m_RendererID); } void OpenGLVertexBuffer::Bind() const { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); glBindBuffer(GL_ARRAY_BUFFER, m_RendererID); } void OpenGLVertexBuffer::Unbind() const { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); glBindBuffer(GL_ARRAY_BUFFER, 0); } @@ -60,7 +60,7 @@ namespace StarStudio { OpenGLIndexBuffer::OpenGLIndexBuffer(uint32_t* indices, uint32_t count) : m_Count(count) { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); glCreateBuffers(1, &m_RendererID); @@ -72,21 +72,21 @@ namespace StarStudio { OpenGLIndexBuffer::~OpenGLIndexBuffer() { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); glDeleteBuffers(1, &m_RendererID); } void OpenGLIndexBuffer::Bind() const { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_RendererID); } void OpenGLIndexBuffer::Unbind() const { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); } diff --git a/StarEngine/src/Platform/OpenGL/OpenGLBuffer.h b/StarEngine/src/Platform/OpenGL/OpenGLBuffer.h index a7d37a0f..a9491749 100644 --- a/StarEngine/src/Platform/OpenGL/OpenGLBuffer.h +++ b/StarEngine/src/Platform/OpenGL/OpenGLBuffer.h @@ -1,8 +1,8 @@ #pragma once -#include "StarStudio/Renderer/Buffer.h" +#include "StarEngine/Renderer/Buffer.h" -namespace StarStudio { +namespace StarEngine { class OpenGLVertexBuffer : public VertexBuffer { diff --git a/StarEngine/src/Platform/OpenGL/OpenGLContext.cpp b/StarEngine/src/Platform/OpenGL/OpenGLContext.cpp index ca15db85..830155c1 100644 --- a/StarEngine/src/Platform/OpenGL/OpenGLContext.cpp +++ b/StarEngine/src/Platform/OpenGL/OpenGLContext.cpp @@ -1,42 +1,42 @@ -#include "sspch.h" +#include "sepch.h" #include "Platform/OpenGL/OpenGLContext.h" #include #include -namespace StarStudio { +namespace StarEngine { OpenGLContext::OpenGLContext(GLFWwindow* windowHandle) : m_WindowHandle(windowHandle) { - SS_CORE_ASSERT(windowHandle, "Window handle is null!") + SE_CORE_ASSERT(windowHandle, "Window handle is null!") } void OpenGLContext::Init() { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); glfwMakeContextCurrent(m_WindowHandle); int status = gladLoadGLLoader((GLADloadproc)glfwGetProcAddress); - SS_CORE_ASSERT(status, "Failed to initialize Glad!"); + SE_CORE_ASSERT(status, "Failed to initialize Glad!"); - SS_CORE_INFO("OpenGL Info:"); - SS_CORE_INFO(" Vendor: {0}", (const char*)glGetString(GL_VENDOR)); - SS_CORE_INFO(" Renderer: {0}", (const char*)glGetString(GL_RENDERER)); - SS_CORE_INFO(" Version: {0}", (const char*)glGetString(GL_VERSION)); + SE_CORE_INFO("OpenGL Info:"); + SE_CORE_INFO(" Vendor: {0}", (const char*)glGetString(GL_VENDOR)); + SE_CORE_INFO(" Renderer: {0}", (const char*)glGetString(GL_RENDERER)); + SE_CORE_INFO(" Version: {0}", (const char*)glGetString(GL_VERSION)); #ifdef SS_ENABLE_ASSERTS int versionMajor; int versionMinor; glGetIntegerv(GL_MAJOR_VERSION, &versionMajor); glGetIntegerv(GL_MINOR_VERSION, &versionMinor); - SS_CORE_ASSERT(versionMajor > 4 || (versionMajor == 4 && versionMinor >= 5), "StarStudio requires at least OpenGL version 4.5!"); + SE_CORE_ASSERT(versionMajor > 4 || (versionMajor == 4 && versionMinor >= 5), "StarStudio requires at least OpenGL version 4.5!"); #endif } void OpenGLContext::SwapBuffers() { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); glfwSwapBuffers(m_WindowHandle); } diff --git a/StarEngine/src/Platform/OpenGL/OpenGLContext.h b/StarEngine/src/Platform/OpenGL/OpenGLContext.h index 6b49e7ec..8c084727 100644 --- a/StarEngine/src/Platform/OpenGL/OpenGLContext.h +++ b/StarEngine/src/Platform/OpenGL/OpenGLContext.h @@ -1,10 +1,10 @@ #pragma once -#include "StarStudio/Renderer/GraphicsContext.h" +#include "StarEngine/Renderer/GraphicsContext.h" struct GLFWwindow; -namespace StarStudio { +namespace StarEngine { class OpenGLContext : public GraphicsContext { diff --git a/StarEngine/src/Platform/OpenGL/OpenGLRendererAPI.cpp b/StarEngine/src/Platform/OpenGL/OpenGLRendererAPI.cpp index b51b80fe..b29a9f73 100644 --- a/StarEngine/src/Platform/OpenGL/OpenGLRendererAPI.cpp +++ b/StarEngine/src/Platform/OpenGL/OpenGLRendererAPI.cpp @@ -1,9 +1,9 @@ -#include "sspch.h" +#include "sepch.h" #include "Platform/OpenGL/OpenGLRendererAPI.h" #include -namespace StarStudio +namespace StarEngine { void OpenGLMessageCallback( unsigned source, @@ -22,14 +22,14 @@ namespace StarStudio case GL_DEBUG_SEVERITY_NOTIFICATION: SS_CORE_TRACE(message); return; } - SS_CORE_ASSERT(false, "Unknown severity level!"); + SE_CORE_ASSERT(false, "Unknown severity level!"); } void OpenGLRendererAPI::Init() { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); - #ifdef SS_DEBUG + #ifdef SE_DEBUG glEnable(GL_DEBUG_OUTPUT); glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS); glDebugMessageCallback(OpenGLMessageCallback, nullptr); diff --git a/StarEngine/src/Platform/OpenGL/OpenGLRendererAPI.h b/StarEngine/src/Platform/OpenGL/OpenGLRendererAPI.h index 00dd3783..f8f9ceb1 100644 --- a/StarEngine/src/Platform/OpenGL/OpenGLRendererAPI.h +++ b/StarEngine/src/Platform/OpenGL/OpenGLRendererAPI.h @@ -1,8 +1,8 @@ #pragma once -#include "StarStudio/Renderer/RendererAPI.h" +#include "StarEngine/Renderer/RendererAPI.h" -namespace StarStudio +namespace StarEngine { class OpenGLRendererAPI : public RendererAPI { diff --git a/StarEngine/src/Platform/OpenGL/OpenGLShader.cpp b/StarEngine/src/Platform/OpenGL/OpenGLShader.cpp index 9fa48517..82910170 100644 --- a/StarEngine/src/Platform/OpenGL/OpenGLShader.cpp +++ b/StarEngine/src/Platform/OpenGL/OpenGLShader.cpp @@ -1,11 +1,11 @@ -#include "sspch.h" +#include "sepch.h" #include "Platform/OpenGL/OpenGLShader.h" #include #include #include -namespace StarStudio { +namespace StarEngine { static GLenum ShaderTypeFromString(const std::string& type) { @@ -14,13 +14,13 @@ namespace StarStudio { if (type == "fragment" || type == "pixel") return GL_FRAGMENT_SHADER; - SS_CORE_ASSERT(false, "Unknown shader type!"); + SE_CORE_ASSERT(false, "Unknown shader type!"); return 0; } OpenGLShader::OpenGLShader(const std::string& filepath) { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); std::string source = ReadFile(filepath); auto shaderSources = PreProcess(source); @@ -37,7 +37,7 @@ namespace StarStudio { OpenGLShader::OpenGLShader(const std::string& name, const std::string& vertexSrc, const std::string& fragmentSrc) : m_Name(name) { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); std::unordered_map sources; sources[GL_VERTEX_SHADER] = vertexSrc; @@ -47,14 +47,14 @@ namespace StarStudio { OpenGLShader::~OpenGLShader() { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); glDeleteProgram(m_RendererID); } std::string OpenGLShader::ReadFile(const std::string& filepath) { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); std::string result; std::ifstream in(filepath, std::ios::in | std::ios::binary); @@ -71,12 +71,12 @@ namespace StarStudio { } else { - SS_CORE_ERROR("Could not read from file '{0}'", filepath); + SE_CORE_ERROR("Could not read from file '{0}'", filepath); } } else { - SS_CORE_ERROR("Could not open file '{0}'", filepath); + SE_CORE_ERROR("Could not open file '{0}'", filepath); } return result; @@ -84,7 +84,7 @@ namespace StarStudio { std::unordered_map OpenGLShader::PreProcess(const std::string& source) { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); std::unordered_map shaderSources; @@ -94,13 +94,13 @@ namespace StarStudio { while (pos != std::string::npos) { size_t eol = source.find_first_of("\r\n", pos); //End of shader type declaration line - SS_CORE_ASSERT(eol != std::string::npos, "Syntax error"); + SE_CORE_ASSERT(eol != std::string::npos, "Syntax error"); size_t begin = pos + typeTokenLength + 1; //Start of shader type name (after "#type " keyword) std::string type = source.substr(begin, eol - begin); - SS_CORE_ASSERT(ShaderTypeFromString(type), "Invalid shader type specified"); + SE_CORE_ASSERT(ShaderTypeFromString(type), "Invalid shader type specified"); size_t nextLinePos = source.find_first_not_of("\r\n", eol); //Start of shader code after shader type declaration line - SS_CORE_ASSERT(nextLinePos != std::string::npos, "Syntax error"); + SE_CORE_ASSERT(nextLinePos != std::string::npos, "Syntax error"); pos = source.find(typeToken, nextLinePos); //Start of next shader type declaration line shaderSources[ShaderTypeFromString(type)] = (pos == std::string::npos) ? source.substr(nextLinePos) : source.substr(nextLinePos, pos - nextLinePos); @@ -111,10 +111,10 @@ namespace StarStudio { void OpenGLShader::Compile(const std::unordered_map& shaderSources) { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); GLuint program = glCreateProgram(); - SS_CORE_ASSERT(shaderSources.size() <= 2, "We only support 2 shaders for now"); + SE_CORE_ASSERT(shaderSources.size() <= 2, "We only support 2 shaders for now"); std::array glShaderIDs; int glShaderIDIndex = 0; for (auto& kv : shaderSources) @@ -141,8 +141,8 @@ namespace StarStudio { glDeleteShader(shader); - SS_CORE_ERROR("{0}", infoLog.data()); - SS_CORE_ASSERT(false, "Shader compilation failure!"); + SE_CORE_ERROR("{0}", infoLog.data()); + SE_CORE_ASSERT(false, "Shader compilation failure!"); break; } @@ -169,8 +169,8 @@ namespace StarStudio { for (auto id : glShaderIDs) glDeleteShader(id); - SS_CORE_ERROR("{0}", infoLog.data()); - SS_CORE_ASSERT(false, "Shader link failure!"); + SE_CORE_ERROR("{0}", infoLog.data()); + SE_CORE_ASSERT(false, "Shader link failure!"); return; } @@ -184,21 +184,21 @@ namespace StarStudio { void OpenGLShader::Bind() const { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); glUseProgram(m_RendererID); } void OpenGLShader::Unbind() const { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); glUseProgram(0); } void OpenGLShader::SetInt(const std::string& name, int value) { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); UploadUniformInt(name, value); } @@ -210,27 +210,27 @@ namespace StarStudio { void OpenGLShader::SetFloat(const std::string& name, float value) { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); UploadUniformFloat(name, value); } void OpenGLShader::SetFloat3(const std::string& name, const glm::vec3& value) { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); UploadUniformFloat3(name, value); } void OpenGLShader::SetFloat4(const std::string& name, const glm::vec4& value) { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); UploadUniformFloat4(name, value); } void OpenGLShader::SetMat4(const std::string& name, const glm::mat4& value) { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); UploadUniformMat4(name, value); } diff --git a/StarEngine/src/Platform/OpenGL/OpenGLShader.h b/StarEngine/src/Platform/OpenGL/OpenGLShader.h index d5210ec3..e277d391 100644 --- a/StarEngine/src/Platform/OpenGL/OpenGLShader.h +++ b/StarEngine/src/Platform/OpenGL/OpenGLShader.h @@ -1,14 +1,14 @@ #pragma once -#include "StarStudio/Renderer/Shader.h" +#include "StaStarEnginerStudio/Renderer/Shader.h" #include //TODO REMOVE THIS typedef unsigned int GLenum; -namespace StarStudio { +namespace StarEngine { - class OpenGLShader : public StarStudio::Shader + class OpenGLShader : public StarEngine::Shader { public: diff --git a/StarEngine/src/Platform/OpenGL/OpenGLTexture.cpp b/StarEngine/src/Platform/OpenGL/OpenGLTexture.cpp index 8036d9a2..c1b800f8 100644 --- a/StarEngine/src/Platform/OpenGL/OpenGLTexture.cpp +++ b/StarEngine/src/Platform/OpenGL/OpenGLTexture.cpp @@ -1,14 +1,14 @@ -#include "sspch.h" +#include "sepch.h" #include "Platform/OpenGL/OpenGLTexture.h" #include -namespace StarStudio { +namespace StarEngine { OpenGLTexture2D::OpenGLTexture2D(uint32_t width, uint32_t height) : m_Width(width), m_Height(height) { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); m_InternalFormat = GL_RGBA8; m_DataFormat = GL_RGBA; @@ -26,7 +26,7 @@ namespace StarStudio { OpenGLTexture2D::OpenGLTexture2D(const std::string& path) : m_Path(path) { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); int width, height, channels; @@ -37,7 +37,7 @@ namespace StarStudio { data = stbi_load(path.c_str(), &width, &height, &channels, 0); } - SS_CORE_ASSERT(data, "Failed to load image!"); + SE_CORE_ASSERT(data, "Failed to load image!"); m_Width = width; m_Height = height; @@ -57,7 +57,7 @@ namespace StarStudio { m_InternalFormat = internalFormat; m_DataFormat = dataFormat; - SS_CORE_ASSERT(internalFormat & dataFormat, "Format not supported!"); + SE_CORE_ASSERT(internalFormat & dataFormat, "Format not supported!"); glCreateTextures(GL_TEXTURE_2D, 1, &m_RendererID); @@ -76,7 +76,7 @@ namespace StarStudio { void OpenGLTexture2D::SetData(void* data, uint32_t size) { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); uint32_t bpp = m_DataFormat == GL_RGBA ? 4 : 3; SS_CORE_ASSERT(size == m_Width * m_Height * bpp, "Data must be entire texture!"); @@ -85,14 +85,14 @@ namespace StarStudio { OpenGLTexture2D::~OpenGLTexture2D() { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); glDeleteTextures(1, &m_RendererID); } void OpenGLTexture2D::Bind(uint32_t slot) const { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); glBindTextureUnit(slot, m_RendererID); } diff --git a/StarEngine/src/Platform/OpenGL/OpenGLTexture.h b/StarEngine/src/Platform/OpenGL/OpenGLTexture.h index dbcc51b8..ca831930 100644 --- a/StarEngine/src/Platform/OpenGL/OpenGLTexture.h +++ b/StarEngine/src/Platform/OpenGL/OpenGLTexture.h @@ -1,10 +1,10 @@ #pragma once -#include "StarStudio/Renderer/Texture.h" +#include "StarEngine/Renderer/Texture.h" #include -namespace StarStudio { +namespace StarEngine { class OpenGLTexture2D : public Texture2D { diff --git a/StarEngine/src/Platform/OpenGL/OpenGLVertexArray.cpp b/StarEngine/src/Platform/OpenGL/OpenGLVertexArray.cpp index 9a5c34db..4c69e275 100644 --- a/StarEngine/src/Platform/OpenGL/OpenGLVertexArray.cpp +++ b/StarEngine/src/Platform/OpenGL/OpenGLVertexArray.cpp @@ -1,10 +1,10 @@ -#include "sspch.h" +#include "sepch.h" #include "Platform/OpenGL/OpenGLVertexArray.h" #include -namespace StarStudio { +namespace StarEngine { static GLenum ShaderDataTypeToOpenGLBaseType(ShaderDataType type) { @@ -22,38 +22,38 @@ namespace StarStudio { case ShaderDataType::Bool: return GL_BOOL; } - SS_CORE_ASSERT(false, "Unknown ShaderDataType!"); + SE_CORE_ASSERT(false, "Unknown ShaderDataType!"); return 0; } OpenGLVertexArray::OpenGLVertexArray() { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); glCreateVertexArrays(1, &m_RendererID); } OpenGLVertexArray::~OpenGLVertexArray() { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); glDeleteVertexArrays(1, &m_RendererID); } void OpenGLVertexArray::Bind() const { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); glBindVertexArray(m_RendererID); } void OpenGLVertexArray::Unbind() const { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); glBindVertexArray(0); } void OpenGLVertexArray::AddVertexBuffer(const Ref& vertexBuffer) { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); - SS_CORE_ASSERT(vertexBuffer->GetLayout().GetElements().size(), "Vertex Buffer has no layout!"); + SE_CORE_ASSERT(vertexBuffer->GetLayout().GetElements().size(), "Vertex Buffer has no layout!"); glBindVertexArray(m_RendererID); vertexBuffer->Bind(); @@ -103,7 +103,7 @@ namespace StarStudio { break; } default: - SS_CORE_ASSERT(false, "Unknown ShaderDataType!"); + SE_CORE_ASSERT(false, "Unknown ShaderDataType!"); } } @@ -111,7 +111,7 @@ namespace StarStudio { } void OpenGLVertexArray::SetIndexBuffer(const Ref& indexBuffer) { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); glBindVertexArray(m_RendererID); indexBuffer->Bind(); diff --git a/StarEngine/src/Platform/OpenGL/OpenGLVertexArray.h b/StarEngine/src/Platform/OpenGL/OpenGLVertexArray.h index 77df7467..d6c81b1c 100644 --- a/StarEngine/src/Platform/OpenGL/OpenGLVertexArray.h +++ b/StarEngine/src/Platform/OpenGL/OpenGLVertexArray.h @@ -1,8 +1,8 @@ #pragma once -#include "StarStudio/Renderer/VertexArray.h" +#include "StarEngine/Renderer/VertexArray.h" -namespace StarStudio { +namespace StarEngine { class OpenGLVertexArray : public VertexArray { From 66403d9cb9201010938f30d478ad83122f241404 Mon Sep 17 00:00:00 2001 From: sheazy_wi Date: Thu, 13 Feb 2025 18:37:29 +0000 Subject: [PATCH 11/27] forgot to change the StarStudio namespace to StarEngine --- StarEngine/src/StarEngine/Renderer/RenderCommand.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/StarEngine/src/StarEngine/Renderer/RenderCommand.h b/StarEngine/src/StarEngine/Renderer/RenderCommand.h index f6958b1a..26ad7f95 100644 --- a/StarEngine/src/StarEngine/Renderer/RenderCommand.h +++ b/StarEngine/src/StarEngine/Renderer/RenderCommand.h @@ -2,7 +2,7 @@ #include "StarEngine/Renderer/RendererAPI.h" -namespace StarStudio +namespace StarEngine { class RenderCommand { From 9e1323faeec81b036a6d3c35bf04de4456cac34c Mon Sep 17 00:00:00 2001 From: sheazy_wi Date: Thu, 13 Feb 2025 18:41:02 +0000 Subject: [PATCH 12/27] and again --- StarEngine/src/Platform/OpenGL/OpenGLShader.h | 2 +- .../src/Platform/Windows/WindowsInput.cpp | 6 +-- .../src/Platform/Windows/WindowsInput.h | 4 +- .../src/Platform/Windows/WindowsWindow.cpp | 38 +++++++++---------- .../src/Platform/Windows/WindowsWindow.h | 6 +-- 5 files changed, 28 insertions(+), 28 deletions(-) diff --git a/StarEngine/src/Platform/OpenGL/OpenGLShader.h b/StarEngine/src/Platform/OpenGL/OpenGLShader.h index e277d391..b4183fb1 100644 --- a/StarEngine/src/Platform/OpenGL/OpenGLShader.h +++ b/StarEngine/src/Platform/OpenGL/OpenGLShader.h @@ -1,6 +1,6 @@ #pragma once -#include "StaStarEnginerStudio/Renderer/Shader.h" +#include "StarEngine/Renderer/Shader.h" #include //TODO REMOVE THIS diff --git a/StarEngine/src/Platform/Windows/WindowsInput.cpp b/StarEngine/src/Platform/Windows/WindowsInput.cpp index 293e135b..60129164 100644 --- a/StarEngine/src/Platform/Windows/WindowsInput.cpp +++ b/StarEngine/src/Platform/Windows/WindowsInput.cpp @@ -1,10 +1,10 @@ -#include "sspch.h" +#include "sepch.h" #include "Platform/Windows/WindowsInput.h" -#include "StarStudio/Core/Application.h" +#include "StarEngine/Core/Application.h" #include -namespace StarStudio { +namespace StarEngine { bool WindowsInput::IsKeyPressedImpl(KeyCode key) { diff --git a/StarEngine/src/Platform/Windows/WindowsInput.h b/StarEngine/src/Platform/Windows/WindowsInput.h index e55b9363..9be9037d 100644 --- a/StarEngine/src/Platform/Windows/WindowsInput.h +++ b/StarEngine/src/Platform/Windows/WindowsInput.h @@ -1,8 +1,8 @@ #pragma once -#include "StarStudio/Core/Input.h" +#include "StarEngine/Core/Input.h" -namespace StarStudio { +namespace StarEngine { class WindowsInput : public Input { protected: diff --git a/StarEngine/src/Platform/Windows/WindowsWindow.cpp b/StarEngine/src/Platform/Windows/WindowsWindow.cpp index d18c825d..839b550c 100644 --- a/StarEngine/src/Platform/Windows/WindowsWindow.cpp +++ b/StarEngine/src/Platform/Windows/WindowsWindow.cpp @@ -1,61 +1,61 @@ -#include "sspch.h" +#include "sepch.h" #include "Platform/Windows/WindowsWindow.h" -#include "StarStudio/Core/Input.h" +#include "StarEngine/Core/Input.h" -#include "StarStudio/Events/ApplicationEvent.h" -#include "StarStudio/Events/MouseEvent.h" -#include "StarStudio/Events/KeyEvent.h" +#include "StarEngine/Events/ApplicationEvent.h" +#include "StarEngine/Events/MouseEvent.h" +#include "StarEngine/Events/KeyEvent.h" -#include "StarStudio/Renderer/Renderer.h" +#include "StarEngine/Renderer/Renderer.h" #include "Platform/OpenGL/OpenGLContext.h" -namespace StarStudio { +namespace StarEngine { static uint8_t s_GLFWWindowCount = 0; static void GLFWErrorCallback(int error, const char* description) { - SS_CORE_ERROR("GLFW Error ({0}): {1}", error, description); + SE_CORE_ERROR("GLFW Error ({0}): {1}", error, description); } WindowsWindow::WindowsWindow(const WindowProps& props) { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); Init(props); } WindowsWindow::~WindowsWindow() { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); Shutdown(); } void WindowsWindow::Init(const WindowProps& props) { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); m_Data.Title = props.Title; m_Data.Width = props.Width; m_Data.Height = props.Height; - SS_CORE_INFO("Creating window {0} ({1}, {2})", props.Title, props.Width, props.Height); + SE_CORE_INFO("Creating window {0} ({1}, {2})", props.Title, props.Width, props.Height); if (s_GLFWWindowCount == 0) { - SS_PROFILE_SCOPE("glfwInit"); + SE_PROFILE_SCOPE("glfwInit"); int success = glfwInit(); - SS_CORE_ASSERT(success, "Could not initialize GLFW!"); + SE_CORE_ASSERT(success, "Could not initialize GLFW!"); glfwSetErrorCallback(GLFWErrorCallback); } { - SS_PROFILE_SCOPE("glfwCreateWindow"); + SE_PROFILE_SCOPE("glfwCreateWindow"); - #if defined(SS_DEBUG) + #if defined(SE_DEBUG) if (Renderer::GetAPI() == RendererAPI::API::OpenGL) glfwWindowHint(GLFW_OPENGL_DEBUG_CONTEXT, GLFW_TRUE); #endif @@ -163,7 +163,7 @@ namespace StarStudio { void WindowsWindow::Shutdown() { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); glfwDestroyWindow(m_Window); --s_GLFWWindowCount; @@ -176,7 +176,7 @@ namespace StarStudio { void WindowsWindow::OnUpdate() { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); glfwPollEvents(); m_Context->SwapBuffers(); @@ -184,7 +184,7 @@ namespace StarStudio { void WindowsWindow::SetVSync(bool enabled) { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); if (enabled) glfwSwapInterval(1); diff --git a/StarEngine/src/Platform/Windows/WindowsWindow.h b/StarEngine/src/Platform/Windows/WindowsWindow.h index cdb75228..455677f5 100644 --- a/StarEngine/src/Platform/Windows/WindowsWindow.h +++ b/StarEngine/src/Platform/Windows/WindowsWindow.h @@ -1,11 +1,11 @@ #pragma once -#include "StarStudio/Core/Window.h" -#include "StarStudio/Renderer/GraphicsContext.h" +#include "StarEngine/Core/Window.h" +#include "StarEngine/Renderer/GraphicsContext.h" #include -namespace StarStudio { +namespace StarEngine { class WindowsWindow : public Window { From da644b0aeca6db4845a6d2ea6ecd72db53432994 Mon Sep 17 00:00:00 2001 From: sheazy_wi Date: Thu, 13 Feb 2025 18:43:04 +0000 Subject: [PATCH 13/27] pch header --- StarEngine/src/StarEngine/Core/Application.cpp | 2 +- StarEngine/src/StarEngine/Core/Layer.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/StarEngine/src/StarEngine/Core/Application.cpp b/StarEngine/src/StarEngine/Core/Application.cpp index 3b354929..e2e3b0b3 100644 --- a/StarEngine/src/StarEngine/Core/Application.cpp +++ b/StarEngine/src/StarEngine/Core/Application.cpp @@ -1,4 +1,4 @@ -#include "sspch.h" +#include "sepch.h" #include "StarEngine/Core/Application.h" #include "StarEngine/Core/Log.h" diff --git a/StarEngine/src/StarEngine/Core/Layer.cpp b/StarEngine/src/StarEngine/Core/Layer.cpp index 6e1e730b..728df3fa 100644 --- a/StarEngine/src/StarEngine/Core/Layer.cpp +++ b/StarEngine/src/StarEngine/Core/Layer.cpp @@ -1,4 +1,4 @@ -#include "sspch.h" +#include "sepch.h" #include "StarEngine/Core/Layer.h" namespace StarEngine { From 5bfb8dcc82b8a501d5eda675b1bdab71bde20149 Mon Sep 17 00:00:00 2001 From: sheazy_wi Date: Thu, 13 Feb 2025 18:44:04 +0000 Subject: [PATCH 14/27] forgot other stuff --- StarEngine/src/Platform/OpenGL/OpenGLRendererAPI.cpp | 8 ++++---- StarEngine/src/Platform/OpenGL/OpenGLTexture.cpp | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/StarEngine/src/Platform/OpenGL/OpenGLRendererAPI.cpp b/StarEngine/src/Platform/OpenGL/OpenGLRendererAPI.cpp index b29a9f73..36411875 100644 --- a/StarEngine/src/Platform/OpenGL/OpenGLRendererAPI.cpp +++ b/StarEngine/src/Platform/OpenGL/OpenGLRendererAPI.cpp @@ -16,10 +16,10 @@ namespace StarEngine { switch (severity) { - case GL_DEBUG_SEVERITY_HIGH: SS_CORE_CRITICAL(message); return; - case GL_DEBUG_SEVERITY_MEDIUM: SS_CORE_ERROR(message); return; - case GL_DEBUG_SEVERITY_LOW: SS_CORE_WARN(message); return; - case GL_DEBUG_SEVERITY_NOTIFICATION: SS_CORE_TRACE(message); return; + case GL_DEBUG_SEVERITY_HIGH: SE_CORE_CRITICAL(message); return; + case GL_DEBUG_SEVERITY_MEDIUM: SE_CORE_ERROR(message); return; + case GL_DEBUG_SEVERITY_LOW: SE_CORE_WARN(message); return; + case GL_DEBUG_SEVERITY_NOTIFICATION: SE_CORE_TRACE(message); return; } SE_CORE_ASSERT(false, "Unknown severity level!"); diff --git a/StarEngine/src/Platform/OpenGL/OpenGLTexture.cpp b/StarEngine/src/Platform/OpenGL/OpenGLTexture.cpp index c1b800f8..96da34c6 100644 --- a/StarEngine/src/Platform/OpenGL/OpenGLTexture.cpp +++ b/StarEngine/src/Platform/OpenGL/OpenGLTexture.cpp @@ -33,7 +33,7 @@ namespace StarEngine { stbi_set_flip_vertically_on_load(1); stbi_uc* data = nullptr; { - SS_PROFILE_SCOPE("stbi_load - OpenGLTexture2D::OpenGLTexture2D(const std:string&)"); + SE_PROFILE_SCOPE("stbi_load - OpenGLTexture2D::OpenGLTexture2D(const std:string&)"); data = stbi_load(path.c_str(), &width, &height, &channels, 0); } @@ -79,7 +79,7 @@ namespace StarEngine { SE_PROFILE_FUNCTION(); uint32_t bpp = m_DataFormat == GL_RGBA ? 4 : 3; - SS_CORE_ASSERT(size == m_Width * m_Height * bpp, "Data must be entire texture!"); + SE_CORE_ASSERT(size == m_Width * m_Height * bpp, "Data must be entire texture!"); glTextureSubImage2D(m_RendererID, 0, 0, 0, m_Width, m_Height, m_DataFormat, GL_UNSIGNED_BYTE, data); } From 9a3f1898c8d81bf65ead173fb222a90e1fdbe909 Mon Sep 17 00:00:00 2001 From: sheazy_wi Date: Thu, 13 Feb 2025 18:48:39 +0000 Subject: [PATCH 15/27] updated modules --- .gitmodules | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/.gitmodules b/.gitmodules index 89897fe8..5af9936f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,12 +1,16 @@ [submodule "StarEngine/vendor/spdlog"] path = StarEngine/vendor/spdlog - url = https://github.com/gabime/spdlog/ -[submodule "StarEngine/vendor/glfw"] - path = StarEngine/vendor/glfw - url = https://github.com/TheCherno/glfw + url = https://github.com/gabime/spdlog.git + branch = v1.x +[submodule "StarEngine/vendor/GLFW"] + path = StarEngine/vendor/GLFW + url = https://github.com/TheCherno/glfw.git + branch = master [submodule "StarEngine/vendor/imgui"] path = StarEngine/vendor/imgui - url = https://github.com/starbounded-dev/imgui/ + url = https://github.com/starbounded-dev/imgui.git + branch = docking [submodule "StarEngine/vendor/glm"] path = StarEngine/vendor/glm - url = https://github.com/g-truc/glm/ + url = https://github.com/g-truc/glm.git + branch = master \ No newline at end of file From 30cb91106521d3b087aba791555916a2261b5b2a Mon Sep 17 00:00:00 2001 From: sheazy_wi Date: Thu, 13 Feb 2025 18:50:07 +0000 Subject: [PATCH 16/27] backroll see if works --- .gitmodules | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.gitmodules b/.gitmodules index 5af9936f..6de3f5f3 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,16 +1,16 @@ [submodule "StarEngine/vendor/spdlog"] path = StarEngine/vendor/spdlog - url = https://github.com/gabime/spdlog.git + url = https://github.com/gabime/spdlog branch = v1.x [submodule "StarEngine/vendor/GLFW"] path = StarEngine/vendor/GLFW - url = https://github.com/TheCherno/glfw.git + url = https://github.com/TheCherno/glfw branch = master [submodule "StarEngine/vendor/imgui"] path = StarEngine/vendor/imgui - url = https://github.com/starbounded-dev/imgui.git + url = https://github.com/starbounded-dev/imgui branch = docking [submodule "StarEngine/vendor/glm"] path = StarEngine/vendor/glm - url = https://github.com/g-truc/glm.git + url = https://github.com/g-truc/glm branch = master \ No newline at end of file From adc6a3dca79cca7befdfe5109fd368e115fcc6e9 Mon Sep 17 00:00:00 2001 From: sheazy_wi Date: Thu, 13 Feb 2025 19:01:44 +0000 Subject: [PATCH 17/27] Removed all submodules again, I hate git --- .gitmodules | 16 ---------------- StarEngine/vendor/glfw | 1 - StarEngine/vendor/glm | 1 - StarEngine/vendor/imgui | 1 - StarEngine/vendor/spdlog | 1 - 5 files changed, 20 deletions(-) delete mode 100644 .gitmodules delete mode 160000 StarEngine/vendor/glfw delete mode 160000 StarEngine/vendor/glm delete mode 160000 StarEngine/vendor/imgui delete mode 160000 StarEngine/vendor/spdlog diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index 6de3f5f3..00000000 --- a/.gitmodules +++ /dev/null @@ -1,16 +0,0 @@ -[submodule "StarEngine/vendor/spdlog"] - path = StarEngine/vendor/spdlog - url = https://github.com/gabime/spdlog - branch = v1.x -[submodule "StarEngine/vendor/GLFW"] - path = StarEngine/vendor/GLFW - url = https://github.com/TheCherno/glfw - branch = master -[submodule "StarEngine/vendor/imgui"] - path = StarEngine/vendor/imgui - url = https://github.com/starbounded-dev/imgui - branch = docking -[submodule "StarEngine/vendor/glm"] - path = StarEngine/vendor/glm - url = https://github.com/g-truc/glm - branch = master \ No newline at end of file diff --git a/StarEngine/vendor/glfw b/StarEngine/vendor/glfw deleted file mode 160000 index 026a148d..00000000 --- a/StarEngine/vendor/glfw +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 026a148d7dd78d597de380c4e77ca0869f0ceaab diff --git a/StarEngine/vendor/glm b/StarEngine/vendor/glm deleted file mode 160000 index 2d4c4b4d..00000000 --- a/StarEngine/vendor/glm +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 2d4c4b4dd31fde06cfffad7915c2b3006402322f diff --git a/StarEngine/vendor/imgui b/StarEngine/vendor/imgui deleted file mode 160000 index 53a2f323..00000000 --- a/StarEngine/vendor/imgui +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 53a2f323bb2202a05e7ec1e67ded8d51cde8fe85 diff --git a/StarEngine/vendor/spdlog b/StarEngine/vendor/spdlog deleted file mode 160000 index 3335c380..00000000 --- a/StarEngine/vendor/spdlog +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 3335c380a08c5e0f5117a66622df6afdb3d74959 From e9ba576306dc66c7fa71769a0b91640234654eba Mon Sep 17 00:00:00 2001 From: sheazy_wi Date: Thu, 13 Feb 2025 19:05:30 +0000 Subject: [PATCH 18/27] normally fixed everything(submodules) --- .gitmodules | 15 +++++++++++++++ StarEngine/vendor/glfw | 1 + StarEngine/vendor/glm | 1 + StarEngine/vendor/imgui | 1 + StarEngine/vendor/spdlog | 1 + 5 files changed, 19 insertions(+) create mode 100644 .gitmodules create mode 160000 StarEngine/vendor/glfw create mode 160000 StarEngine/vendor/glm create mode 160000 StarEngine/vendor/imgui create mode 160000 StarEngine/vendor/spdlog diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..7c8172f5 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,15 @@ +[submodule "StarEngine/vendor/glfw"] + path = StarEngine/vendor/glfw + url = https://github.com/TheCherno/GLFW + branch = master +[submodule "StarEngine/vendor/spdlog"] + path = StarEngine/vendor/spdlog + url = https://github.com/gabime/spdlog +[submodule "StarEngine/vendor/imgui"] + path = StarEngine/vendor/imgui + url = https://github.com/starbounded-dev/imgui + branch = docking +[submodule "StarEngine/vendor/glm"] + path = StarEngine/vendor/glm + url = https://github.com/g-truc/glm + branch = master diff --git a/StarEngine/vendor/glfw b/StarEngine/vendor/glfw new file mode 160000 index 00000000..026a148d --- /dev/null +++ b/StarEngine/vendor/glfw @@ -0,0 +1 @@ +Subproject commit 026a148d7dd78d597de380c4e77ca0869f0ceaab diff --git a/StarEngine/vendor/glm b/StarEngine/vendor/glm new file mode 160000 index 00000000..2d4c4b4d --- /dev/null +++ b/StarEngine/vendor/glm @@ -0,0 +1 @@ +Subproject commit 2d4c4b4dd31fde06cfffad7915c2b3006402322f diff --git a/StarEngine/vendor/imgui b/StarEngine/vendor/imgui new file mode 160000 index 00000000..95c41117 --- /dev/null +++ b/StarEngine/vendor/imgui @@ -0,0 +1 @@ +Subproject commit 95c41117833039b44060973c33d2fc61f13ea284 diff --git a/StarEngine/vendor/spdlog b/StarEngine/vendor/spdlog new file mode 160000 index 00000000..3335c380 --- /dev/null +++ b/StarEngine/vendor/spdlog @@ -0,0 +1 @@ +Subproject commit 3335c380a08c5e0f5117a66622df6afdb3d74959 From 4cd5e59d286b1ea040aef01bacec147f7c64db74 Mon Sep 17 00:00:00 2001 From: sheazy_wi Date: Thu, 13 Feb 2025 19:13:38 +0000 Subject: [PATCH 19/27] switched things up --- .gitmodules | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitmodules b/.gitmodules index 7c8172f5..5a0930d7 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,6 @@ -[submodule "StarEngine/vendor/glfw"] - path = StarEngine/vendor/glfw - url = https://github.com/TheCherno/GLFW +[submodule "StarEngine/vendor/GLFW"] + path = StarEngine/vendor/GLFW + url = https://github.com/TheCherno/glfw branch = master [submodule "StarEngine/vendor/spdlog"] path = StarEngine/vendor/spdlog From f0773463329d36b4314a3d7fc7824c57e86976c9 Mon Sep 17 00:00:00 2001 From: sheazy_wi Date: Thu, 13 Feb 2025 19:16:16 +0000 Subject: [PATCH 20/27] should be fixed now --- StarEngine/vendor/GLFW | 1 + 1 file changed, 1 insertion(+) create mode 160000 StarEngine/vendor/GLFW diff --git a/StarEngine/vendor/GLFW b/StarEngine/vendor/GLFW new file mode 160000 index 00000000..026a148d --- /dev/null +++ b/StarEngine/vendor/GLFW @@ -0,0 +1 @@ +Subproject commit 026a148d7dd78d597de380c4e77ca0869f0ceaab From f9defd305d6d749a01cce30644c43ce52fdb0205 Mon Sep 17 00:00:00 2001 From: sheazy_wi Date: Thu, 13 Feb 2025 19:16:20 +0000 Subject: [PATCH 21/27] should be fixed now --- StarEngine/vendor/glfw | 1 - 1 file changed, 1 deletion(-) delete mode 160000 StarEngine/vendor/glfw diff --git a/StarEngine/vendor/glfw b/StarEngine/vendor/glfw deleted file mode 160000 index 026a148d..00000000 --- a/StarEngine/vendor/glfw +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 026a148d7dd78d597de380c4e77ca0869f0ceaab From 05500e53dbb542e8cf18e421738522a428403fb3 Mon Sep 17 00:00:00 2001 From: sheazy_wi Date: Thu, 13 Feb 2025 15:24:57 -0500 Subject: [PATCH 22/27] change the branch --- .gitmodules | 2 +- StarEngine/vendor/imgui | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index 5a0930d7..13816b35 100644 --- a/.gitmodules +++ b/.gitmodules @@ -8,7 +8,7 @@ [submodule "StarEngine/vendor/imgui"] path = StarEngine/vendor/imgui url = https://github.com/starbounded-dev/imgui - branch = docking + branch = 6d276345 [submodule "StarEngine/vendor/glm"] path = StarEngine/vendor/glm url = https://github.com/g-truc/glm diff --git a/StarEngine/vendor/imgui b/StarEngine/vendor/imgui index 95c41117..6d276345 160000 --- a/StarEngine/vendor/imgui +++ b/StarEngine/vendor/imgui @@ -1 +1 @@ -Subproject commit 95c41117833039b44060973c33d2fc61f13ea284 +Subproject commit 6d276345025104b1f67006cbf7c411cf285d8a9a From cd1c6c8b4939c11da8c6ed72b3c82e26f49732b8 Mon Sep 17 00:00:00 2001 From: sheazy_wi Date: Thu, 13 Feb 2025 15:45:05 -0500 Subject: [PATCH 23/27] replace everything so it is working, but not compiling cuz of link error --- Sandbox/src/ExampleLayer.cpp | 50 +++++++++---------- Sandbox/src/ExampleLayer.h | 24 ++++----- Sandbox/src/Sandbox2D.cpp | 48 +++++++++--------- Sandbox/src/Sandbox2D.h | 19 +++---- Sandbox/src/SandboxApp.cpp | 10 ++-- .../src/Platform/OpenGL/OpenGLVertexArray.cpp | 1 - StarEngine/src/StarEngine/Core/EntryPoint.h | 2 +- StarEngine/src/StarEngine/Core/KeyCodes.h | 2 +- StarEngine/src/StarEngine/Renderer/Buffer.cpp | 2 +- .../Renderer/OrthographicCameraController.cpp | 16 +++--- StarEngine/vendor/stb_image/stb_image.cpp | 2 +- 11 files changed, 88 insertions(+), 88 deletions(-) diff --git a/Sandbox/src/ExampleLayer.cpp b/Sandbox/src/ExampleLayer.cpp index d507ee22..4b293a86 100644 --- a/Sandbox/src/ExampleLayer.cpp +++ b/Sandbox/src/ExampleLayer.cpp @@ -5,12 +5,12 @@ #include #include -#include "StarStudio.h" +#include "StarEngine.h" ExampleLayer::ExampleLayer() : Layer("ExampleLayer"), m_CameraController(1280.0f / 720.0f) { - m_VertexArray = StarStudio::VertexArray::Create(); + m_VertexArray = StarEngine::VertexArray::Create(); float vertices[3 * 7] = { -0.5f, -0.5f, 0.0f, 0.8f, 0.2f, 0.8f, 1.0f, @@ -18,20 +18,20 @@ ExampleLayer::ExampleLayer() 0.0f, 0.5f, 0.0f, 0.8f, 0.8f, 0.2f, 1.0f }; - StarStudio::Ref vertexBuffer = StarStudio::VertexBuffer::Create(vertices, sizeof(vertices)); - StarStudio::BufferLayout layout = { - { StarStudio::ShaderDataType::Float3, "a_Position" }, - { StarStudio::ShaderDataType::Float4, "a_Color" } + StarEngine::Ref vertexBuffer = StarEngine::VertexBuffer::Create(vertices, sizeof(vertices)); + StarEngine::BufferLayout layout = { + { StarEngine::ShaderDataType::Float3, "a_Position" }, + { StarEngine::ShaderDataType::Float4, "a_Color" } }; vertexBuffer->SetLayout(layout); m_VertexArray->AddVertexBuffer(vertexBuffer); uint32_t indices[3] = { 0, 1, 2 }; - StarStudio::Ref indexBuffer = StarStudio::IndexBuffer::Create(indices, sizeof(indices) / sizeof(uint32_t)); + StarEngine::Ref indexBuffer = StarEngine::IndexBuffer::Create(indices, sizeof(indices) / sizeof(uint32_t)); m_VertexArray->SetIndexBuffer(indexBuffer); - m_SquareVA = StarStudio::VertexArray::Create(); + m_SquareVA = StarEngine::VertexArray::Create(); float squareVertices[5 * 4] = { -0.5f, -0.5f, 0.0f, 0.0f, 0.0f, @@ -40,16 +40,16 @@ ExampleLayer::ExampleLayer() -0.5f, 0.5f, 0.0f, 0.0f, 1.0f }; - StarStudio::Ref squareVB = StarStudio::VertexBuffer::Create(squareVertices, sizeof(squareVertices)); + StarEngine::Ref squareVB = StarEngine::VertexBuffer::Create(squareVertices, sizeof(squareVertices)); squareVB->SetLayout({ - { StarStudio::ShaderDataType::Float3, "a_Position" }, - { StarStudio::ShaderDataType::Float2, "a_TexCoord" } + { StarEngine::ShaderDataType::Float3, "a_Position" }, + { StarEngine::ShaderDataType::Float2, "a_TexCoord" } }); m_SquareVA->AddVertexBuffer(squareVB); uint32_t squareIndices[6] = { 0, 1, 2, 2, 3, 0 }; - StarStudio::Ref squareIB = StarStudio::IndexBuffer::Create(squareIndices, sizeof(squareIndices) / sizeof(uint32_t)); + StarEngine::Ref squareIB = StarEngine::IndexBuffer::Create(squareIndices, sizeof(squareIndices) / sizeof(uint32_t)); m_SquareVA->SetIndexBuffer(squareIB); std::string vertexSrc = R"( @@ -82,7 +82,7 @@ ExampleLayer::ExampleLayer() } )"; - m_Shader = StarStudio::Shader::Create("VertexPosColor", vertexSrc, fragmentSrc); + m_Shader = StarEngine::Shader::Create("VertexPosColor", vertexSrc, fragmentSrc); std::string flatColorShaderVertexSrc = R"( #version 330 core @@ -110,11 +110,11 @@ ExampleLayer::ExampleLayer() } )"; - m_FlatColorShader = StarStudio::Shader::Create("FlatColor", flatColorShaderVertexSrc, flatColorShaderFragmentSrc); + m_FlatColorShader = StarEngine::Shader::Create("FlatColor", flatColorShaderVertexSrc, flatColorShaderFragmentSrc); auto textureShader = m_ShaderLibrary.Load("assets/shaders/Texture.glsl"); - m_Texture = StarStudio::Texture2D::Create("assets/textures/Checkerboard.png"); - m_starLogoTexture = StarStudio::Texture2D::Create("assets/textures/starLogo.png"); + m_Texture = StarEngine::Texture2D::Create("assets/textures/Checkerboard.png"); + m_starLogoTexture = StarEngine::Texture2D::Create("assets/textures/starLogo.png"); textureShader->Bind(); textureShader->SetInt("u_Texture", 0); @@ -130,16 +130,16 @@ void ExampleLayer::OnDetach() } -void ExampleLayer::OnUpdate(StarStudio::Timestep ts) +void ExampleLayer::OnUpdate(StarEngine::Timestep ts) { // Update m_CameraController.OnUpdate(ts); // Render - StarStudio::RenderCommand::SetClearColor({ 0.1f, 0.1f, 0.1f, 1 }); - StarStudio::RenderCommand::Clear(); + StarEngine::RenderCommand::SetClearColor({ 0.1f, 0.1f, 0.1f, 1 }); + StarEngine::RenderCommand::Clear(); - StarStudio::Renderer::BeginScene(m_CameraController.GetCamera()); + StarEngine::Renderer::BeginScene(m_CameraController.GetCamera()); glm::mat4 scale = glm::scale(glm::mat4(1.0f), glm::vec3(0.1f)); @@ -152,21 +152,21 @@ void ExampleLayer::OnUpdate(StarStudio::Timestep ts) { glm::vec3 pos(x * 0.11f, y * 0.11f, 0.0f); glm::mat4 transform = glm::translate(glm::mat4(1.0f), pos) * scale; - StarStudio::Renderer::Submit(m_FlatColorShader, m_SquareVA, transform); + StarEngine::Renderer::Submit(m_FlatColorShader, m_SquareVA, transform); } } auto textureShader = m_ShaderLibrary.Get("Texture"); m_Texture->Bind(); - StarStudio::Renderer::Submit(textureShader, m_SquareVA, glm::scale(glm::mat4(1.0f), glm::vec3(1.5f))); + StarEngine::Renderer::Submit(textureShader, m_SquareVA, glm::scale(glm::mat4(1.0f), glm::vec3(1.5f))); m_starLogoTexture->Bind(); - StarStudio::Renderer::Submit(textureShader, m_SquareVA, glm::scale(glm::mat4(1.0f), glm::vec3(1.5f))); + StarEngine::Renderer::Submit(textureShader, m_SquareVA, glm::scale(glm::mat4(1.0f), glm::vec3(1.5f))); // Triangle // Hazel::Renderer::Submit(m_Shader, m_VertexArray); - StarStudio::Renderer::EndScene(); + StarEngine::Renderer::EndScene(); } void ExampleLayer::OnImGuiRender() @@ -196,7 +196,7 @@ void ExampleLayer::OnImGuiRender() ImGui::End(); } -void ExampleLayer::OnEvent(StarStudio::Event& e) +void ExampleLayer::OnEvent(StarEngine::Event& e) { m_CameraController.OnEvent(e); } \ No newline at end of file diff --git a/Sandbox/src/ExampleLayer.h b/Sandbox/src/ExampleLayer.h index 759a47cb..15f7a9bc 100644 --- a/Sandbox/src/ExampleLayer.h +++ b/Sandbox/src/ExampleLayer.h @@ -1,9 +1,9 @@ #pragma once -#include "StarStudio.h" -#include "StarStudio/Renderer/OrthographicCameraController.h" +#include "StarEngine.h" +#include "StarEngine/Renderer/OrthographicCameraController.h" -class ExampleLayer : public StarStudio::Layer +class ExampleLayer : public StarEngine::Layer { public: @@ -13,19 +13,19 @@ class ExampleLayer : public StarStudio::Layer virtual void OnAttach() override; virtual void OnDetach() override; - void OnUpdate(StarStudio::Timestep ts) override; + void OnUpdate(StarEngine::Timestep ts) override; virtual void OnImGuiRender() override; - void OnEvent(StarStudio::Event& e) override; + void OnEvent(StarEngine::Event& e) override; private: - StarStudio::ShaderLibrary m_ShaderLibrary; - StarStudio::Ref m_Shader; - StarStudio::Ref m_VertexArray; + StarEngine::ShaderLibrary m_ShaderLibrary; + StarEngine::Ref m_Shader; + StarEngine::Ref m_VertexArray; - StarStudio::Ref m_FlatColorShader; - StarStudio::Ref m_SquareVA; + StarEngine::Ref m_FlatColorShader; + StarEngine::Ref m_SquareVA; - StarStudio::Ref m_Texture, m_starLogoTexture; + StarEngine::Ref m_Texture, m_starLogoTexture; - StarStudio::OrthographicCameraController m_CameraController; + StarEngine::OrthographicCameraController m_CameraController; glm::vec3 m_SquareColor = { 0.2f, 0.3f, 0.8f }; }; diff --git a/Sandbox/src/Sandbox2D.cpp b/Sandbox/src/Sandbox2D.cpp index 1006a199..5f88a464 100644 --- a/Sandbox/src/Sandbox2D.cpp +++ b/Sandbox/src/Sandbox2D.cpp @@ -15,59 +15,59 @@ Sandbox2D::Sandbox2D() void Sandbox2D::OnAttach() { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); - m_CheckerboardTexture = StarStudio::Texture2D::Create("assets/textures/Checkerboard.png"); + m_CheckerboardTexture = StarEngine::Texture2D::Create("assets/textures/Checkerboard.png"); } void Sandbox2D::OnDetach() { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); } -void Sandbox2D::OnUpdate(StarStudio::Timestep ts) +void Sandbox2D::OnUpdate(StarEngine::Timestep ts) { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); // Update m_CameraController.OnUpdate(ts); // Render - StarStudio::Renderer2D::ResetStats(); + StarEngine::Renderer2D::ResetStats(); { - SS_PROFILE_SCOPE("Renderer Prep"); - StarStudio::RenderCommand::SetClearColor({ 0.1f, 0.1f, 0.1f, 1 }); - StarStudio::RenderCommand::Clear(); + SE_PROFILE_SCOPE("Renderer Prep"); + StarEngine::RenderCommand::SetClearColor({ 0.1f, 0.1f, 0.1f, 1 }); + StarEngine::RenderCommand::Clear(); } { static float rotation = 0.0f; rotation += ts * 50.0f; - SS_PROFILE_SCOPE("Renderer Draw"); - StarStudio::Renderer2D::BeginScene(m_CameraController.GetCamera()); - StarStudio::Renderer2D::DrawRotatedQuad({ 1.0f, 0.0f }, { 0.8f, 0.8f }, -45.0f, { 0.8f, 0.2f, 0.3f, 1.0f }); - StarStudio::Renderer2D::DrawQuad({ -1.0f, 0.0f }, { 0.8f, 0.8f }, { 0.8f, 0.2f, 0.3f, 1.0f }); - StarStudio::Renderer2D::DrawQuad({ 0.5f, -0.5f }, { 0.5f, 0.75f }, m_SquareColor); - StarStudio::Renderer2D::DrawQuad({ 0.0f, 0.0f, -0.1f }, { 20.0f, 20.0f }, m_CheckerboardTexture, 10.0f); - StarStudio::Renderer2D::DrawRotatedQuad({ -2.0f, 0.0f, 0.0f }, { 1.0f, 1.0f }, rotation, m_CheckerboardTexture, 20.0f); - StarStudio::Renderer2D::EndScene(); + SE_PROFILE_SCOPE("Renderer Draw"); + StarEngine::Renderer2D::BeginScene(m_CameraController.GetCamera()); + StarEngine::Renderer2D::DrawRotatedQuad({ 1.0f, 0.0f }, { 0.8f, 0.8f }, -45.0f, { 0.8f, 0.2f, 0.3f, 1.0f }); + StarEngine::Renderer2D::DrawQuad({ -1.0f, 0.0f }, { 0.8f, 0.8f }, { 0.8f, 0.2f, 0.3f, 1.0f }); + StarEngine::Renderer2D::DrawQuad({ 0.5f, -0.5f }, { 0.5f, 0.75f }, m_SquareColor); + StarEngine::Renderer2D::DrawQuad({ 0.0f, 0.0f, -0.1f }, { 20.0f, 20.0f }, m_CheckerboardTexture, 10.0f); + StarEngine::Renderer2D::DrawRotatedQuad({ -2.0f, 0.0f, 0.0f }, { 1.0f, 1.0f }, rotation, m_CheckerboardTexture, 20.0f); + StarEngine::Renderer2D::EndScene(); - StarStudio::Renderer2D::BeginScene(m_CameraController.GetCamera()); + StarEngine::Renderer2D::BeginScene(m_CameraController.GetCamera()); for (float y = -5.0f; y < 5.0f; y += 0.5f) { for (float x = -5.0f; x < 5.0f; x += 0.5f) { glm::vec4 color = { (x + 5.0f) / 10.0f, 0.4f, (y + 5.0f) / 10.0f, 0.7f }; - StarStudio::Renderer2D::DrawQuad({ x, y }, { 0.45f, 0.45f }, color); + StarEngine::Renderer2D::DrawQuad({ x, y }, { 0.45f, 0.45f }, color); } } - StarStudio::Renderer2D::EndScene(); + StarEngine::Renderer2D::EndScene(); } } void Sandbox2D::OnImGuiRender() { - SS_PROFILE_FUNCTION(); + SE_PROFILE_FUNCTION(); ImGuiContext& g = *GImGui; ImGuiIO& io = g.IO; @@ -96,12 +96,12 @@ void Sandbox2D::OnImGuiRender() if (ImGui::Checkbox("VSync", &m_VSync)) { // Toggle VSync when the checkbox is clicked - StarStudio::Application::Get().GetWindow().SetVSync(m_VSync); + StarEngine::Application::Get().GetWindow().SetVSync(m_VSync); } ImGui::Text("Settings"); - auto stats = StarStudio::Renderer2D::GetStats(); + auto stats = StarEngine::Renderer2D::GetStats(); ImGui::Text("Renderer2D Stats:"); ImGui::Text("Draw Calls: %d", stats.DrawCalls); ImGui::Text("Quads: %d", stats.QuadCount); @@ -112,7 +112,7 @@ void Sandbox2D::OnImGuiRender() } -void Sandbox2D::OnEvent(StarStudio::Event& e) +void Sandbox2D::OnEvent(StarEngine::Event& e) { m_CameraController.OnEvent(e); } diff --git a/Sandbox/src/Sandbox2D.h b/Sandbox/src/Sandbox2D.h index 745f3e01..d63d1558 100644 --- a/Sandbox/src/Sandbox2D.h +++ b/Sandbox/src/Sandbox2D.h @@ -1,8 +1,9 @@ #pragma once -#include "StarStudio.h" -#include "StarStudio/Renderer/OrthographicCameraController.h" -class Sandbox2D : public StarStudio::Layer +#include "StarEngine.h" +#include "StarEngine/Renderer/OrthographicCameraController.h" + +class Sandbox2D : public StarEngine::Layer { public: Sandbox2D(); @@ -11,19 +12,19 @@ class Sandbox2D : public StarStudio::Layer virtual void OnAttach() override; virtual void OnDetach() override; - void OnUpdate(StarStudio::Timestep ts) override; + void OnUpdate(StarEngine::Timestep ts) override; virtual void OnImGuiRender() override; - void OnEvent(StarStudio::Event& e) override; + void OnEvent(StarEngine::Event& e) override; private: - StarStudio::OrthographicCameraController m_CameraController; + StarEngine::OrthographicCameraController m_CameraController; bool m_VSync = true; // Temp - StarStudio::Ref m_SquareVA; - StarStudio::Ref m_FlatColorShader; + StarEngine::Ref m_SquareVA; + StarEngine::Ref m_FlatColorShader; - StarStudio::Ref m_CheckerboardTexture; + StarEngine::Ref m_CheckerboardTexture; glm::vec4 m_SquareColor = { 0.2f, 0.3f, 0.8f, 1.0f }; }; diff --git a/Sandbox/src/SandboxApp.cpp b/Sandbox/src/SandboxApp.cpp index 3fe00508..3edfea0d 100644 --- a/Sandbox/src/SandboxApp.cpp +++ b/Sandbox/src/SandboxApp.cpp @@ -1,12 +1,12 @@ -#include -#include +#include +#include -#include "StarStudio/Renderer/OrthographicCameraController.h" +#include "StarEngine/Renderer/OrthographicCameraController.h" #include "Sandbox2D.h" #include "ExampleLayer.h" -class Sandbox : public StarStudio::Application +class Sandbox : public StarEngine::Application { public: Sandbox() @@ -22,7 +22,7 @@ class Sandbox : public StarStudio::Application }; -StarStudio::Application* StarStudio::CreateApplication() +StarEngine::Application* StarEngine::CreateApplication() { return new Sandbox(); } \ No newline at end of file diff --git a/StarEngine/src/Platform/OpenGL/OpenGLVertexArray.cpp b/StarEngine/src/Platform/OpenGL/OpenGLVertexArray.cpp index 4c69e275..46a3bdc7 100644 --- a/StarEngine/src/Platform/OpenGL/OpenGLVertexArray.cpp +++ b/StarEngine/src/Platform/OpenGL/OpenGLVertexArray.cpp @@ -1,7 +1,6 @@ #include "sepch.h" #include "Platform/OpenGL/OpenGLVertexArray.h" - #include namespace StarEngine { diff --git a/StarEngine/src/StarEngine/Core/EntryPoint.h b/StarEngine/src/StarEngine/Core/EntryPoint.h index 4b4c1629..664eaea6 100644 --- a/StarEngine/src/StarEngine/Core/EntryPoint.h +++ b/StarEngine/src/StarEngine/Core/EntryPoint.h @@ -9,7 +9,7 @@ extern StarEngine::Application* StarEngine::CreateApplication(); StarEngine::Log::Init(); SE_PROFILE_BEGIN_SESSION("Startup", "StarEngineProfile-Startup.json"); - auto app = StarStudio::CreateApplication(); + auto app = StarEngine::CreateApplication(); SE_PROFILE_END_SESSION(); SE_PROFILE_BEGIN_SESSION("Runtime", "StarEngineProfile-Runtime.json"); diff --git a/StarEngine/src/StarEngine/Core/KeyCodes.h b/StarEngine/src/StarEngine/Core/KeyCodes.h index 6fbe1740..371bf5d7 100644 --- a/StarEngine/src/StarEngine/Core/KeyCodes.h +++ b/StarEngine/src/StarEngine/Core/KeyCodes.h @@ -2,7 +2,7 @@ namespace StarEngine { - typedef enum claSE KeyCode : uint16_t + typedef enum class KeyCode : uint16_t { // From glfw3.h Space = 32, diff --git a/StarEngine/src/StarEngine/Renderer/Buffer.cpp b/StarEngine/src/StarEngine/Renderer/Buffer.cpp index 7fe7c3f6..35fe3b7e 100644 --- a/StarEngine/src/StarEngine/Renderer/Buffer.cpp +++ b/StarEngine/src/StarEngine/Renderer/Buffer.cpp @@ -5,7 +5,7 @@ #include "Platform/OpenGL/OpenGLBuffer.h" -namespace StarStudio { +namespace StarEngine { Ref VertexBuffer::Create(uint32_t size) { diff --git a/StarEngine/src/StarEngine/Renderer/OrthographicCameraController.cpp b/StarEngine/src/StarEngine/Renderer/OrthographicCameraController.cpp index bfb8db89..15ef54ab 100644 --- a/StarEngine/src/StarEngine/Renderer/OrthographicCameraController.cpp +++ b/StarEngine/src/StarEngine/Renderer/OrthographicCameraController.cpp @@ -15,23 +15,23 @@ namespace StarEngine { { SE_PROFILE_FUNCTION(); - if (Input::IsKeyPressed(SS_KEY_A)) + if (Input::IsKeyPressed(SE_KEY_A)) { m_CameraPosition.x -= cos(glm::radians(m_CameraRotation)) * m_CameraTranslationSpeed * ts; m_CameraPosition.y -= sin(glm::radians(m_CameraRotation)) * m_CameraTranslationSpeed * ts; } - else if (Input::IsKeyPressed(SS_KEY_D)) + else if (Input::IsKeyPressed(SE_KEY_D)) { m_CameraPosition.x += cos(glm::radians(m_CameraRotation)) * m_CameraTranslationSpeed * ts; m_CameraPosition.y += sin(glm::radians(m_CameraRotation)) * m_CameraTranslationSpeed * ts; } - if (Input::IsKeyPressed(SS_KEY_W)) + if (Input::IsKeyPressed(SE_KEY_W)) { m_CameraPosition.x += -sin(glm::radians(m_CameraRotation)) * m_CameraTranslationSpeed * ts; m_CameraPosition.y += cos(glm::radians(m_CameraRotation)) * m_CameraTranslationSpeed * ts; } - else if (Input::IsKeyPressed(SS_KEY_S)) + else if (Input::IsKeyPressed(SE_KEY_S)) { m_CameraPosition.x -= -sin(glm::radians(m_CameraRotation)) * m_CameraTranslationSpeed * ts; m_CameraPosition.y -= cos(glm::radians(m_CameraRotation)) * m_CameraTranslationSpeed * ts; @@ -39,10 +39,10 @@ namespace StarEngine { if (m_Rotation) { - if (Input::IsKeyPressed(SS_KEY_Q)) + if (Input::IsKeyPressed(SE_KEY_Q)) m_CameraRotation += m_CameraRotationSpeed * ts; - if (Input::IsKeyPressed(SS_KEY_E)) + if (Input::IsKeyPressed(SE_KEY_E)) m_CameraRotation -= m_CameraRotationSpeed * ts; m_Camera.SetRotation(m_CameraRotation); @@ -62,8 +62,8 @@ namespace StarEngine { SE_PROFILE_FUNCTION(); EventDispatcher dispatcher(e); - dispatcher.Dispatch(SS_BIND_EVENT_FN(OrthographicCameraController::OnMouseScrolled)); - dispatcher.Dispatch(SS_BIND_EVENT_FN(OrthographicCameraController::OnWindowResized)); + dispatcher.Dispatch(SE_BIND_EVENT_FN(OrthographicCameraController::OnMouseScrolled)); + dispatcher.Dispatch(SE_BIND_EVENT_FN(OrthographicCameraController::OnWindowResized)); } bool OrthographicCameraController::OnMouseScrolled(MouseScrolledEvent& e) diff --git a/StarEngine/vendor/stb_image/stb_image.cpp b/StarEngine/vendor/stb_image/stb_image.cpp index 86b8fb91..b6ed214b 100644 --- a/StarEngine/vendor/stb_image/stb_image.cpp +++ b/StarEngine/vendor/stb_image/stb_image.cpp @@ -1,4 +1,4 @@ -#include "sspch.h" +#include "sepch.h" #define STB_IMAGE_IMPLEMENTATION #include "stb_image.h" From 37d5f578da9b7dbfb70ca020e1076b3dd2e8456b Mon Sep 17 00:00:00 2001 From: sheazy_wi Date: Thu, 13 Feb 2025 16:22:34 -0500 Subject: [PATCH 24/27] update gitmodules, should work now --- .gitmodules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index 13816b35..7e2e660f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,6 @@ [submodule "StarEngine/vendor/GLFW"] path = StarEngine/vendor/GLFW - url = https://github.com/TheCherno/glfw + url = https://github.com/starbounded-dev/glfw branch = master [submodule "StarEngine/vendor/spdlog"] path = StarEngine/vendor/spdlog From ef5f00a1759ad7cff3a868ea24c678074b001971 Mon Sep 17 00:00:00 2001 From: sheazy_wi Date: Thu, 13 Feb 2025 16:54:47 -0500 Subject: [PATCH 25/27] removed default branch because useless --- .gitmodules | 6 ++---- .../bin/Debug-windows-x86_64/GLAD/GLAD.idb | Bin 240640 -> 420864 bytes .../bin/Debug-windows-x86_64/GLAD/GLAD.lib | Bin 638052 -> 638052 bytes .../bin/Debug-windows-x86_64/GLAD/GLAD.pdb | Bin 110592 -> 126976 bytes 4 files changed, 2 insertions(+), 4 deletions(-) diff --git a/.gitmodules b/.gitmodules index 7e2e660f..14661ba8 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,15 +1,13 @@ [submodule "StarEngine/vendor/GLFW"] path = StarEngine/vendor/GLFW url = https://github.com/starbounded-dev/glfw - branch = master [submodule "StarEngine/vendor/spdlog"] path = StarEngine/vendor/spdlog url = https://github.com/gabime/spdlog [submodule "StarEngine/vendor/imgui"] path = StarEngine/vendor/imgui url = https://github.com/starbounded-dev/imgui - branch = 6d276345 + branch = docking [submodule "StarEngine/vendor/glm"] path = StarEngine/vendor/glm - url = https://github.com/g-truc/glm - branch = master + url = https://github.com/g-truc/glm \ No newline at end of file diff --git a/StarEngine/vendor/GLAD/bin/Debug-windows-x86_64/GLAD/GLAD.idb b/StarEngine/vendor/GLAD/bin/Debug-windows-x86_64/GLAD/GLAD.idb index 9c7187a2e06ba2fb0306bf5d04ec93b726e94181..f36408ced1cc5ca67d2d5ab4c33035732e2a8db7 100644 GIT binary patch delta 12591 zcmeI24^R}>9mj9qJK&H%g8Vy_Lr_qV|M-{W2%dpNQVd|EiH)S8dKhfLKSUE#2oN-C zTN4ps$EKOY79D6YmC(3DrpnlnWMYT>X=|%(P5cK2jZq9J#6Q>X+h0M{(>Z3MX*;_! zpZ)CZ{odQ%_jcdz-TulCd6pjv+!W?5>2$i+F*7=20n_LvODnI+8fomamDz5b+{*De zrOM(boo^1+f6T`iFJVR5jX}17C?jIpxoJymg7oqGI~Ft4y&|Oitwk4KPyh9SiW*a@ zYw`QdCf^e-&Z%=B3o+~D*m^cPNQCKu*ewpk)RRD;o6Wxaxx>-b-Nv!aPa3y7UP5mA z1B+;06!c5J!;8EB%3UvSYi03Dd=Tdmqv8rz#N`(}Yb}n8$22)1e~KLH&wT?ISywG6 zelBl?wPtAjrJbNI`) zYbmd!%X3qCm6MNIr`x3*P32s2D#r3V%F#4FMsk{fE#fpSm* zUIvxmH>k)7h(XN-{0;maxPe1*$7Vjh>@XIOgA}&z}KJ$^ny#E5A=g?z-15zu7IoH8n6KjZ)G|O`^f+Ydf)_{feSDIS1jLBIsYf)EfY;Y1vVh4CN^go6oSB8UKyU=oM| z(I5uIf;bQl5`Y-9CW9$pDwqbQgBc(R+z0LlW{?aX04ZQ5u!vrp1s(*cAPqbO9tN{P zI(P(p4`hHj;8BnXvOqSN3myaWKo0mmcpN+d=7S%AC&2=c3!VZ$1W$t><%tyPg@ImYCvd;Flj{I%mZ>gYRWd;wqGwG>!WzSw_BV7-cMBJWF1-hj}PlgZN^{3sx@=m@e-;z(y#gA-r-J<+A+) zWiMZDR;t4IQpd|F<_JEFhXvX437aUlzQ|zh{9;&J_OJ zVQlBv0cKR@&ESp0C?kEqqT~_#nTNbCiD%00d(r&uWX77g}Eo4%GO)r=1Ts zoe$cLOegN-H~hz`og_D%B-%iWzv8tA8|}K#t_$sEs@*Se4%mG+sErTW_@Ips+W4T2 z4Lv20tau&%j5s9*YJ)1CTR}77MpOhZnU57>SLRKV^gjAfjoilWv z*c26Ow7vQ2?8{^2{CXDaY>L7QSr7Ra^=zEyKfLgY(-*HPQJPX9M$> zBO2Ix){>~a-N1H8?lVhJJ8JH;c?r+sLGK2m~qE08zY-E#^X^rdvmo0x}7RB-} z)+z-pyl=tnlVTzp*?8|;b7gWH+5LA&lR+v?w4G8Sd#3g?wgCGoKlK?q&UzB$S)a2P zaUjax&)IIq&{C_8vsIBIA7Ee-=|*)Xyqrhkl2{iq@CD3d(@7SPAi@V4a~vAeX6QV% zDe8g$H0Bd^z3Xjnu5n9wFWzvf&$iB`Z>elO$sU)Oyyql~g1Sh49qK0wsjx#0X`@fw zBvYpvl1^Gl+D2+8^^?L+sgc>FQc?ryAW8Z{4T&MmC#@wlk&cjDyVQNj>rxABB(;z_ zNZzN_?~+Lcq#DvbC`P=Z6H^IJ1%Uy}`G2y`&3oyeQtvb3LGAj)+5=gnE4WxHT$4DOM)W{@~ zl~hIAL+T>=omV3*q(ahGQX8q8Wa?HU(@85y+n~Y5YeB;aMB_bDM~(MR^!0`lOH6L3 zlKrIc3u>*|q*77?=^#n^S`CRI%_prTHIa^xTzk~WsiZv8Mp6r@gXG<-MkbRANHwH= zq_d>Ji)v&VX*uZ)(ubs8Qs^Z$at>)VX*=mt(p6GqpBkA%svzwo9VR*Tt04)bT+#;8 zyQE_zk8jk-BxtZF#K0;L|Hu_xpq|Ld9XQFwpeuU9N+qjEdq`a*zsqW^7E&Q;E2)jt zO)_0kBhyJMN!v*6q<&KPRW&l3R7z?f9VAKD)Q}j`e9~G{6X^)a)uu*HCFPMel3GX| z&|s5@Ll%f@*3 z2iAiP;HThc;OAf?con<`Hi0Uz8B~KU;04f#x^@DQ#{4^-9GuC6wOmcKizgTfynr_t e1$=-n&~i2Z8*?>l&@;8_tJj&4w)JnI}82h)r~q zVEyyoo}mFIBC@E2V;ToD2P5NlP7dbp+)X8IC5+2Tm`oPsglt>E#E}4z`0dQ3z_6Xo zhj||pBir_qe$3{q69ZV5g)p;BE|dw_9w5TJ#hmF6D@4WiBa@hI7?%Ywv#>q^y5%Xz MEgJ(iqv2de0L^GR?*IS* diff --git a/StarEngine/vendor/GLAD/bin/Debug-windows-x86_64/GLAD/GLAD.lib b/StarEngine/vendor/GLAD/bin/Debug-windows-x86_64/GLAD/GLAD.lib index 82e3a548df1121677eab72cb1464efd5c83b6851..de1b27d9406526aa5abb5ff5c7acf0e0d7e5ac6c 100644 GIT binary patch delta 762 zcmaFzL+!~AwF%PfmL?X)CYGkt{iGPh8ZEY3F!D>m#M*&k+x?`NIyqq?)9)!WCBivw zDokq3>6z=c=c_PH*)8arm!6rI8WUWSSOj5i7kR+MtifSo0ZXnSqOWdz}XJ_Bss~P8TfZ%*bI`B#cGeyMbjnGZt~?78XMR zCI-RnW>Z*xB`7d4Ffce<#iXQ`Avq3-*>fWqZI^)=w`5-rdhik+{kgRD?pfc_8lDR+%T$4{{-F~(e!c9s6a{p%>m4R^2fw&yog^x{FNCj%!Xlx+>kyw@r zln}1*-2mYVr2)D2f(sKN+&U0<<=^GUr(Z||Y75+Kvk4**mJXCK-uSZ?!aW4y#(d#7 zg>dyUfLtBF*>k2hWB|4Cs3-n{NU&uBCAMFe%mQ=Ui!#}_7iDs+Tcij}Sn=5zMFlyD fC29FZxegf&@$v99=E%c2i3gs>w%?ZE>|6{0v{wh+ delta 762 zcmaFzL+!~AwF%Pf7M2#qhDHX{{iGPh8ZEY3F!D>m#M*&k+x?`NIyqq?)9)!WCBivw zDokq37mh94p0C0*Ww&5(Noh)EeoSylViAP7UE~21vj&HufwQr>v9Z~7c@Ab*4l`#L zV;5sf)9pDN%v=f_7G@@vPG&9^?R6T=+v_w~I9;%qGb4v(kuVlg7mn?PLtKW|(hT)AW*_xQR$ z!qW?qf!eM&nZAKYd;>|G-~KrW!c9s6a*LME?1ymAfw<0lD!8XBqyn||pWxdDkyw@r zlu$djxv zK)8AtK<=uotJSABWB|2APvZ`UNU&uBB_??BCxf}|MVai|i!wRZEmDLftoZDVqJo^n flC=DyT!##X_;`34bL8Qi!~;)b+iy#7b}j}0a-$2f diff --git a/StarEngine/vendor/GLAD/bin/Debug-windows-x86_64/GLAD/GLAD.pdb b/StarEngine/vendor/GLAD/bin/Debug-windows-x86_64/GLAD/GLAD.pdb index 06f4ab9dfbc2afef52dbfd8b7e79178b3075ec6a..6088c638ca7289536eb0bd00cf81f16d107488cd 100644 GIT binary patch delta 587 zcma)(O(;ZB6vzL^yf+BFnHrPNW<;2p(TtChly8y|FRP?p9*$&M&7<2lcU#Vp+V-TwEUd(Qdaj+!#7soeGYA_ssNW30+VRp>&I zQn)-zkTb2AEC7p)vg@^IPO{{0Hu&i3T$|3>$nWeuROlfq@LCV#Lf0jBsOu))0f`R=+ypiwz-w$HJkpz3?p#smcUqpGX>oLj vIovVc0d5z-7O=#_GP2FA%b614QK_!DjHQh!W{h_10n(9AC{&T8b+z&SB! zY<37Zz&|m7UzQcfWdULvh&Y^N2C`UzE_uwqsleyyM#n8&%MutBSUG^g3X@qA Date: Thu, 13 Feb 2025 17:02:25 -0500 Subject: [PATCH 26/27] hopefully works weird, works in the vstudio but not in the workflows --- .github/workflows/main.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index d712dcff..a535645d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -17,6 +17,7 @@ jobs: uses: actions/checkout@v4 with: submodules: recursive + fetch-depth: = 0 - name: Set up MSBuild uses: microsoft/setup-msbuild@v1.0.2 From 305599f59791f63c66fd7167912dfea49a804f76 Mon Sep 17 00:00:00 2001 From: sheazy_wi Date: Thu, 13 Feb 2025 17:06:41 -0500 Subject: [PATCH 27/27] i am so done github workflows keeps using the wrong branch --- .github/workflows/main.yml | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index a535645d..56bf3f81 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -16,15 +16,21 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 with: - submodules: recursive - fetch-depth: = 0 + submodules: recursive + fetch-depth: 0 + + - name: Checkout correct commit for GLFW submodule + run: | + cd StarEngine/vendor/GLFW + git fetch origin 9544dde61dc927b5f5d8a3b393e2ede295d3abd4 + git checkout 9544dde61dc927b5f5d8a3b393e2ede295d3abd4 - name: Set up MSBuild uses: microsoft/setup-msbuild@v1.0.2 - uses: abel0b/setup-premake@v2.4 with: - version: "5.0.0-beta4" + version: "5.0.0-beta4" - name: Generate project files with Premake run: premake5 vs2022

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%0A=Da<8pRd8#|c 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 O{rk^UD0ukcfBksYJ|KI;Te^^dCPn~C; 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