diff --git a/modules/debug/CMakeLists.txt b/modules/debug/CMakeLists.txt index 0558102..24c3e15 100644 --- a/modules/debug/CMakeLists.txt +++ b/modules/debug/CMakeLists.txt @@ -1,3 +1,3 @@ -add_library_module(lt_debug) -target_link_libraries(lt_debug INTERFACE logger) -target_precompile_headers(lt_debug INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/src/pch.hpp) +add_library_module(lt_debug instrumentor.cpp) +target_link_libraries(lt_debug PUBLIC logger) +target_precompile_headers(lt_debug PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/src/pch.hpp) diff --git a/modules/debug/include/debug/assertions.hpp b/modules/debug/include/debug/assertions.hpp index c81d3b3..1ef8eee 100644 --- a/modules/debug/include/debug/assertions.hpp +++ b/modules/debug/include/debug/assertions.hpp @@ -14,7 +14,7 @@ struct FailedAssertion: std::exception template -constexpr void lt_assert(Expression_T &&expression, std::format_string fmt, Args &&...args) +constexpr void ensure(Expression_T &&expression, std::format_string fmt, Args &&...args) { if (!static_cast(expression)) { @@ -24,7 +24,7 @@ constexpr void lt_assert(Expression_T &&expression, std::format_string } template -constexpr void lt_assert(Expression_T &&expression, const char *message) +constexpr void ensure(Expression_T &&expression, const char *message) { if (!static_cast(expression)) { diff --git a/modules/debug/include/debug/instrumentor/instrumentor.hpp b/modules/debug/include/debug/instrumentor.hpp similarity index 100% rename from modules/debug/include/debug/instrumentor/instrumentor.hpp rename to modules/debug/include/debug/instrumentor.hpp diff --git a/modules/debug/src/instrumentor.cpp b/modules/debug/src/instrumentor.cpp index 3b2d4c0..4cc3c7b 100644 --- a/modules/debug/src/instrumentor.cpp +++ b/modules/debug/src/instrumentor.cpp @@ -1,4 +1,5 @@ #include +#include namespace lt { diff --git a/modules/ecs/src/scene.cpp b/modules/ecs/src/scene.cpp index 3939ab4..a202ef7 100644 --- a/modules/ecs/src/scene.cpp +++ b/modules/ecs/src/scene.cpp @@ -90,7 +90,7 @@ auto Scene::get_entity_by_tag(const std::string &tag) -> Entity return entity; } - lt_assert(false, "Scene::get_entity_by_tag: failed to find entity by tag: {}", tag); + ensure(false, "Scene::get_entity_by_tag: failed to find entity by tag: {}", tag); return {}; } diff --git a/modules/engine/include/engine/core/entrypoint.hpp b/modules/engine/include/engine/core/entrypoint.hpp index 1d21612..777c602 100644 --- a/modules/engine/include/engine/core/entrypoint.hpp +++ b/modules/engine/include/engine/core/entrypoint.hpp @@ -12,8 +12,8 @@ try application = lt::create_application(); - lt::lt_assert(application, "Failed to create application"); - lt::lt_assert(application->sanity_check(), "Failed to verify the sanity of the application"); + lt::ensure(application, "Failed to create application"); + lt::ensure(application->sanity_check(), "Failed to verify the sanity of the application"); application->game_loop(); diff --git a/modules/engine/src/core/application.cpp b/modules/engine/src/core/application.cpp index b3205b3..cd16a48 100644 --- a/modules/engine/src/core/application.cpp +++ b/modules/engine/src/core/application.cpp @@ -22,7 +22,7 @@ Application *Application::s_instance = nullptr; Application::Application(): m_window(nullptr) { - lt_assert(!s_instance, "Application constructed twice"); + ensure(!s_instance, "Application constructed twice"); s_instance = this; m_window = Window::create([this](auto &&PH1) { on_event(std::forward(PH1)); }); @@ -62,7 +62,7 @@ Application::Application(): m_window(nullptr) "TEXTURE_SHADER"), } ); - lt_assert(m_graphics_context, "lWindow::lWindow: failed to create 'GraphicsContext'"); + ensure(m_graphics_context, "lWindow::lWindow: failed to create 'GraphicsContext'"); m_user_interface = UserInterface::create( (GLFWwindow *)m_window->get_handle(), @@ -173,13 +173,13 @@ void Application::on_event(const Event &event) [[nodiscard]] auto Application::sanity_check() const -> bool { log_inf("Checking application sanity..."); - lt_assert(s_instance, "Application not constructed!?"); - lt_assert(m_window, "Window is not initialized"); - lt_assert(m_user_interface, "User interface is not initialized"); - lt_assert(m_graphics_context, "Graphics context is not initialized"); - lt_assert(m_renderer, "Renderer is not initialized"); - lt_assert(m_layer_stack, "Layer_stack is not initialized"); - lt_assert(!m_layer_stack->is_empty(), "Layer_stack is empty"); + ensure(s_instance, "Application not constructed!?"); + ensure(m_window, "Window is not initialized"); + ensure(m_user_interface, "User interface is not initialized"); + ensure(m_graphics_context, "Graphics context is not initialized"); + ensure(m_renderer, "Renderer is not initialized"); + ensure(m_layer_stack, "Layer_stack is not initialized"); + ensure(!m_layer_stack->is_empty(), "Layer_stack is empty"); log_inf("Logging application state..."); this->log_debug_data(); diff --git a/modules/engine/src/layer/layer.cpp b/modules/engine/src/layer/layer.cpp index 1d72c36..945cdc1 100644 --- a/modules/engine/src/layer/layer.cpp +++ b/modules/engine/src/layer/layer.cpp @@ -40,7 +40,7 @@ auto Layer::on_event(const Event &event) -> bool case EventType::WindowGainFocus: return on_window_gain_focus(dynamic_cast(event)); - default: lt_assert(false, "Invalid event: {}", event.get_info_lt_log()); + default: ensure(false, "Invalid event: {}", event.get_info_lt_log()); } } diff --git a/modules/mirror/src/editor_layer.cpp b/modules/mirror/src/editor_layer.cpp index 6d8f2c5..12f7ea2 100644 --- a/modules/mirror/src/editor_layer.cpp +++ b/modules/mirror/src/editor_layer.cpp @@ -46,7 +46,7 @@ EditorLayer::EditorLayer(const std::string &name) else { auto serializer = SceneSerializer { m_scene }; - lt_assert(serializer.deserialize(m_scene_dir), "Failed to de-serialize: {}", m_scene_dir); + ensure(serializer.deserialize(m_scene_dir), "Failed to de-serialize: {}", m_scene_dir); // m_camera_entity = m_scene->GetEntityByTag("Game Camera"); } diff --git a/modules/renderer/src/blender.cpp b/modules/renderer/src/blender.cpp index f97ceaf..e417aac 100644 --- a/modules/renderer/src/blender.cpp +++ b/modules/renderer/src/blender.cpp @@ -22,7 +22,7 @@ auto Blender::create(const Ref & /*sharedContext*/) -> Scope(GraphicsContext::get_graphics_api()) diff --git a/modules/renderer/src/buffers.cpp b/modules/renderer/src/buffers.cpp index 27824a2..70d4148 100644 --- a/modules/renderer/src/buffers.cpp +++ b/modules/renderer/src/buffers.cpp @@ -30,7 +30,7 @@ auto ConstantBuffer::create( );) default - : lt_assert( + : ensure( false, "Invalid/unsupported 'GraphicsAPI' {}", static_cast(GraphicsContext::get_graphics_api()) @@ -59,7 +59,7 @@ auto VertexBuffer::create( );) default - : lt_assert( + : ensure( false, "Invalid/unsupported 'GraphicsAPI' {}", static_cast(GraphicsContext::get_graphics_api()) @@ -86,7 +86,7 @@ auto IndexBuffer::create( );) default - : lt_assert( + : ensure( false, "Invalid/unsupported 'GraphicsAPI' {}", static_cast(GraphicsContext::get_graphics_api()) diff --git a/modules/renderer/src/dx/shader.cpp b/modules/renderer/src/dx/shader.cpp index 14716a0..af54d7c 100644 --- a/modules/renderer/src/dx/shader.cpp +++ b/modules/renderer/src/dx/shader.cpp @@ -48,8 +48,8 @@ dxShader::dxShader( ); // check - lt_assert(!vsErr.Get(), "Vertex shader compile error: {}", (char *)vsErr->GetBufferPointer()); - lt_assert(!psErr.Get(), "Pixels shader compile error: {}", (char *)psErr->GetBufferPointer()); + ensure(!vsErr.Get(), "Vertex shader compile error: {}", (char *)vsErr->GetBufferPointer()); + ensure(!psErr.Get(), "Pixels shader compile error: {}", (char *)psErr->GetBufferPointer()); // create shaders auto hr = HRESULT {}; diff --git a/modules/renderer/src/dx/vertex_layout.cpp b/modules/renderer/src/dx/vertex_layout.cpp index 3f3929e..069d6a0 100644 --- a/modules/renderer/src/dx/vertex_layout.cpp +++ b/modules/renderer/src/dx/vertex_layout.cpp @@ -28,7 +28,7 @@ dxVertexLayout::dxVertexLayout( } auto dxpShader = std::dynamic_pointer_cast(shader); - lt_assert(dxpShader, "Failed to cast 'Shader' to 'dxShader'"); + ensure(dxpShader, "Failed to cast 'Shader' to 'dxShader'"); // create input layout (vertex layout) auto hr = HRESULT {}; @@ -88,7 +88,7 @@ auto dxVertexLayout::get_dxgi_format(VertexElementType type) -> DXGI_FORMAT case lt::VertexElementType::Float3: return DXGI_FORMAT_R32G32B32_FLOAT; case lt::VertexElementType::Float4: return DXGI_FORMAT_R32G32B32A32_FLOAT; - default: lt_assert(false, "Invalid 'VertexElementType'"); return DXGI_FORMAT_UNKNOWN; + default: ensure(false, "Invalid 'VertexElementType'"); return DXGI_FORMAT_UNKNOWN; } } diff --git a/modules/renderer/src/framebuffer.cpp b/modules/renderer/src/framebuffer.cpp index 7c04917..b0bdeca 100644 --- a/modules/renderer/src/framebuffer.cpp +++ b/modules/renderer/src/framebuffer.cpp @@ -26,7 +26,7 @@ auto Framebuffer::create( );); default: - lt_assert( + ensure( false, "Invalid/unsupported 'GraphicsAPI' {}", static_cast(GraphicsContext::get_graphics_api()) diff --git a/modules/renderer/src/gl/framebuffers.cpp b/modules/renderer/src/gl/framebuffers.cpp index 5b91cbe..d318711 100644 --- a/modules/renderer/src/gl/framebuffers.cpp +++ b/modules/renderer/src/gl/framebuffers.cpp @@ -85,7 +85,7 @@ void glFramebuffer::resize(const glm::uvec2 &size) // m_specification.width, m_specification.height); glFramebufferTexture2D(GL_FRAMEBUFFER, // GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D, m_depth_stencil_attachment_id, 0); - lt_assert( + ensure( (glCheckFramebufferStatus(GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE), "Framebuffer is incomplete" ); diff --git a/modules/renderer/src/gl/graphics_context.cpp b/modules/renderer/src/gl/graphics_context.cpp index 9ba5c37..0caf4d4 100644 --- a/modules/renderer/src/gl/graphics_context.cpp +++ b/modules/renderer/src/gl/graphics_context.cpp @@ -16,7 +16,7 @@ glGraphicsContext::glGraphicsContext(GLFWwindow *windowHandle): m_window_handle( { m_graphics_api = GraphicsAPI::OpenGL; glfwMakeContextCurrent(windowHandle); - lt_assert(gladLoadGL(glfwGetProcAddress), "Failed to initialize opengl (glad)"); + ensure(gladLoadGL(glfwGetProcAddress), "Failed to initialize opengl (glad)"); set_debug_message_callback(); } diff --git a/modules/renderer/src/gl/texture.cpp b/modules/renderer/src/gl/texture.cpp index b4b8f26..59fb5e1 100644 --- a/modules/renderer/src/gl/texture.cpp +++ b/modules/renderer/src/gl/texture.cpp @@ -58,7 +58,7 @@ auto glTexture::get_texture() -> void * case 3u: return GL_RGB; case 2u: return GL_RG; case 1u: return GL_RED; - default: lt_assert(false, "Invalid number of components: {}", num_components); + default: ensure(false, "Invalid number of components: {}", num_components); } return {}; @@ -73,7 +73,7 @@ auto glTexture::get_texture() -> void * case 3u: return GL_RGB8; case 2u: return GL_RG8; case 1u: return GL_R8; - default: lt_assert(false, "Invalid number of components: {}", num_components); + default: ensure(false, "Invalid number of components: {}", num_components); } return {}; diff --git a/modules/renderer/src/gl/vertex_layout.cpp b/modules/renderer/src/gl/vertex_layout.cpp index bce206f..a33078d 100644 --- a/modules/renderer/src/gl/vertex_layout.cpp +++ b/modules/renderer/src/gl/vertex_layout.cpp @@ -12,11 +12,11 @@ glVertexLayout::glVertexLayout( : m_array_id(NULL) { // check - lt_assert( + ensure( std::dynamic_pointer_cast(buffer), "Failed to cast 'VertexBuffer' to 'glVertexBuffer'" ); - lt_assert(!elements.empty(), "'elements' is empty"); + ensure(!elements.empty(), "'elements' is empty"); // local auto elementsDesc = std::vector {}; @@ -140,7 +140,7 @@ auto glVertexLayout::get_element_desc(VertexElementType type, unsigned int offse case VertexElementType::Float4: return { .type = GL_FLOAT, .count = 4u, .typeSize = sizeof(GLfloat), .offset = offset }; - default: lt_assert(false, "Invalid 'VertexElementType'"); return {}; + default: ensure(false, "Invalid 'VertexElementType'"); return {}; } } diff --git a/modules/renderer/src/graphics_context.cpp b/modules/renderer/src/graphics_context.cpp index 2ace0d9..9c6f9a2 100644 --- a/modules/renderer/src/graphics_context.cpp +++ b/modules/renderer/src/graphics_context.cpp @@ -42,7 +42,7 @@ auto GraphicsContext::create(GraphicsAPI api, GLFWwindow *window_handle) -> Scop break;) default - : lt_assert( + : ensure( false, "Invalid/unsupported 'GraphicsAPI' {}", // TODO(Light): Stringifier::graphics_api_to_string(api), diff --git a/modules/renderer/src/render_command.cpp b/modules/renderer/src/render_command.cpp index 950a820..c65c333 100644 --- a/modules/renderer/src/render_command.cpp +++ b/modules/renderer/src/render_command.cpp @@ -24,7 +24,7 @@ auto RenderCommand::create(GLFWwindow *windowHandle, const Ref & );) default - : lt_assert( + : ensure( false, "Invalid/unsupported 'GraphicsAPI' {}", static_cast(GraphicsContext::get_graphics_api()) diff --git a/modules/renderer/src/renderer.cpp b/modules/renderer/src/renderer.cpp index 609c574..333f5d6 100644 --- a/modules/renderer/src/renderer.cpp +++ b/modules/renderer/src/renderer.cpp @@ -43,7 +43,7 @@ Renderer::Renderer( , m_target_framebuffer(nullptr) { - lt_assert(!s_context, "An instance of 'renderer' already exists, do not construct this class!"); + ensure(!s_context, "An instance of 'renderer' already exists, do not construct this class!"); s_context = this; m_view_projection_buffer = ConstantBuffer::create( @@ -151,7 +151,7 @@ void Renderer::draw_quad_impl(const glm::mat4 &transform, const glm::vec4 &tint) void Renderer::draw_quad_impl(const glm::mat4 &transform, const Ref &texture) { - lt_assert(texture, "Texture passed to renderer::draw_quad_impl"); + ensure(texture, "Texture passed to renderer::draw_quad_impl"); texture->bind(); auto map = std::span { @@ -189,7 +189,7 @@ void Renderer::draw_quad_impl( const Ref &texture ) { - lt_assert(texture, "Texture passed to renderer::draw_quad_impl"); + ensure(texture, "Texture passed to renderer::draw_quad_impl"); texture->bind(); auto map = std::span { diff --git a/modules/renderer/src/shader.cpp b/modules/renderer/src/shader.cpp index 40ca233..1c2d1fa 100644 --- a/modules/renderer/src/shader.cpp +++ b/modules/renderer/src/shader.cpp @@ -33,7 +33,7 @@ namespace lt { );); default: - lt_assert( + ensure( false, "Invalid/unsupported 'GraphicsAPI' {}", static_cast(GraphicsContext::get_graphics_api()) diff --git a/modules/renderer/src/texture.cpp b/modules/renderer/src/texture.cpp index 20a78cf..4dfa869 100644 --- a/modules/renderer/src/texture.cpp +++ b/modules/renderer/src/texture.cpp @@ -31,7 +31,7 @@ namespace lt { );) default - : lt_assert( + : ensure( false, "Invalid/unsupported 'GraphicsAPI' {}", static_cast(GraphicsContext::get_graphics_api()) diff --git a/modules/renderer/src/vertex_layout.cpp b/modules/renderer/src/vertex_layout.cpp index 9b86e8b..e515ffd 100644 --- a/modules/renderer/src/vertex_layout.cpp +++ b/modules/renderer/src/vertex_layout.cpp @@ -30,7 +30,7 @@ auto VertexLayout::create( );) default - : lt_assert( + : ensure( false, "Invalid/unsupported 'GraphicsAPI' {}", static_cast(GraphicsContext::get_graphics_api()) diff --git a/modules/ui/src/ui.cpp b/modules/ui/src/ui.cpp index 57439b1..cb98cb3 100644 --- a/modules/ui/src/ui.cpp +++ b/modules/ui/src/ui.cpp @@ -37,7 +37,7 @@ auto UserInterface::create(GLFWwindow *windowHandle, Ref sharedCo case GraphicsAPI::DirectX: lt_win(scopeUserInterface = create_scope();) break; default: - lt_assert( + ensure( false, "UserInterface::create: invalid/unsupported 'GraphicsAPI' {}", static_cast(GraphicsContext::get_graphics_api()) @@ -58,7 +58,7 @@ UserInterface::UserInterface() ) // NOLINTEND { - lt_assert( + ensure( !s_context, "UserInterface::UserInterface: an instance of 'UserInterface' already exists, do not " "construct this class!" diff --git a/modules/window/src/linux/window.cpp b/modules/window/src/linux/window.cpp index ef34e3f..93009e2 100644 --- a/modules/window/src/linux/window.cpp +++ b/modules/window/src/linux/window.cpp @@ -21,7 +21,7 @@ lWindow::lWindow(std::function callback) : m_event_callback(std::move(std::move(callback))) { // init glfw - lt_assert(glfwInit(), "lWindow::lWindow: failed to initialize 'glfw'"); + ensure(glfwInit(), "lWindow::lWindow: failed to initialize 'glfw'"); // create window glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4); @@ -30,7 +30,7 @@ lWindow::lWindow(std::function callback) glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE); m_handle = glfwCreateWindow(1u, 1u, "", nullptr, nullptr); - lt_assert(m_handle, "lWindow::lWindow: failed to create 'GLFWwindow'"); + ensure(m_handle, "lWindow::lWindow: failed to create 'GLFWwindow'"); glfwSetWindowUserPointer(m_handle, &m_event_callback); bind_glfw_events();