diff --git a/Engine/src/Engine/Graphics/Renderer.cpp b/Engine/src/Engine/Graphics/Renderer.cpp index 238f009..1815d2b 100644 --- a/Engine/src/Engine/Graphics/Renderer.cpp +++ b/Engine/src/Engine/Graphics/Renderer.cpp @@ -39,13 +39,13 @@ namespace Light { float vertices[] = { - -0.5f, -0.5f, - 0.5f, -0.5f, - 0.0f, 0.5f, + -0.5f, -0.5f, 1.0f, 0.0f, 0.0f, 1.0f, + 0.5f, -0.5f, 0.0f, 1.0f, 0.0f, 1.0f, + 0.0f, 0.5f, 0.0f, 0.0f, 1.0f, 1.0f, }; - m_VertexBuffer = std::unique_ptr(VertexBuffer::Create(2 * 3, vertices)); - m_VertexLayout = std::unique_ptr(VertexLayout::Create(m_VertexBuffer.get(), { VertexElementType::Float2 })); + m_VertexBuffer = std::unique_ptr(VertexBuffer::Create((2 + 4) * 3, vertices)); + m_VertexLayout = std::unique_ptr(VertexLayout::Create(m_VertexBuffer.get(), { VertexElementType::Float2, VertexElementType::Float4 })); } Renderer* Renderer::Create(std::shared_ptr renderCommand) diff --git a/Engine/src/Engine/Utility/Stringifier.cpp b/Engine/src/Engine/Utility/Stringifier.cpp new file mode 100644 index 0000000..ea1410b --- /dev/null +++ b/Engine/src/Engine/Utility/Stringifier.cpp @@ -0,0 +1,51 @@ +#include "ltpch.h" +#include "Stringifier.h" + +#include + +namespace Light { + + std::string Stringifier::glDebugMsgSeverity(unsigned int severity) + { + switch (severity) + { + case GL_DEBUG_SEVERITY_NOTIFICATION: return "GL_DEBUG_SEVERITY_NOTIFICATION"; + case GL_DEBUG_SEVERITY_LOW: return "GL_DEBUG_SEVERITY_LOW"; + case GL_DEBUG_SEVERITY_MEDIUM: return "GL_DEBUG_SEVERITY_MEDIUM"; + case GL_DEBUG_SEVERITY_HIGH: return "GL_DEBUG_SEVERITY_HIGH"; + default: return "UNKNOWN"; + } + } + + std::string Stringifier::glDebugMsgSource(unsigned int source) + { + switch (source) + { + case GL_DEBUG_SOURCE_API: return "GL_DEBUG_SOURCE_API"; + case GL_DEBUG_SOURCE_WINDOW_SYSTEM: return "GL_DEBUG_SOURCE_WINDOW_SYSTEM"; + case GL_DEBUG_SOURCE_SHADER_COMPILER: return "GL_DEBUG_SOURCE_SHADER_COMPILER"; + case GL_DEBUG_SOURCE_THIRD_PARTY: return "GL_DEBUG_SOURCE_THIRD_PARTY"; + case GL_DEBUG_SOURCE_APPLICATION: return "GL_DEBUG_SOURCE_APPLICATION"; + case GL_DEBUG_SOURCE_OTHER: return "GL_DEBUG_SOURCE_OTHER"; + default: return "UNKNOWN"; + } + } + + std::string Stringifier::glDebugMsgType(unsigned int type) + { + switch (type) + { + case GL_DEBUG_TYPE_ERROR: return "GL_DEBUG_TYPE_ERROR"; + case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR: return "GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR"; + case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR: return "GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR"; + case GL_DEBUG_TYPE_PORTABILITY: return "GL_DEBUG_TYPE_PORTABILITY"; + case GL_DEBUG_TYPE_PERFORMANCE: return "GL_DEBUG_TYPE_PERFORMANCE"; + case GL_DEBUG_TYPE_MARKER: return "GL_DEBUG_TYPE_MARKER"; + case GL_DEBUG_TYPE_PUSH_GROUP: return "GL_DEBUG_TYPE_PUSH_GROUP"; + case GL_DEBUG_TYPE_POP_GROUP: return "GL_DEBUG_TYPE_POP_GROUP"; + case GL_DEBUG_TYPE_OTHER: return "GL_DEBUG_TYPE_OTHER"; + default: return "UNKNOWN"; + } + } + +} \ No newline at end of file diff --git a/Engine/src/Engine/Utility/Stringifier.h b/Engine/src/Engine/Utility/Stringifier.h new file mode 100644 index 0000000..08a30fc --- /dev/null +++ b/Engine/src/Engine/Utility/Stringifier.h @@ -0,0 +1,15 @@ +#pragma once + +#include "Base.h" + +namespace Light { + + class Stringifier + { + public: + static std::string glDebugMsgSeverity(unsigned int severity); + static std::string glDebugMsgSource(unsigned int source); + static std::string glDebugMsgType(unsigned int type); + }; + +} \ No newline at end of file diff --git a/Engine/src/Platform/GraphicsAPI/OpenGL/glGraphicsContext.cpp b/Engine/src/Platform/GraphicsAPI/OpenGL/glGraphicsContext.cpp index 2fc2248..adef5c4 100644 --- a/Engine/src/Platform/GraphicsAPI/OpenGL/glGraphicsContext.cpp +++ b/Engine/src/Platform/GraphicsAPI/OpenGL/glGraphicsContext.cpp @@ -9,6 +9,8 @@ #include "Graphics/VertexLayout.h" #include "UserInterface/UserInterface.h" +#include "Utility/Stringifier.h" + #include #include @@ -23,9 +25,59 @@ namespace Light { LT_ENGINE_ASSERT(gladLoadGLLoader((GLADloadproc)glfwGetProcAddress), "glGraphicsContext::glGraphicsContext: gladLoadGLLoader: failed to initialize opengl context"); + SetDebugMessageCallback(); + LT_ENGINE_INFO("glGraphicsContext:"); LT_ENGINE_INFO(" Renderer: {}", glGetString(GL_RENDERER)); LT_ENGINE_INFO(" Version: {}", glGetString(GL_VERSION)); } + void glGraphicsContext::SetDebugMessageCallback() + { +#if defined(LT_DEBUG) + glEnable(GL_DEBUG_OUTPUT); + glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, nullptr, GL_TRUE); +#elif defined(LT_RELEASE) + glEnable(GL_DEBUG_OUTPUT); + glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, nullptr, GL_FALSE); + glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_HIGH, 0, nullptr, GL_TRUE); +#else // LT_DIST + return; +#endif + + glDebugMessageCallback([](unsigned int source, unsigned int type, + unsigned int id, unsigned int severity, + int length, const char* message, + const void* userParam) + { + switch (severity) + { + case GL_DEBUG_SEVERITY_HIGH: + LT_ENGINE_CRITICAL("glMessageCallback: Severity: {} :: Source: {} :: Type: {} :: ID: {}", + Stringifier::glDebugMsgSeverity(severity), + Stringifier::glDebugMsgSource(source), + Stringifier::glDebugMsgType(type), + id); + LT_ENGINE_CRITICAL(" {}", message); + return; + case GL_DEBUG_SEVERITY_MEDIUM: case GL_DEBUG_SEVERITY_LOW: + LT_ENGINE_WARN("glMessageCallback: Severity: {} :: Source: {} :: Type: {} :: ID: {}", + Stringifier::glDebugMsgSeverity(severity), + Stringifier::glDebugMsgSource(source), + Stringifier::glDebugMsgType(type), + id); + LT_ENGINE_WARN(" {}", message); + return; + case GL_DEBUG_SEVERITY_NOTIFICATION: + LT_ENGINE_TRACE("glMessageCallback: Severity: {} :: Source: {} :: Type: {} :: ID: {}", + Stringifier::glDebugMsgSeverity(severity), + Stringifier::glDebugMsgSource(source), + Stringifier::glDebugMsgType(type), + id); + LT_ENGINE_TRACE(" {}", message); + return; + } + }, nullptr); + } + } \ No newline at end of file diff --git a/Engine/src/Platform/GraphicsAPI/OpenGL/glGraphicsContext.h b/Engine/src/Platform/GraphicsAPI/OpenGL/glGraphicsContext.h index 1d9329a..3d94e72 100644 --- a/Engine/src/Platform/GraphicsAPI/OpenGL/glGraphicsContext.h +++ b/Engine/src/Platform/GraphicsAPI/OpenGL/glGraphicsContext.h @@ -14,6 +14,9 @@ namespace Light { public: glGraphicsContext(GLFWwindow* windowHandle); + + private: + void SetDebugMessageCallback(); }; } \ No newline at end of file diff --git a/Sandbox/res/fragment.fragment b/Sandbox/res/fragment.fragment new file mode 100644 index 0000000..7a5fdd9 --- /dev/null +++ b/Sandbox/res/fragment.fragment @@ -0,0 +1,9 @@ +#version 450 core + +out vec4 FragColor; +in vec4 vsout_Color; + +void main() +{ + FragColor = vsout_Color; +} \ No newline at end of file diff --git a/Sandbox/res/vertex.vertex b/Sandbox/res/vertex.vertex new file mode 100644 index 0000000..2d0f490 --- /dev/null +++ b/Sandbox/res/vertex.vertex @@ -0,0 +1,12 @@ +#version 450 core + +layout(location = 0) in vec2 a_Position; +layout(location = 1) in vec4 a_Color; + +out vec4 vsout_Color; + +void main() +{ + gl_Position = vec4(a_Position, 0.0, 1.0); + vsout_Color = a_Color; +} \ No newline at end of file