1

使用SDL 1.2时,我需要包括什么才能使用 OpenGL顶点缓冲区对象(VBO)?

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

并得到错误:

glGenBuffersARB, glBindBufferARB, glBufferDataARB not declared in this scope

4

4 回答 4

6

如果您想在包含它之前使用SDL_opengl.h定义。GL_GLEXT_PROTOTYPES

#define GL_GLEXT_PROTOTYPES

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

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

于 2011-09-23T16:39:35.217 回答
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");
于 2011-09-23T16:40:03.923 回答
1

可以通过一些工作获得未开发的 1.3 版本的 SDL来打开 OpenGL 3.2 上下文

SFML 也值得一试,它类似于 SDL,但针对 2D 内容、​​面向对象的 C++ 进行了硬件加速,并且更易于使用。OpenGL 使用起来特别简单。再一次,它是支持 OpenGL 3.2 上下文的开发 2.0 版本(尽管它即将发布。)

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

于 2011-09-24T12:16:41.763 回答
0

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

关于 SDL 中的 VBO,我遇到了同样的问题。

于 2011-09-23T20:24:04.357 回答