使用SDL 1.2时,我需要包括什么才能使用 OpenGL顶点缓冲区对象(VBO)?
目前,我只包括SDL.h, SDL_opengl.h, SDL_image.h
并得到错误:
glGenBuffersARB, glBindBufferARB, glBufferDataARB not declared in this scope
使用SDL 1.2时,我需要包括什么才能使用 OpenGL顶点缓冲区对象(VBO)?
目前,我只包括SDL.h, SDL_opengl.h, SDL_image.h
并得到错误:
glGenBuffersARB, glBindBufferARB, glBufferDataARB not declared in this scope
如果您想在包含它之前使用SDL_opengl.h
定义。GL_GLEXT_PROTOTYPES
#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");
可以通过一些工作获得未开发的 1.3 版本的 SDL来打开 OpenGL 3.2 上下文。
SFML 也值得一试,它类似于 SDL,但针对 2D 内容、面向对象的 C++ 进行了硬件加速,并且更易于使用。OpenGL 使用起来特别简单。再一次,它是支持 OpenGL 3.2 上下文的开发 2.0 版本(尽管它即将发布。)
您可能需要使用上述的非 ARB 版本。
我发现该SDL_opengl.h
文件相当无用。就个人而言,我建议使用 GLEW 或 GLee。GLee 更容易添加到您的项目中,但仅限于 OpenGL 3.0(通常在 SDL 应用程序中很好,因为 SDL 仅启用 OpenGL 2.1 上下文)。GLEW 只需要更多的工作,但可以通过 OpenGL 4 实现。
关于 SDL 中的 VBO,我遇到了同样的问题。