我对我的代码感到担忧,该代码是在考虑OpenGL 3.3硬件级支持的情况下开发的。但是,我想使用某些extesntions,并希望确保它们在使用之前都需要OpenGL 3.3或更低版本。举个例子,ARB_draw_indirect。它表示" OpengGL 3.1是必需的"但是according to this document似乎也表明该扩展在3.3中不可用。这里的问题是我的两台开发机都有4.5的硬件支持,这意味着一切正常,包括那些需要OpenGL 4.x的功能。所以我想知道如何在不购买3.3级图形卡的情况下测试3.3兼容性?简单来说,我的开发硬件与我计划支持的硬件相比太强大了,因此不确定如何测试我的代码。
编辑:在相关说明中,有EXT_direct_state_access扩展名,DSA位于OpenGL 4.5核心配置文件中。主要区别在于函数名称中的EXT后缀。假设我想坚持OpenGL 3.3支持,我应该使用带有EXT后缀的函数名吗?示例:TextureParameteriEXT()与TextureParameteri()
答案 0 :(得分:1)
在查看版本时,听起来好像是在混淆两个方面。为了更清楚,向OpenGL添加新功能通常有两个主要步骤:
EXT
,ARB
或供应商名称作为其名称的一部分。现在,如果您查看扩展规范,您会看到:
需要OpengGL 3.1
这是指上面的第1步。有人定义了一个扩展,并说该扩展基于OpenGL 3.1。因此,任何支持至少3.1版的OpenGL实现都可以为此扩展提供支持。它仍然是一个扩展,这意味着它是可选的。要使用它,您需要:
EXT
/ ARB
/供应商前缀/后缀。肯定不意味着该功能是核心OpenGL 3.1的一部分。
如果有人说:
DSA位于OpenGL 4.5核心配置文件中
这是指上面的第2步。最初在DSA扩展中定义的功能在4.5中被提升为核心功能。要使用此核心功能,您需要:
EXT
/ ARB
/供应商前缀/后缀。一旦扩展是您要定位的OpenGL版本的核心功能,这通常是您应该做的。所以在这种情况下,你不再使用前缀/后缀了。
确保您仅使用目标OpenGL版本中的功能并不像您想象的那么简单。创建此版本的OpenGL上下文通常是不够的。实现可以并且通常会为您提供支持更高版本的上下文。您指定的版本被视为最低版本,而不是您获得的确切版本。
如果您在需要扩展加载器(Windows,Linux)的平台上工作,我相信有一些扩展加载器可以让您为特定的OpenGL版本生成头文件。这可能是你最好的选择。除此之外,您需要检查规格,以验证您要使用的电话在您要定位的版本中是否可用。