2011-09-23 158 views
1

当使用SDL 1.2时,需要包含哪些内容才能使用OpenGL 顶点缓冲区对象(VBOs)?如果你想使用SDL_opengl.h包括它之前定义GL_GLEXT_PROTOTYPES带SDL的顶点缓冲区对象

glGenBuffersARB, glBindBufferARB, glBufferDataARB not declared in this scope

回答

6

目前,我只包括SDL.h, SDL_opengl.h, SDL_image.h

,并得到错误。

#define GL_GLEXT_PROTOTYPES 

#include "SDL.h" 
#include "SDL_opengl.h" 

我可能会也可能不会工作。如果你想这样做的“适当”的方式,使用像glew

+0

我基本上是说如果SDL提供了一种包含必要的OpenGL标头的方法。 – Ben

4

您应该包括<GL/gl.h><GL/glext.h>。有时OpenGl扩展函数不是直接可用的,必须使用SDL_GL_GetProcAddress加载(如果扩展不可用,则返回函数指针或0)。您可能有兴趣看看加载扩展功能的libglew。

这里是你可以怎么做(如果不使用GLEW):

extern PFNGLGENBUFFERSARBPROC glGenBuffers; // Function pointer declaration, in a header file. 

// Function pointer initialization 
glGenBuffers = 0; 

// Get the function (you should have checked that extension is available) 
glGenBuffers = (PFNGLGENBUFFERSARBPROC)SDL_GL_GetProcAddress("glGenBuffersARB"); 
+0

只需包含''和''给我一个重新定义警告加上述错误。 – Ben

+1

所以我认为你应该加载自己想要的功能,或者使用libglew。 (将编辑响应) – neodelphi

0

我找到SDL_opengl.h文件是相当无用的。我个人建议使用GLEW或GLee。 GLee更容易添加到项目中,但在OpenGL 3.0中停止(SDL应用程序通常很好,因为SDL只支持OpenGL 2.1上下文)。 GLEW只需要更多的工作,但可以通过OpenGL 4实现。

我遇到了与SDL中的VBO相同的问题。

1

可以通过一些工作得到SDL to open a OpenGL 3.2 context的欠发达版本1.3。

它也值得检查SFML,它类似于SDL,但硬件加速为二维的东西,面向对象的C++和更容易使用。 OpenGL使用起来特别简单。再一次,它是支持OpenGL 3.2上下文的开发2.0版本(虽然它接近于被发布)。

您可能需要使用上述的非ARB版本。

相关问题