diff --git a/src/window/Window.cpp b/src/window/Window.cpp index 2a68d5a9..bc9337b2 100644 --- a/src/window/Window.cpp +++ b/src/window/Window.cpp @@ -7,6 +7,8 @@ #include using glm::vec4; +using std::cerr; +using std::endl; GLFWwindow* Window::window = nullptr; DisplaySettings* Window::settings = nullptr; @@ -79,12 +81,38 @@ void character_callback(GLFWwindow* window, unsigned int codepoint){ Events::codepoints.push_back(codepoint); } +const char* glfwErrorName(int error) { + switch (error) { + case GLFW_NO_ERROR: return "no error"; + case GLFW_NOT_INITIALIZED: return "not initialized"; + case GLFW_NO_CURRENT_CONTEXT: return "no current context"; + case GLFW_INVALID_ENUM: return "invalid enum"; + case GLFW_INVALID_VALUE: return "invalid value"; + case GLFW_OUT_OF_MEMORY: return "out of memory"; + case GLFW_API_UNAVAILABLE: return "api unavailable"; + case GLFW_VERSION_UNAVAILABLE: return "version unavailable"; + case GLFW_PLATFORM_ERROR: return "platform error"; + case GLFW_FORMAT_UNAVAILABLE: return "format unavailable"; + case GLFW_NO_WINDOW_CONTEXT: return "no window context"; + default: return "unknown error"; + } +} + +void error_callback(int error, const char* description) { + cerr << "GLFW error [0x" << std::hex << error << "]: "; + cerr << glfwErrorName(error) << endl; + if (description) { + cerr << description << endl; + } +} + int Window::initialize(DisplaySettings& settings){ Window::settings = &settings; Window::width = settings.width; Window::height = settings.height; glfwInit(); + glfwSetErrorCallback(error_callback); glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_ANY_PROFILE); @@ -94,15 +122,17 @@ int Window::initialize(DisplaySettings& settings){ window = glfwCreateWindow(width, height, settings.title, nullptr, nullptr); if (window == nullptr){ - std::cerr << "Failed to create GLFW Window" << std::endl; + cerr << "Failed to create GLFW Window" << endl; glfwTerminate(); return -1; } glfwMakeContextCurrent(window); glewExperimental = GL_TRUE; - if (glewInit() != GLEW_OK){ - std::cerr << "Failed to initialize GLEW" << std::endl; + GLenum err = glewInit(); + if (err != GLEW_OK){ + std::cerr << "Failed to initialize GLEW: " << std::endl; + std::cerr << glewGetErrorString(err) << std::endl; return -1; } glViewport(0,0, width, height);