c++ - 结合使用 FreeGlut 和 SDL

标签 c++ c opengl libraries game-engine

我目前正在编写一个即将进行重大重写的游戏引擎。首先,我正在考虑将哪个库与引擎结合使用。显然,我将在这里使用 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)并提供我正在寻找的必要定制?

最佳答案

The main issue, though, is that from most of my research, I've found that great libraries like SDL (except for 1.3 - which, I don't believe is stable? I may be wrong about this) only support up to OpenGL 3 and not 4.2. FreeGlut, however, does support the latest and greatest, and seems like a good way to go for the basics of an engine.

您的研究不足。

首先,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 都有 native 线程 API)。

但是,它没有适当的音频系统。

I've heard of SFML, too, but ultimately I'd like to stick with libraries written in C as I plan to write a C library to take care of most of the primitive rendering (for the sake of pure speed and memory management, procedurally).

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

但是,如果您完全不能使用 C++,您始终可以使用 Allegro version 5 .它有一个 C API,并提供对 OpenGL 核心上下文、输入、音频以及 SFML 所做的大部分工作的支持。它还具有相当不错的文档,并且是模块化的(尽管与 SFML 的方式不同)。

关于c++ - 结合使用 FreeGlut 和 SDL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9369005/

相关文章:

c++ - 使用 boost :thread 的可运行类

c++ - 在 GDB 调试器中显示 cv2 Mat

c++ - C++ 中的元胞自动机

java - 带显示列表的 OpenGL 光照

java - OpenGL ATI 与 NVIDIA GLSL 问题

python - 使用pyclutter编程

c++ - 从 Qt 上的 UNIX 域套接字 (QLocalSocket) 读取

计算读取操作返回的字节数

c珠子排序需要帮助

c - iOS 中标志结构的用途是什么?