4

我知道在初始化上下文后我必须将glfwGetProcAddress函数传递给函数。gladLoadGLLoaderGLFW 文档说这个函数返回当前上下文的指定函数的地址。根据这些信息,如果我想在另一个上下文中绘制一些东西,我必须输入

glfwMakeContextCurrent(*window*)
gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)

每次我想更改绘图上下文。glfwMakeContextCurrent但是,只需使用函数更改上下文就足够了。文档还备注

不保证给定函数的地址在上下文​​之间是相同的。

但似乎返回的地址在上下文​​之间实际上是相同的(至少在 Windows 中)。问题是,为了实现稳定和便携的行为,这样做的真正方法是什么?

4

1 回答 1

4

技术上是的:从 OpenGL 上下文中检索的函数指针对该特定上下文有效。但是,对于大多数实际目的,您可以忽略这一点。如果两个上下文可以共享对象,那么它们几乎肯定会共享函数指针。

如果您想解决无法跨上下文共享函数指针的情况,最好的选择是编写一个专门用于处理这种可能性的加载器。例如,您可以修改 GLAD 以将 OpenGL 函数放入一个结构中,然后将这些函数加载到不同的结构中以用于不同的上下文。

于 2020-07-27T13:44:57.467 回答