无论出于何种原因,我都在搞砸手动加载OpenGL扩展。
我找到的每个教程都建议首先查询扩展字符串,然后将其解析为扩展列表,最后加载支持的扩展的函数指针。在我看来,整个过程可以简化为仅获取函数指针,然后检查wglGetProcAddress
或等效项返回的任何NULL
。
我的问题是:中间查询步骤有什么用途?是否可以不支持函数,但*GetProcAddress
返回非NULL
指针?
扩展字符串是 GL 实现告诉您它支持哪些扩展的正确方法。就 GL 而言,查询指针以查找扩展字符串未暗示存在的函数是未定义的行为。
实际上,可能会出现这种情况。对于不同的后端,通常具有相同的 GL 客户端 dll,就像 mesa 一样。该函数存在的事实并不意味着它是为所有后端驱动程序实现的。
中间查询步骤有什么用途?
看看支持当前活动上下文的 OpenGL 实现实际上支持哪些扩展。此外,并非所有扩展(如新纹理格式或着色器目标)都会引入新的过程(函数),而只会引入新的令牌。检测这些内容的唯一方法是查看扩展字符串。
是否有可能不支持函数,但 *GetProcAddress 返回非 NULL 指针?
是的,这是可能的。