gpt4 book ai didi

c - 我必须在 GL/glew.h 之后包含 SDL_opengl.h 吗?

转载 作者:行者123 更新时间:2023-12-03 16:51:02 25 4
gpt4 key购买 nike

我想用 SDL2 创建一个 OpenGL 项目。我通常通过包含 GL/glew.h 来开始我的 OpenGL 项目。第一的。我必须包括SDL_opengl.h然后?它还包含 OpenGL API header ,因此在我看来,没有必要同时包含两者。

最佳答案

SDL可以被告知使用 OpenGL 进行渲染。但是你可以使用 SDL做其他事情并自己做OpenGL的事情。

在第二种情况下,您需要一种方法来从驱动程序中定义和加载 GL 的 API 函数指针。 GLEW就是这样一个函数加载器。

在第一种情况下,使用 SDL 渲染,SDL将#include #include SDL_opengl.h 所需的所有 OGL header .例如,它包含在 SDL_render_gl.c

两次获取 OGL 函数指针,包括 glew.hSDL_opengl.h不是要走的路。如果您包括 SDL_opengl.h之前 glew.h您可能会遇到编译器断言失败。
如果您首先包含 glew.h也许编译器允许它,我还没有测试过它,SDL header 中似乎没有任何东西可以检查这种情况。

但真正的问题是,使用 GLEW 将一无所获。与 SDL (*) 这很容易失败。

(*) 确实,您可能需要一些"new"功能,这些功能包含在最新版本的 glew 中,但不包含在 SDL 中。在这种情况下,请避免使用 SDL 提供的所有 OGL 绘图功能。

编辑

@HolyBlackCat 关于 SDL 仅支持 GL 1.x 的评论并不完全正确。但这需要更多的解释。

SDL 提供自己的 API。要画一条线,请调用 SDL_RenderDrawLine , 这在内部和取决于 renderer used 调用 gl-command 或另一个 API(OS、DirectX 等)的另一个命令。作者 gl-command我的意思是 OpenGL 规范定义的命令(glDrawArrays、glBindVertexBuffer 等)。

所有的 gl-whatever 不仅必须是 定义 ,但对于 OGL>1.1,gl 函数也必须为 已加载 从司机那里。 SDL 加载它使用的 gl 函数,当然大部分是 GL1.1 和一堆 GL2.1。
我找到了 this SDL+OGL3 example这似乎适用于没有外部加载程序(如 glew),只有 SDL。我还没有测试过,但是我在 SDL 源代码中找不到加载了本示例中使用的一些 OGL 函数的位置。

我所做的可以在 SDL_opengl_glext.h 中看到(包含在 SDL_opengl.h 中)几乎是 Khronos 提供的 header 的副本,它执行 定义 最新版本的原型(prototype)(4.4?)。这些标题也是 glew 的一部分文件; glew 会尽快更新它们。

然后我们提出这个问题:

  • 我将只使用 SDL API 吗?如果是,则不需要 GLEW。
  • 我要自己使用 OGL 1.x,还要使用 SDL GL 渲染吗?如果是,同样,不需要 GLEW。
  • 我想自己做一些 OGL>=2 。如果您使用 SDL 已经加载的函数(祝您找到它们的好运),则不需要 GLEW。
  • 我想充分利用完整的 OGL 功能。然后不要在你做 GL 渲染的窗口中使用 SDL 进行渲染。但是使用 SDL 创建窗口和上下文。

  • 我是第 4 种情况。我应该包含哪些标题?
    首先,记住你需要一个“gl-functions loader”。因为 SDL 不会加载所有 OGL 函数(而只是一堆),所以您需要另一个加载器,例如 GLEW。

    然后,如果您无论如何要使用 GLEW,只需包含 glew.h而不是 SDL_opengl.h .使用两者都没有任何好处,并且您可能会遇到一些错误。

    关于c - 我必须在 GL/glew.h 之后包含 SDL_opengl.h 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56611889/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com