测试OpenGL兼容性

时间:2015-02-21 15:41:07

标签: opengl

我对我的代码感到担忧,该代码是在考虑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()

1 个答案:

答案 0 :(得分:1)

在查看版本时,听起来好像是在混淆两个方面。为了更清楚,向OpenGL添加新功能通常有两个主要步骤:

  1. 定义了扩展名。它可用于支持特定扩展的实现。使用它时,入口点将包含EXTARB或供应商名称作为其名称的一部分。
  2. 对于某些扩展,后来决定它们应该成为核心功能。有时新的核心功能可能与扩展名完全相同,有时可能会在升级到核心功能时进行调整。一旦它的核心功能,入口点将看起来像任何其他OpenGL入口点,没有任何特殊的前/后缀。
  3. 现在,如果您查看扩展规范,您会看到:

      

    需要OpengGL 3.1

    这是指上面的第1步。有人定义了一个扩展,并说该扩展基于OpenGL 3.1。因此,任何支持至少3.1版的OpenGL实现都可以为此扩展提供支持。它仍然是一个扩展,这意味着它是可选的。要使用它,您需要:

    • 至少拥有OpenGL 3.1。
    • 测试扩展名是否可用。
    • 在入口点使用EXT / ARB /供应商前缀/后缀。

    肯定意味着该功能是核心OpenGL 3.1的一部分。

    如果有人说:

      

    DSA位于OpenGL 4.5核心配置文件中

    这是指上面的第2步。最初在DSA扩展中定义的功能在4.5中被提升为核心功能。要使用此核心功能,您需要:

    • 至少拥有OpenGL 4.5。
    • 在入口点使用EXT / ARB /供应商前缀/后缀。

    一旦扩展是您要定位的OpenGL版本的核心功能,这通常是您应该做的。所以在这种情况下,你不再使用前缀/后缀了。

    确保您仅使用目标OpenGL版本中的功能并不像您想象的那么简单。创建此版本的OpenGL上下文通常是不够的。实现可以并且通常会为您提供支持更高版本的上下文。您指定的版本被视为最低版本,而不是您获得的确切版本。

    如果您在需要扩展加载器(Windows,Linux)的平台上工作,我相信有一些扩展加载器可以让您为特定的OpenGL版本生成头文件。这可能是你最好的选择。除此之外,您需要检查规格,以验证您要使用的电话在您要定位的版本中是否可用。