在运行时加载 OpenGL 扩展

Posted

技术标签:

【中文标题】在运行时加载 OpenGL 扩展【英文标题】:Loading OpenGL extension at runtime 【发布时间】:2013-08-03 12:13:00 【问题描述】:

我正在尝试获取其他 openGL 功能,例如glCreateShader(), 如许多教程中所述,在运行时使用 wglGetProcAddress。 然而,返回值为 NULL,并且不能使用与着色器相关的函数 找到了。

如何解决这个问题? 谢谢!! :-)

【问题讨论】:

【参考方案1】:

这些功能由图形驱动程序提供。所以你有两个选择:

将您的图形驱动程序升级到最新版本,并希望制造商已经开发了该扩展。 将您的显卡更换为更好的显卡,该驱动程序提供所需的扩展。

请注意,有许多低端显卡根本无法满足扩展的要求,因此他们的制造商永远不会提供它们。

【讨论】:

【参考方案2】:

我已经解决了这个问题。 必须先创建openGL上下文,并且必须选择像素格式 并且适合您想要的扩展集。

如果您不执行上述操作,wglGetProcAddress 将找不到您的扩展。

【讨论】:

好吧,如果您阅读过wglGetProcAddress 的文档,您从一开始就知道这一点。人们,真的,阅读精美手册 (RTFM) 事实上我做了很多 RTFM,这个具体的事实没有记录在任何地方,只有在 MSDN 文档提到已经存在的像素格式时才暗示。然后我试着让它工作。请不要再花时间告诉人们如果他们阅读手册会发生什么,因为这不会带来任何贡献 来自wglGetProcAddress 参考页面,第一句:<quote> "wglGetProcAddress 函数返回 OpenGL 扩展函数的地址以用于 当前 OpenGL渲染上下文。” </quote> – 我认为很明显,要拥有 current 上下文,您首先必须创建一个并使其处于活动状态。

以上是关于在运行时加载 OpenGL 扩展的主要内容,如果未能解决你的问题,请参考以下文章

运行 mongodb-backed node app 时无法加载 C++ bson 扩展,使用纯 JS 版本错误

在 Java 中在运行时扩展或添加新类

openGL 在运行时创建纹理图集?

抑制 OpenGL 运行时警告

OpenGL - 启用调试 - 运行时 System.AccessViolationException

Qt+Windows,Windows 底层默认使用d3d还是opengl?