В приложении на C++ OpenGL после запуска окно открывается, и тут же закрывается. Что делать?
Программа написана на C++ с использованием OpenGL 3.3 и GLFW. Если использовать закомментированный в функции main код, то всё работает корректно, но если же запускать программу с описанными над main классами, то окно закрывается сразу после запуска. Это очень странно, ведь цикл внутри gameLoop всё равно идёт, это можно понять по тому - что в консоль не выводится сообщение "Engine Finished". Функция glfwCreateWindow() при этом не возвращает указатель на 0.
Код:
#include "glew.h"
#include "glfw3.h"
#include <iostream>
class GLFW
{
public:
GLFW();
~GLFW();
};
class Window
{
public:
Window(const int width, const int height, const char* title);
void gameLoop();
~Window();
private:
GLFWwindow* window_ = nullptr;
};
GLFW::GLFW()
{
glfwInit();
}
GLFW::~GLFW()
{
glfwTerminate();
}
Window::Window(const int width, const int height, const char* title)
{
GLFW glfw;
window_ = glfwCreateWindow(width, height, title, nullptr, nullptr);
glfwMakeContextCurrent(window_);
glewInit();
glewExperimental = GL_TRUE;
}
void Window::gameLoop()
{
glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
while (!glfwWindowShouldClose(window_))
{
glfwPollEvents();
glClear(GL_COLOR_BUFFER_BIT);
glfwSwapBuffers(window_);
}
}
Window::~Window()
{
glfwDestroyWindow(window_);
}
int main()
{
Window window(1024, 512, "Synthetic Engine");
window.gameLoop();
std::cout << "Engine Finished" << std::endl;
/*glfwInit();
GLFWwindow* window_ = glfwCreateWindow(1024, 512, "Synthetic Engine", nullptr, nullptr);
glfwMakeContextCurrent(window_);
glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
while (!glfwWindowShouldClose(window_)) {
glfwPollEvents();
glClear(GL_COLOR_BUFFER_BIT);
glfwSwapBuffers(window_);
}*/
return 0;
}