Files
FlaxEngine/Source/Engine/GraphicsDevice/OpenGL/RenderToolsOGL.cpp
2020-12-07 23:40:54 +01:00

76 lines
1.6 KiB
C++

// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved.
#include "RenderToolsOGL.h"
#if GRAPHICS_API_OPENGL
#include "Engine/Core/Types/StringBuilder.h"
#include "Engine/Core/Log.h"
const Char* RenderToolsOGL::GetErrorString(GLenum errorCode)
{
switch (errorCode)
{
#define OGL_ERROR(name) case name: return TEXT(#name)
OGL_ERROR(GL_INVALID_ENUM);
OGL_ERROR(GL_INVALID_VALUE);
OGL_ERROR(GL_INVALID_OPERATION);
OGL_ERROR(GL_OUT_OF_MEMORY);
OGL_ERROR(GL_INVALID_FRAMEBUFFER_OPERATION);
#undef OGL_ERROR
}
return nullptr;
}
void RenderToolsOGL::CheckError(const char* file, uint32 line)
{
GLenum errorCode = glGetError();
if (errorCode != GL_NO_ERROR)
{
StringBuilder sb;
sb.AppendFormat(TEXT("OpenGL error at {0}:{1}"), file, line);
const Char* errorString = GetErrorString(errorCode);
if (errorString)
{
sb.AppendLine().Append(errorString);
}
#if PLATFORM_WINDOWS
{
HGLRC context = wglGetCurrentContext();
if (!context)
{
sb.AppendLine().Append(TEXT("No OpenGL context set!"));
}
}
#endif
/*
do
{
const Char* errorString = GetErrorString(errorCode);
if (errorString)
{
sb.AppendLine().Append(errorString);
}
errorCode = glGetError();
} while (errorCode != GL_NO_ERROR);
*/
LOG_STR(Fatal, sb.ToString());
}
}
void RenderToolsOGL::ErrorCallback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message, GLvoid* userParam)
{
if (type != GL_DEBUG_TYPE_PERFORMANCE && type != GL_DEBUG_TYPE_OTHER)
{
LOG(Fatal, "OpenGL error: {0}", message);
}
}
#endif