我正在尝试为Ubuntu armhf架构构建OpenSceneGraph 3.2,但是我收到有关未找到符号的编译错误。有问题的符号是glReadBuffer
。我看了GLES2/gl2.h
标题,的确,那个符号不存在。但是,该符号出现在GLES3/gl3.h
中,在线文档表明该功能已添加到OpenGL ES 3.0中。但是,我确实在glReadBufferNV
中找到了一个名为GLES2/gl2ext.h
的函数(源文件中不是#include
'。
我想知道是否可以使用glReadBufferNV
代替glReadBuffer
,以及可能出现的副作用。我怀疑NV
代表Nvidia,而且它只是一个Nvidia实现。它是否正确?如果是这样,有没有办法在OpenGL ES 2.0中获得glReadBuffer
(我认为OpenSceneGraph可以在OpenGL ES 2.0下构建)?
编辑:事实证明,使用OpenGL ES或OpenGL 3.0构建时,构建OpenSceneGraph这部分的代码被排除在外。但是,我仍然对glReadBufferNV
的特殊之处感兴趣。
答案 0 :(得分:0)
正如您的研究表明的那样,glReadBuffer
被添加到ES中3.0;它没有在2.0中定义。在此之前,根据您找到的标头文件,扩展名定义为glReadBufferNV
- 具体为the NV_read_buffer extension。
所以发生的事情是规范中没有的东西,至少Nvidia认为它会有用,所以他们已经实现了一个OpenGL扩展,随后在Khronos进行了讨论,处理了所有边缘情况或含糊之处随着并最终进入核心规范。
这通常是GL开发的进展:扩展来提供主库中尚未提供的功能,如果合适,它们将被讨论和改进并被采纳到核心规范中。
将the official specification for glReadBuffer
与扩展程序文档进行比较,扩展程序与其他扩展程序有一些联系,您不希望将其纳入核心规范(例如,COLOR_ATTACHMENTi_NV
作为源支持)但见解决问题7:
此规范的第6版与OpenGL ES 3.0不兼容。 对于没有后台缓冲区的上下文,此扩展使FRONT成为 默认读缓冲区。 ES 3.0反而将其称为BACK。 如何协调?
已解决:更新规范以匹配ES 3.0行为。这个 引入了向后不兼容,但很少有应用程序 预计会受到影响。在ES 2.0的EGL生态系统中 流行,只有像素图没有后备缓冲,它们的使用仍然存在 有限的。
因此,对扩展程序进行了追溯修改,使其与核心规范达成一致。