Debug
- Added the Debug folder - Moved the Logger from Core to Debug - Added Exceptions ( glException & dxException ) - Debugging the graphics is now a bit easier
This commit is contained in:
		
							parent
							
								
									bb604e9540
								
							
						
					
					
						commit
						31560897cd
					
				
					 11 changed files with 103 additions and 17 deletions
				
			
		| 
						 | 
					@ -1,9 +1,11 @@
 | 
				
			||||||
#pragma once
 | 
					#pragma once
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef LOGGER_H
 | 
					#ifndef LOGGER_H
 | 
				
			||||||
	#include "Core/Logger.h"
 | 
						#include "Debug/Logger.h"
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "Debug/Exceptions.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <memory>
 | 
					#include <memory>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define LT_WIN(x) 
 | 
					#define LT_WIN(x) 
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,6 @@
 | 
				
			||||||
#include "ltpch.h"
 | 
					#include "ltpch.h"
 | 
				
			||||||
#include "Application.h"
 | 
					#include "Application.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "Logger.h"
 | 
					 | 
				
			||||||
#include "Window.h"
 | 
					#include "Window.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "Events/Event.h"
 | 
					#include "Events/Event.h"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										49
									
								
								Engine/src/Engine/Debug/Exceptions.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								Engine/src/Engine/Debug/Exceptions.cpp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,49 @@
 | 
				
			||||||
 | 
					#include "ltpch.h"
 | 
				
			||||||
 | 
					#include "Exceptions.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "Utility/Stringifier.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <glad/glad.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef LIGHT_PLATFORM_WINDOWS
 | 
				
			||||||
 | 
						#include <Windows.h>
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Light {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						glException::glException(unsigned int source, unsigned int type, unsigned int id, const char* msg)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							LT_ENGINE_CRITICAL("________________________________________");
 | 
				
			||||||
 | 
							LT_ENGINE_CRITICAL("glException::glException::");
 | 
				
			||||||
 | 
							LT_ENGINE_CRITICAL("        Severity: {}", Stringifier::glDebugMsgSeverity(GL_DEBUG_SEVERITY_HIGH));
 | 
				
			||||||
 | 
							LT_ENGINE_CRITICAL("        Source  : {}", Stringifier::glDebugMsgSource(source));
 | 
				
			||||||
 | 
							LT_ENGINE_CRITICAL("        Type    : {}", Stringifier::glDebugMsgType(type));
 | 
				
			||||||
 | 
							LT_ENGINE_CRITICAL("        ID      : {}", id);
 | 
				
			||||||
 | 
							LT_ENGINE_CRITICAL("        Vendor  : {}", glGetString(GL_VENDOR));
 | 
				
			||||||
 | 
							LT_ENGINE_CRITICAL("        Renderer: {}", glGetString(GL_RENDERER));
 | 
				
			||||||
 | 
							LT_ENGINE_CRITICAL("        Version : {}", glGetString(GL_VERSION));
 | 
				
			||||||
 | 
							LT_ENGINE_CRITICAL("        SVersion: {}", glGetString(GL_SHADING_LANGUAGE_VERSION));
 | 
				
			||||||
 | 
							LT_ENGINE_CRITICAL("        {}", msg);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							LT_ENGINE_CRITICAL("________________________________________");
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						dxException::dxException(long hr, const char* file, int line)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							char* message;
 | 
				
			||||||
 | 
							FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
 | 
				
			||||||
 | 
							               nullptr, hr,
 | 
				
			||||||
 | 
							               MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
 | 
				
			||||||
 | 
							               (LPSTR)(&message), NULL, nullptr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// #todo: format better
 | 
				
			||||||
 | 
							LT_ENGINE_CRITICAL("________________________________________");
 | 
				
			||||||
 | 
							LT_ENGINE_CRITICAL("dxException::dxException::");
 | 
				
			||||||
 | 
							LT_ENGINE_CRITICAL("        File: {}, Line: {}", file, line);
 | 
				
			||||||
 | 
							LT_ENGINE_CRITICAL("        {}", message);
 | 
				
			||||||
 | 
							LT_ENGINE_CRITICAL("________________________________________");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							LocalFree(message);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										19
									
								
								Engine/src/Engine/Debug/Exceptions.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								Engine/src/Engine/Debug/Exceptions.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,19 @@
 | 
				
			||||||
 | 
					#pragma once
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DXC(x) hr = x; if(FAILED(x)) throw dxException(hr, __FILE__, __LINE__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Light {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// OpenGL
 | 
				
			||||||
 | 
						struct glException : std::exception
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							glException(unsigned int source, unsigned int type, unsigned int id, const char* msg);
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// DirectX
 | 
				
			||||||
 | 
						struct dxException : std::exception
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							dxException(long hr, const char* file, int line);
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -2,14 +2,36 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef LIGHT_PLATFORM_WINDOWS
 | 
					#ifdef LIGHT_PLATFORM_WINDOWS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <LightEngine.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// To be defined in client project
 | 
					// To be defined in client project
 | 
				
			||||||
extern Light::Application* Light::CreateApplication();
 | 
					extern Light::Application* Light::CreateApplication();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int main(int argc, char** argv)
 | 
					int main(int argc, char** argv)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	auto application = Light::CreateApplication();
 | 
						Light::Application* application = nullptr;
 | 
				
			||||||
	application->GameLoop();
 | 
						int exitCode = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						try
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							application = Light::CreateApplication();
 | 
				
			||||||
 | 
							LT_ENGINE_ASSERT(application, "main: Light::Application is not intialized");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							application->GameLoop();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						catch(Light::glException)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							LT_ENGINE_CRITICAL("main: exitting due to unhandled glException");
 | 
				
			||||||
 | 
							exitCode = -2;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						catch (Light::dxException)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							LT_ENGINE_CRITICAL("main: exitting due to unhandled dxException");
 | 
				
			||||||
 | 
							exitCode = -3;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	delete application;
 | 
						delete application;
 | 
				
			||||||
 | 
						return exitCode;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					@ -3,7 +3,9 @@
 | 
				
			||||||
// Core
 | 
					// Core
 | 
				
			||||||
#include "Core/Application.h"
 | 
					#include "Core/Application.h"
 | 
				
			||||||
#include "Core/Window.h"
 | 
					#include "Core/Window.h"
 | 
				
			||||||
#include "Core/Logger.h"
 | 
					
 | 
				
			||||||
 | 
					// Debug
 | 
				
			||||||
 | 
					#include "Debug/Logger.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Events
 | 
					// Events
 | 
				
			||||||
#include "Events/Event.h"
 | 
					#include "Events/Event.h"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,4 +3,3 @@
 | 
				
			||||||
#include "Base.h"
 | 
					#include "Base.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// DirectX Call
 | 
					// DirectX Call
 | 
				
			||||||
#define DXC(x) hr = x; if(FAILED(x)) __debugbreak()
 | 
					 | 
				
			||||||
| 
						 | 
					@ -107,13 +107,11 @@ namespace Light {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	void dxGraphicsContext::LogDebugData()
 | 
						void dxGraphicsContext::LogDebugData()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		// log some information about dx context //
 | 
					 | 
				
			||||||
		// locals 
 | 
							// locals 
 | 
				
			||||||
		IDXGIDevice* DXGIDevice;
 | 
							IDXGIDevice* DXGIDevice;
 | 
				
			||||||
		IDXGIAdapter* DXGIAdapter;
 | 
							IDXGIAdapter* DXGIAdapter;
 | 
				
			||||||
		DXGI_ADAPTER_DESC DXGIAdapterDesc;
 | 
							DXGI_ADAPTER_DESC DXGIAdapterDesc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// initialize Locals
 | 
					 | 
				
			||||||
		m_Device->QueryInterface(__uuidof(IDXGIDevice), (void**)&DXGIDevice);
 | 
							m_Device->QueryInterface(__uuidof(IDXGIDevice), (void**)&DXGIDevice);
 | 
				
			||||||
		DXGIDevice->GetAdapter(&DXGIAdapter);
 | 
							DXGIDevice->GetAdapter(&DXGIAdapter);
 | 
				
			||||||
		DXGIAdapter->GetDesc(&DXGIAdapterDesc);
 | 
							DXGIAdapter->GetDesc(&DXGIAdapterDesc);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -43,6 +43,7 @@ namespace Light {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	void glGraphicsContext::LogDebugData()
 | 
						void glGraphicsContext::LogDebugData()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
 | 
							// #todo: log more information
 | 
				
			||||||
		LT_ENGINE_INFO("________________________________________");
 | 
							LT_ENGINE_INFO("________________________________________");
 | 
				
			||||||
		LT_ENGINE_INFO("GraphicsContext::");
 | 
							LT_ENGINE_INFO("GraphicsContext::");
 | 
				
			||||||
		LT_ENGINE_INFO("        API     : OpenGL");
 | 
							LT_ENGINE_INFO("        API     : OpenGL");
 | 
				
			||||||
| 
						 | 
					@ -53,10 +54,10 @@ namespace Light {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	void glGraphicsContext::SetDebugMessageCallback()
 | 
						void glGraphicsContext::SetDebugMessageCallback()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
#if defined(LT_DEBUG)
 | 
					#if defined(LIGHT_DEBUG)
 | 
				
			||||||
		glEnable(GL_DEBUG_OUTPUT);
 | 
							glEnable(GL_DEBUG_OUTPUT);
 | 
				
			||||||
		glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, nullptr, GL_TRUE);
 | 
							glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, nullptr, GL_TRUE);
 | 
				
			||||||
#elif defined(LT_RELEASE)
 | 
					#elif defined(LIGHT_RELEASE)
 | 
				
			||||||
		glEnable(GL_DEBUG_OUTPUT);
 | 
							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_DONT_CARE, 0, nullptr, GL_FALSE);
 | 
				
			||||||
		glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_HIGH, 0, nullptr, GL_TRUE);
 | 
							glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_HIGH, 0, nullptr, GL_TRUE);
 | 
				
			||||||
| 
						 | 
					@ -72,14 +73,9 @@ namespace Light {
 | 
				
			||||||
			switch (severity)
 | 
								switch (severity)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
			case GL_DEBUG_SEVERITY_HIGH:
 | 
								case GL_DEBUG_SEVERITY_HIGH:
 | 
				
			||||||
				LT_ENGINE_CRITICAL("glMessageCallback: Severity: {} :: Source: {} :: Type: {} :: ID: {}",
 | 
									throw glException(source, type, id, message);
 | 
				
			||||||
				                   Stringifier::glDebugMsgSeverity(severity),
 | 
					 | 
				
			||||||
				                   Stringifier::glDebugMsgSource(source),
 | 
					 | 
				
			||||||
				                   Stringifier::glDebugMsgType(type),
 | 
					 | 
				
			||||||
				                   id);
 | 
					 | 
				
			||||||
				__debugbreak();
 | 
					 | 
				
			||||||
				LT_ENGINE_CRITICAL("        {}", message);
 | 
					 | 
				
			||||||
				return;
 | 
									return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			case GL_DEBUG_SEVERITY_MEDIUM: case  GL_DEBUG_SEVERITY_LOW:
 | 
								case GL_DEBUG_SEVERITY_MEDIUM: case  GL_DEBUG_SEVERITY_LOW:
 | 
				
			||||||
				LT_ENGINE_WARN("glMessageCallback: Severity: {} :: Source: {} :: Type: {} :: ID: {}",
 | 
									LT_ENGINE_WARN("glMessageCallback: Severity: {} :: Source: {} :: Type: {} :: ID: {}",
 | 
				
			||||||
				               Stringifier::glDebugMsgSeverity(severity),
 | 
									               Stringifier::glDebugMsgSeverity(severity),
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue