1
OpenGL兼容性,命名约定以及ARB与EXT
我以为我对OpenGL命名约定和扩展的工作方式已经形成了大致的了解,直到偶然发现一个令我困惑的案例。 到目前为止,这是我的理解: 没有后缀 -例如glGenBuffers()。此功能是核心配置文件的一部分。该wiki页面告诉我,这是添加到从1.5版本开始核心简档。 ARB-例如glGenBuffersARB()。此功能是标准化GL_ARB_vertex_buffer_object扩展的一部分。此扩展的规范GenBuffersARB()在“新过程和函数”部分中明确声明。“依赖关系”部分告诉我,如果硬件支持扩展,则可以从1.4+上下文访问此文件。 EXT-这些是特定于供应商的扩展和功能,只有某些供应商可以支持。顶点缓冲区对象在注册表中似乎没有EXT扩展名。 这是我的理解破裂的地方: glGenFramebuffers正如Wiki所示,在3.0中已添加到核心。 现在,我想以低于3.0的核心配置文件版本访问帧缓冲区功能。因此,我想将其用作扩展。规范注册表告诉我,有两个可用的扩展名-ARB和EXT。 问题1-如果存在ARB扩展名,为什么存在EXT扩展名?您是否总会选择标准化的而不是特定于供应商的一种? 查看“新过程和函数”部分中的ARB规范可知,该扩展定义了该GenRenderbuffers()函数。这次没有ARB后缀。GLEW根本没有功能原型glGenRenderbuffersARB()。奇怪的。 EXT规范GenRenderbuffersEXT()在新功能部分中确实具有功能,而GLEW也具有glGenRenderbuffersEXT()。 问题2-如果有EXT后缀,为什么没有ARB后缀?假设ARB函数的名称和核心函数的名称相同,这对ARB如何起作用? 问题3-我最终希望使用1.4配置文件中的Framebuffer功能。我应该使用哪个扩展名和哪个功能集,以便获得最大的硬件兼容性覆盖?
14
opengl