为了加载扩展,创建一个假的OpenGL上下文

时间:2013-05-01 23:25:37

标签: opengl d glfw derelict3

我一直在玩Derelict3& glfw根据this在D中使用OpenGL,如果我想使用扩展,我需要先创建一个上下文,这是通过用glfw创建一个窗口来完成的并将其设置为当前上下文。创建并设置上下文后,我需要使用DerelictGL3.reload()加载所有扩展名。

现在,我想在创建窗口之前做好所有准备工作。其中一个准备工作是加载和编译所有着色器程序。但这需要着色器扩展,这需要Derelict3GL.reload(),拒绝在没有上下文的情况下运行...

所以,我已经使用了这个hackish hack:

auto tmpWindow=glfwCreateWindow(1,1,"",null,null);
glfwMakeContextCurrent(tmpWindow);
DerelictGL3.reload();
glfwDestroyWindow(tmpWindow);

这有效 - 我现在可以加载和编译着色器程序,然后打开真实窗口。但这对我来说似乎有些过于苛刻。是否有正确的方法来伪造上下文,或者在没有上下文的情况下加载扩展?

1 个答案:

答案 0 :(得分:3)

  

是否存在伪造上下文或在没有上下文的情况下加载扩展的正确方法?

这取决于平台:

使用Windows:通过中间窗口(不必在屏幕上明显映射)进行操作是在Windows上可靠加载扩展的唯一方法。

使用X11 / GLX:可以使用glXGetProcAddress ad立即加载扩展函数指针,扩展函数是GLX客户端库的一部分,并且对所有上下文都是通用的。但是,实际的OpenGL上下文可能不支持使用glXProcAddress有效获得的所有函数。