glReadBuffer与OpenGL ES 2.0中的glReadBufferNV

时间:2014-08-01 16:13:40

标签: opengl-es opengl-es-2.0 openscenegraph

我正在尝试为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的特殊之处感兴趣。

1 个答案:

答案 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生态系统中         流行,只有像素图没有后备缓冲,它们的使用仍然存在         有限的。

因此,对扩展程序进行了追溯修改,使其与核心规范达成一致。