使用FreeGlut与SDL的组合

Using a combination of FreeGlut with SDL

本文关键字:组合 SDL FreeGlut 使用      更新时间:2023-10-16

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

然而,主要的问题是,从我的大部分研究中,我发现像SDL这样的优秀库(除了1.3——我不认为它是稳定的?我可能错了)只支持OpenGL3,而不支持4.2。然而,FreeGlut确实支持最新和最棒的,并且似乎是一个很好的方式来学习发动机的基础知识。

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

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

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

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

然而,主要的问题是,从我的大部分研究中,我发现像SDL这样的优秀库(除了1.3——我不认为它是稳定的?我可能错了)只支持OpenGL3,而不支持4.2。然而,FreeGlut确实支持最新和最棒的,并且似乎是一个很好的方式来学习引擎的基础知识。

你的研究不足。

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

其次,SDL1.2无法创建OpenGL 3.2+核心上下文,这一点是正确的。然而,您不必能够创建核心上下文来使用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版本5。它有一个C API,它提供了对OpenGL核心上下文、输入、音频以及SFML的大部分功能的支持。它也有相当不错的文档,并且是模块化的(尽管与SFML的方式不同)。