使用 SDL 的顶点缓冲区对象

发布于 2024-12-06 11:02:31 字数 220 浏览 1 评论 0原文

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

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

并收到错误:

glGenBuffersARB、glBindBufferARB、glBufferDataARB 未在此范围内声明

When using SDL 1.2, what do I need to include to be able to use OpenGL Vertex Buffer Objects (VBOs)?

Currently, I only include SDL.h, SDL_opengl.h, SDL_image.h

And get the errors:

glGenBuffersARB, glBindBufferARB, glBufferDataARB not declared in this scope

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

烟雨凡馨 2024-12-13 11:02:31

如果您想在包含 SDL_opengl.h 之前定义 GL_GLEXT_PROTOTYPES

#define GL_GLEXT_PROTOTYPES

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

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

If you want to use SDL_opengl.h define GL_GLEXT_PROTOTYPES before including it.

#define GL_GLEXT_PROTOTYPES

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

I may or might not work. If you want to do it the "proper" way, use something like glew.

快乐很简单 2024-12-13 11:02:31

您应该包含 。有时 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");

You should include <GL/gl.h> and <GL/glext.h>. Sometimes OpenGl extension functions are not directly available and must be loaded using SDL_GL_GetProcAddress (this returns the function pointer or 0 if extension is not available). You may be interested to have a look to libglew which loads the extension functions.

Here is how you may do it (if not using 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");
一枫情书 2024-12-13 11:02:31

可以获取正在开发的 1.3 版本的 SDL 来打开 OpenGL 3.2 上下文 需要做一些工作。

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

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

It is possible to get the underdevelopment 1.3 version of SDL to open a OpenGL 3.2 context with a bit of work.

It's also worth checking out SFML, it's similar to SDL but is hardware accelerated for the 2D stuff, object orientated C++ and is much easier to use. OpenGL is particularly simple to use with it. Once again it's the development 2.0 version that supports OpenGL 3.2 contexts (although it's close to being released.)

You will probably need to use the non-ARB versions with the above.

木槿暧夏七纪年 2024-12-13 11:02:31

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

我在 SDL 中的 VBO 方面遇到了同样的问题。

I find the SDL_opengl.h file to be fairly useless. Personally, I recommend using GLEW or GLee. GLee is easier to add to your project but stops at OpenGL 3.0 (usually fine in SDL apps since SDL only enables an OpenGL 2.1 context). GLEW requires just a bit more work but enables stuff up through OpenGL 4.

I ran into this same problem regarding VBOs in SDL.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文