繁体   English   中英

列出运行时使用的opengl扩展

[英]List opengl extensions USED in runtime

我如何获得在C ++运行时在程序中使用的带有openGl扩展的列表。 澄清,我不想在我的平台上使用扩展,我不想我可以执行的扩展,我想要我在代码中使用的扩展的列表。 这是在开始执行之前检查此扩展名是否可用。 我正在寻找GLEW,但是GLEW是为

确定目标平台上支持哪些OpenGL扩展。

而我想要的是一种获取正在使用的扩展的方法。 如果有人不知道运行时方式,请告诉我,因为也许也很有用。

另外,我想让您知道如何确定要使用的最低Opengl版本。

实际上,处理扩展的标准方法就地处理 :在尝试调用扩展名之前先进行可用性测试。

if (GLEW_ARB_vertex_program) 
{ 
  ...  // Do something with ARB_vertex_program
}

更复杂的OpenGl程序将对多个扩展可用性进行测试,并据此做出决定:

if (GLEW_ARB_vertex_array_object && other stuff)
{
   renderingTechnic = VERTEX;
}
else
{
   renderingTechnic = BEGIN_END;
}

... etc

如果您想要实际使用的扩展名列表,它将变得很棘手。

您必须检测以下情况:

if (GLEW_ARB_vertex_program && 0) // YOU SHALL NOT PASS
{ 
  ...  // Do something with ARB_vertex_program
}

在这种情况下,您将永远不会输入那么一个语句,但是您的工具可能很难检测到它。

这里可以使用代码覆盖工具来执行这种工作,但是在此处不能选择使用嵌入工具来在运行时与可用扩展进行比较。

看看输出的符号表都不是解决方案:

  • exe文件将不包含任何OpenGl函数。
  • OpenGl库的一个将包含所有可能的功能(不可用,不可 )。

如果您的代码库非常笨拙,则只需搜索“ gl_EXT _”,“ gl_ARB_”等,然后进行手动检查和一些纪律操作,以尝试并记录使用的所有扩展即可。

对于最低版本; 同样,这是相当基本的东西,您在编写代码时需要已经知道。 但是在这里,我认为使用GLEW可以为您提供帮助。 如果有内存,则GLEW使用可以定义的预处理器宏来设置所需的OpenGL标准版本。 首先将其设置为较低的值(例如1.1),然后查看代码是否可以编译和运行。 如果是这样,那可能就是您所需的最低版本。 如果不是,请增加版本,然后重试。

通常的方法是在开始实际编码之前确定要使用的扩展。 而且,如果稍后进行更改,则可以立即将可用性测试放在接近初始化的位置,以便您可以终止于运行时错误消息,也可以退回到备用代码路径。

当然,首选的方法是根本不使用扩展名 ,而坚持使用普通的OpenGL版本配置文件。 是的,通过扩展机制加载了OpenGL-1.2之后的所有内容,但这并没有使其扩展。 因此,如果您知道您的程序绝对需要OpenGL-3.0,但是除此之外,您只需进行测试即可完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM