glBindFrameBuffer无法使用SDL

时间:2013-08-26 23:37:06

标签: opengl header sdl framebuffer

最近我从Glut迁移到SDL以获得对主循环的更多控制。我的应用程序中有阴影贴图已经有一段时间了,现在使用bind framebuffer和gen framebuffer等调用。迁移到SDL后,仅针对这些调用的未声明标识符出现错误。我今天从网站上下载了SDL并导入了SDL2 / SDL.h和SDL2 / SDL_opengl.h。当我打开其中一个“缺少的调用”的声明时,它会在OpenGl / glext.h中给我。我注意到SDL OpenGL导入了导入glext.h的OpenGL / gl.h。我输入的文件有错吗?所有其他OpenGl调用都在我的程序的其余部分工作,所以我不知道问题是什么。任何帮助,将不胜感激。感谢。

编辑:我能够深入研究过剩,并且能够想出来让它发挥作用:

#pragma comment (lib, "glu32.lib")
#include <OpenGL/glu.h>

这可以吗?

2 个答案:

答案 0 :(得分:1)

某些版本的OpenGL(Windows:1.1,Linux 1.2)必须通过所谓的扩展机制动态加载。 OpenGL标头并包含它们是不够的。典型的建议是使用loading library like GLEW or glload来完成繁琐的工作。

答案 1 :(得分:0)

这取决于您使用的平台,但glBindFramebuffer<ARB|EXT> (...)是许多人的扩展。它被集成到OpenGL 3.0的核心中,因此如果您的平台不能保证支持OpenGL 3.0,您可能不得不使用扩展加载库(例如GLEW)。如果您的驱动程序提供OpenGL 3.0,您仍可能必须使用运行时扩展机制来加载核心函数glBindFramebuffer (...)

“glext.h”包含它的事实并没有说太多。该标头是定义在运行时扩展的OpenGL部分的原型,枚举/常量和typedef的位置。您仍然需要在软件中设置一个函数指针,并在调用它们之前向驱动程序询问地址 - 这就是扩展加载库的简要说明。

<强> EDIT1:

不,那不行。 glBindFramebuffer (...)是OpenGL 3.0的一部分。 Microsoft Windows实现了OpenGL 1.1,GLU根本不应该改变它。如果强制MSVC链接GLU将未解决的链接器错误修复为OpenGL 3.0函数,则严重错误。

<强> EDIT2:

根据评论中的讨论,您不仅要从SDL转移到GLUT,还要从OS X转移到Win32。在Win32上,您必须使用wglGetProcAddress (...)或扩展加载库来使用glBindFramebuffer (...)。您已经被Mac OS X宠坏了,在开箱即用的API完整性方面,这是一个例外而不是规则。