当使用SDL 1.2时,需要包含哪些内容才能使用OpenGL 顶点缓冲区对象(VBOs)?如果你想使用SDL_opengl.h
包括它之前定义GL_GLEXT_PROTOTYPES
带SDL的顶点缓冲区对象
glGenBuffersARB, glBindBufferARB, glBufferDataARB not declared in this scope
当使用SDL 1.2时,需要包含哪些内容才能使用OpenGL 顶点缓冲区对象(VBOs)?如果你想使用SDL_opengl.h
包括它之前定义GL_GLEXT_PROTOTYPES
带SDL的顶点缓冲区对象
glGenBuffersARB, glBindBufferARB, glBufferDataARB not declared in this scope
:
目前,我只包括SDL.h, SDL_opengl.h, SDL_image.h
,并得到错误。
#define GL_GLEXT_PROTOTYPES
#include "SDL.h"
#include "SDL_opengl.h"
我可能会也可能不会工作。如果你想这样做的“适当”的方式,使用像glew。
您应该包括<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");
我找到SDL_opengl.h
文件是相当无用的。我个人建议使用GLEW或GLee。 GLee更容易添加到项目中,但在OpenGL 3.0中停止(SDL应用程序通常很好,因为SDL只支持OpenGL 2.1上下文)。 GLEW只需要更多的工作,但可以通过OpenGL 4实现。
我遇到了与SDL中的VBO相同的问题。
可以通过一些工作得到SDL to open a OpenGL 3.2 context的欠发达版本1.3。
它也值得检查SFML,它类似于SDL,但硬件加速为二维的东西,面向对象的C++和更容易使用。 OpenGL使用起来特别简单。再一次,它是支持OpenGL 3.2上下文的开发2.0版本(虽然它接近于被发布)。
您可能需要使用上述的非ARB版本。
我基本上是说如果SDL提供了一种包含必要的OpenGL标头的方法。 – Ben