【问题标题】:Using a combination of FreeGlut with SDL将 FreeGlut 与 SDL 结合使用
【发布时间】:2012-02-20 21:56:19
【问题描述】:

我目前正在编写一个即将进行重大改写的游戏引擎。首先,我正在考虑将哪个库与引擎结合使用。显然,我将在这里使用 OpenGL,并将尽我所能使其向前和向后兼容。

不过,主要问题是,根据我的大部分研究,我发现像 SDL 这样的优秀库(除了 1.3 - 我不认为它是稳定的?我可能错了)只支持直到 OpenGL 3 而不是 4.2。然而,FreeGlut 确实支持最新和最强大的,并且似乎是了解引擎基础知识的好方法。

然而,唯一的事情就是设置一些东西,比如键盘 I/O 和声音输入音频,以及其他东西。因此,我正在考虑是否可以使用 glut 来初始化 opengl 并使用 opengl,然后让 SDL 与键盘 I/O、声音等一起进行窗口管理。

当然,始终可以选择将 Qt 与 OpenGL 一起使用,但如果可能的话,我肯定希望能够控制我的主循环(是否这可能与 Qt 和 OpenGL 一起使用?)。

我也听说过 SFML,但最终我想坚持使用 C 编写的库,因为我计划编写一个 C 库来处理大部分原始渲染(为了纯粹的速度和内存管理,程序上)。

因此,我不知道在这里做什么。 Qt 是一个不错的选择吗,还是有其他类似 C 的替代方案(如 FreeGlut)允许主循环控制(如 SDL)并提供我正在寻找的必要自定义?

【问题讨论】:

  • 除了创建上下文之外,我认为这些库中没有任何一个对 OpenGL 有任何作用。所以(如果我错了,有人纠正我)他们都可以使用 OpenGL 4.2。
  • 另外,如果可以使用 C++,为什么要避免使用它?如果您愿意,仍然可以使用类似 C 的风格编写性能关键部分。
  • 主要是因为在 C++ 中要避免使用诸如 Malloc 和 Free 之类的东西,而且我实际上更喜欢 C 中的某些东西而不是 C++。 C 可以很好地处理指针,C++ 也是如此,但仍然存在一些需要考虑的细微差别。例如,我计划使用大量 C 风格的字符串和解析。另外,如果没有 OO 风格的开销,测试会更容易。
  • @Holland:您的意思是您不必使用“OO 风格的开销”?

标签: c++ c opengl libraries game-engine


【解决方案1】:

不过,主要问题是,根据我的大部分研究,我发现像 SDL 这样的优秀库(除了 1.3 - 我不认为它是稳定的?我可能错了)只支持直到 OpenGL 3 而不是 4.2。然而,FreeGlut 确实支持最新和最强大的,并且似乎是了解引擎基础知识的好方法。

你的研究不足。

首先,FreeGLUT 不应该用于任何你称之为“引擎”的东西。无论您是什么意思,FreeGLUT 都不是这项工作的工具。它是为创建演示而设计的,这就是它拥有主循环的原因。我知道 FreeGLUT 确实有办法让您对主循环进行一些控制,但使用 FreeGLUT 的标准方法并没有做到这一点。

其次,您说得对,SDL 1.2 无法创建 OpenGL 3.2+ core context。但是,您不必能够创建核心上下文来使用 GL 3.2+;兼容性上下文在这些版本中工作得很好。唯一没有兼容性上下文的平台是 MacOSX 的 3.2 支持。所以我不会担心。

你可以试试GLFW。它有点像 FreeGLUT,只是更以游戏为中心。它使您可以控制渲染循环等。它提供比 FreeGLUT 更好的输入处理,以及一些轻量级的图像加载功能(仅限 TGA 文件)。它甚至还有一个线程 API(虽然我不建议使用这些函数。GLFW 2.0 将放弃它们,因为 C++11 和 C11 都有本机线程 API)。

但是,它没有用于音频的系统。

我也听说过 SFML,但最终我想坚持使用 C 编写的库,因为我计划编写一个 C 库来处理大部分原始渲染(为了纯粹的速度和内存管理,程序上)。

我将忽略 C++ 没有“纯速度和内存管理”的谬误;这是我会忽略的常见谣言。重要的一点是:就您的渲染代码而言,SFML 仅用于创建和管理窗口。您的渲染代码甚至不必与它对话。您调用一些 SFML 函数,创建几个 SFML 对象,您的“C 库”OpenGL 代码甚至不必知道那些 C++ 对象存在。

但是,如果您根本无法使用 C++ 工作,您可以随时使用Allegro version 5。它有一个 C API,它提供对 OpenGL 核心上下文、输入、音频以及 SFML 的大部分功能的支持。它也有相当不错的文档,并且是模块化的(尽管方式与 SFML 不同)。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-16
  • 2019-08-15
  • 2018-10-03
  • 2017-04-15
  • 2010-11-06
  • 2017-01-11
  • 2021-06-06
相关资源
最近更新 更多