Stringifier + glDebugCallback

This commit is contained in:
Light3039 2021-05-31 23:28:29 +04:30
parent 752258366d
commit 4678a7dbf6
7 changed files with 147 additions and 5 deletions

View file

@ -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>(VertexBuffer::Create(2 * 3, vertices));
m_VertexLayout = std::unique_ptr<VertexLayout>(VertexLayout::Create(m_VertexBuffer.get(), { VertexElementType::Float2 }));
m_VertexBuffer = std::unique_ptr<VertexBuffer>(VertexBuffer::Create((2 + 4) * 3, vertices));
m_VertexLayout = std::unique_ptr<VertexLayout>(VertexLayout::Create(m_VertexBuffer.get(), { VertexElementType::Float2, VertexElementType::Float4 }));
}
Renderer* Renderer::Create(std::shared_ptr<RenderCommand> renderCommand)

View file

@ -0,0 +1,51 @@
#include "ltpch.h"
#include "Stringifier.h"
#include <glad/glad.h>
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";
}
}
}

View file

@ -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);
};
}

View file

@ -9,6 +9,8 @@
#include "Graphics/VertexLayout.h"
#include "UserInterface/UserInterface.h"
#include "Utility/Stringifier.h"
#include <glad/glad.h>
#include <glfw/glfw3.h>
@ -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);
}
}

View file

@ -14,6 +14,9 @@ namespace Light {
public:
glGraphicsContext(GLFWwindow* windowHandle);
private:
void SetDebugMessageCallback();
};
}

View file

@ -0,0 +1,9 @@
#version 450 core
out vec4 FragColor;
in vec4 vsout_Color;
void main()
{
FragColor = vsout_Color;
}

12
Sandbox/res/vertex.vertex Normal file
View file

@ -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;
}