Stringifier + glDebugCallback
This commit is contained in:
		
							parent
							
								
									752258366d
								
							
						
					
					
						commit
						4678a7dbf6
					
				
					 7 changed files with 147 additions and 5 deletions
				
			
		| 
						 | 
				
			
			@ -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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										51
									
								
								Engine/src/Engine/Utility/Stringifier.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								Engine/src/Engine/Utility/Stringifier.cpp
									
										
									
									
									
										Normal 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";
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										15
									
								
								Engine/src/Engine/Utility/Stringifier.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								Engine/src/Engine/Utility/Stringifier.h
									
										
									
									
									
										Normal 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);
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -14,6 +14,9 @@ namespace Light {
 | 
			
		|||
 | 
			
		||||
	public:
 | 
			
		||||
		glGraphicsContext(GLFWwindow* windowHandle);
 | 
			
		||||
 | 
			
		||||
	private:
 | 
			
		||||
		void SetDebugMessageCallback();
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										9
									
								
								Sandbox/res/fragment.fragment
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								Sandbox/res/fragment.fragment
									
										
									
									
									
										Normal 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
									
								
							
							
						
						
									
										12
									
								
								Sandbox/res/vertex.vertex
									
										
									
									
									
										Normal 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;
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	Add table
		
		Reference in a new issue