При открытии 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();

Ответы (0 шт):