opengl - 创建一个假的 OpenGL 上下文以加载扩展

标签 opengl d glfw derelict3

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

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

所以,我使用了这个黑客:

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

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

最佳答案

Is there a proper way to fake a context, or to load the extensions without a context?

这取决于平台:

对于 Windows:通过中间窗口(不必在屏幕上可见地映射)执行此操作是在 Windows 上可靠加载扩展的唯一方法。

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

关于opengl - 创建一个假的 OpenGL 上下文以加载扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16328025/

相关文章:

D2 : empty string in a conditional statement

c++ - 向所有 FBO 颜色附件广播片段着色器输出?

c++ - OpenGL 着色器不绘制东西 :/

c - OpenGL 应用程序中不显示三角形

opengl - 在opengl中绘制具有粗边的多色三角形

sdl - 带参数的 D 语言函数调用

mingw - 使用MinGW设置GLFW

c++ - OpenGL c++ - 出现不需要的黑色三角形

performance - opengl3 20k Sprite 帧率慢?

d2 : What are semantics of opDot?