2

无论出于何种原因,我都在手动加载 OpenGL 扩展。

我发现的每个教程都建议首先查询扩展字符串,然后将其解析为扩展列表,最后加载支持的扩展的函数指针。在我看来,这整个过程可以简化为只获取函数指针,然后检查NULL返回的任何 swglGetProcAddress或等价物。

我的问题是:中间查询步骤有什么作用?是否有可能不支持函数但*GetProcAddress返回非NULL指针?

4

2 回答 2

4

扩展字符串是 GL 实现告诉您它支持哪些扩展的正确方法。就 GL 而言,查询扩展字符串不暗示存在的函数的指针是未定义的行为。

在实践中,这种情况实际上可能会出现。对于不同的后端,通常具有相同的 GL 客户端 dll,就像 mesa 一样。该函数存在这一事实并不意味着它已为所有后端驱动程序实现。

于 2013-11-10T20:56:58.020 回答
1

中间查询步骤有什么作用?

看看,支持当前活动上下文的 OpenGL 实现实际上支持哪些扩展。也不是所有的扩展,比如新的纹理格式或着色器目标都会引入新的过程(函数),而只有新的标记。检测这些的唯一方法是查看扩展字符串。

是否有可能不支持函数但 *GetProcAddress 返回非 NULL 指针?

是的,这是可能的。

于 2013-11-11T01:59:22.860 回答