При открытии OpenGL GLFW окна, оно сразу же закрывается
После запуска приложения открывается консольное окошко и окно GLFW, которое тут же закрывается. При этом если не использовать разделение на файлы, а писать всё в main.cpp, то программа работает корректно.
GLFW.h
#pragma once
#include <stdexcept>
#include "GLFW/glfw3.h"
namespace GL
{
class GLFW
{
public:
GLFW
(
const GLuint vMajor,
const GLuint vMinor,
const bool windowResizable = 0
);
~GLFW();
};
}
GLFW.cpp
#include "GLFW.h"
GL::GLFW::GLFW
(
const GLuint vMajor,
const GLuint vMinor,
const bool windowResizable
)
{
if (!glfwInit())
throw std::runtime_error("GLFW could not initialize");
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, vMajor);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, vMinor);
if (!windowResizable)
glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);
else
glfwWindowHint(GLFW_RESIZABLE, GL_TRUE);
}
GL::GLFW::~GLFW()
{
glfwTerminate();
}
Window.h
#pragma once
#include <iostream>
#include "GL/glew.h"
#include "GLFW.h"
namespace GL
{
class Window
{
private:
static GLFWwindow* window;
public:
Window
(
const GLuint width,
const GLuint height,
const GLchar* title
);
void clearColor
(
const GLfloat red,
const GLfloat green,
const GLfloat blue,
const GLfloat alpha
);
void clearWindow();
void loop();
~Window();
};
}
Window.cpp
#include "Window.h"
GLFWwindow* GL::Window::window;
GL::Window::Window
(
const GLuint width,
const GLuint height,
const GLchar* title
)
{
try {
GL::GLFW glfw(3, 3);
window = glfwCreateWindow(width, height, title, nullptr, nullptr);
glfwMakeContextCurrent(window);
glewExperimental = GL_TRUE;
if (glewInit() != GLEW_OK)
throw std::runtime_error("GLEW could not initialized");
if (!window)
throw std::runtime_error("Window build error");
}
catch (std::runtime_error ex) {
std::cout << "Window not be created, because :\n" << "\t- " << ex.what() << std::endl;
glfwDestroyWindow(window);
}
}
void GL::Window::clearColor
(
const GLfloat red,
const GLfloat green,
const GLfloat blue,
const GLfloat alpha
)
{
glClearColor(red, green, blue, alpha);
}
void GL::Window::clearWindow()
{
glClear(GL_COLOR_BUFFER_BIT);
}
void GL::Window::loop()
{
while (!glfwWindowShouldClose(window)) {
glfwPollEvents();
glClear(GL_COLOR_BUFFER_BIT);
glfwSwapBuffers(window);
}
}
GL::Window::~Window()
{
glfwDestroyWindow(window);
}
Main.cpp
GL::Window win(1110, 490, "Engine");
win.loop();