具有SDL的顶点缓冲区对象

时间:2011-09-23 16:29:12

标签: opengl sdl vertex-buffer

使用 SDL 1.2 时,我需要包含哪些才能使用OpenGL 顶点缓冲区对象(VBOs)?

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

得到错误:

glGenBuffersARB, glBindBufferARB, glBufferDataARB not declared in this scope

4 个答案:

答案 0 :(得分:6)

如果您想在加入之前使用SDL_opengl.h定义GL_GLEXT_PROTOTYPES

#define GL_GLEXT_PROTOTYPES

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

我可能会也可能不会工作。如果您想以“正确”方式执行此操作,请使用glew之类的内容。

答案 1 :(得分: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");

答案 2 :(得分:1)

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

它也值得检查SFML,它类似于SDL但是硬件加速用于2D东西,面向对象的C ++并且更容易使用。 OpenGL特别易于使用。再一次,它是支持OpenGL 3.2上下文的开发2.0版本(虽然它即将发布。)

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

答案 3 :(得分:0)

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

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