gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 04:59:25 30 4
gpt4 key购买 nike

我一直在玩 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);

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

最佳答案

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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com