使用 SDL 1.2 时,我需要包含哪些才能使用OpenGL 顶点缓冲区对象(VBOs)?
目前,我只包含SDL.h, SDL_opengl.h, SDL_image.h
得到错误:
glGenBuffersARB, glBindBufferARB, glBufferDataARB not declared in this scope
答案 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相同的问题。