(OpenGL)wglCreateContext()上下文';s版本

(OpenGL)wglCreateContext()上下文';s版本,opengl,Opengl,我想知道wglCreateContext()的哪个版本将返回给我。它是否总是返回可用的更高版本?你有关于这个的官方文档链接吗?没有,它没有定义。如果你想要任何保证,你需要要求一个特定的版本 但是,由于需要旧版支持,您通常需要一个兼容性配置文件。您需要使用扩展名中的wglcreateContextAttribsarb(…)。 大意是: //请求OpenGL 3.3上下文 const GLuint attribs[]={WGL_CONTEXT_MAJOR_VERSION_ARB,3, WGL_上下文

我想知道wglCreateContext()的哪个版本将返回给我。它是否总是返回可用的更高版本?你有关于这个的官方文档链接吗?

没有,它没有定义。如果你想要任何保证,你需要要求一个特定的版本

但是,由于需要旧版支持,您通常需要一个兼容性配置文件。

您需要使用扩展名中的
wglcreateContextAttribsarb(…)
。 大意是:
//请求OpenGL 3.3上下文
const GLuint attribs[]={WGL_CONTEXT_MAJOR_VERSION_ARB,3,
WGL_上下文_次要_版本_ARB,3,
0 };
HGLRC hRC=wglCreateContextAttribsARB(hDC,0,attribs);
具有讽刺意味的是,这意味着创建OpenGL上下文、加载该扩展、破坏原始上下文并通过调用
wglCreateContextAttribsARB(…)
创建新上下文。有关更多详细信息,请参阅列出的扩展规范I


支持此扩展时,调用
wglCreateContext(hdc)
相当于打电话
wglCreateContextAttribsARB(hdc,0,NULL)

这并不是默认情况下需要兼容性配置文件的原因。这使得15年前的旧软件继续运行。如果他们突然改变了默认行为,为您提供了一个核心配置文件,那么大多数OpenGL软件将无法运行。好吧,这可能是添加其他信息的一个原因:没有明确请求版本(最后一段“相当于…”)具有非授权含义“与OpenGL 1.0向后兼容的最新支持版本”。这通常是现在的3.2(苹果/英特尔)或3.3(其他所有人)兼容配置文件。不幸的是,措辞是“应该”“,所以你不能100%依赖这种行为。@Damon:这对苹果来说毫无意义。如果您不在OSX中请求上下文版本,则始终会得到2.1。不过Intel有点不同,Mesa不支持兼容性配置文件,所以如果你不请求core,通常会得到3.0环境。啊,苹果让我感到惊讶,我觉得他们支持3.2(根据规范,这是他们“通常”应该返回的)。但是,我想,考虑到措辞松散,他们返回的任何内容都是“正确的”。@Damon:他们确实支持3.2,事实上,他们目前支持4.1。但是,如果您请求一个核心概要文件,则只能获得3.2-4.1上下文。您无法在OS X上实际请求显式版本,您可以获得非核心配置文件(2.1)或核心配置文件(介于3.2和4.1之间,无论您的硬件/操作系统版本支持什么)。