在未加载上下文的情况下在对象构造函数中使用 OpenGL 函数

Using OpenGL functions in object constructor without context loaded

我在初始化上下文之前创建对象时遇到问题。我的代码看起来像这样:

..
Vertex vertices[] = { ... } // declaration of object Vertices
Mesh mesh(vertices, sizeof(vertices)/sizeof(vertices[0]));
..
..
void onDisplay()
{
    ..
    mesh.Draw();
    ..
}
void init() { .. }
int main(int argc, char** argv)
{
    ..
    glutDisplayFunc(onDisplay);
    ..
}

正如我在 OpenGL site 上所读到的,问题是在初始化上下文之前创建了一个对象(由于构造函数中的代码)。如果我将 "mesh" 和 "vertices" 放在 "void init()" 中,那将解决问题,但我无法在 "void onDisplay" 中使用方法 "mesh.Draw()" - 因为object mesh 不是全局的,它只在 init() 中声明。

在 OpenGL 网站上他们讲述了如何解决这个问题,但我真的不明白我应该怎么做。

OpenGL 站点的解决方案如下:

不推荐解决方案 1,解决方案 2 对我没有帮助(至少我认为没有帮助)而且我不知道如何制定解决方案 3

在保护 GL 上下文后,将 verticesmesh 更改为(智能)指针并在 main() 中构造对象。

如果您不想更改现有代码(.-> 用于成员访问),您可以调用它们 verticesPtrmeshPtr 并创建本地在您引用它们的函数顶部引用 (Mesh& mesh = *meshPtr;)。