The Window Класс устанавливает контекст GLFW в своем конструкторе, запускает основной цикл и использует свой член Renderer для обработки рисования. Класс Renderer устанавливает буферы в своем конструкторе и обрабатывает вызовы функций OpenGL.
Проблема, с которой я столкнулся, заключается в том, что OpenGL требует допустимого контекста для любых вызовов функций. Если я инициализирую Renderer до вызова конструктора Window, конструктор Renderer будет запущен до создания контекста GLFW.
Чтобы избежать этого, Я сохраняю unique_ptr для Renderer в классе Window и создаю его экземпляр с помощью std::make_unique внутри конструктора Window. Затем в деструкторе Window я вызываю std::unique_ptr::reset() перед уничтожением контекста GLFW, чтобы гарантировать возможность выполнения вызовов OpenGL для освобождения ресурсов, пока контекст действителен.< /p>
Код: Выделить всё
class Window
{
public:
Window()
{
// Initializing GLFW and creating an OpenGL context
// ...
m_renderer = std::make_unique();
}
~Window()
{
m_renderer.reset();
glfwTerminate();
}
int run()
{
while(...)
{
m_renderer->draw();
// ...
}
return 0;
}
private:
std::unique_ptr m_renderer;
// ...
}
class Renderer
{
public:
Renderer() { /* Set buffers */ }
~Renderer() { /* Free buffers */ }
draw() { glDrawElements(...); /* ... */ }
private:
// ...
}
int main()
{
Window window();
return window->run();
}
Какое решение будет лучшим?
Подробнее здесь: https://stackoverflow.com/questions/659 ... onstructor