使用FreeGlut与SDL的组合
Using a combination of FreeGlut with SDL
我目前正在编写一个游戏引擎,该引擎即将进行重大重写。首先,我正在考虑将哪个库与引擎结合使用。显然,我将在这里使用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的方式不同)。
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 可组合的lambda/std::函数与std::可选
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- Mix_Init和Mix_OpenAudio SDL之间的区别是什么
- SDL 窗口不会弹出
- 混合组合和继承的C++问题
- 我需要将多个函数组合为一个函数
- 构建可组合有向图(扫描仪生成器的汤普森构造算法)
- 通过组合不同的类型来创建唯一的id
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 模板元编程:如何将参数包组合成新的参数包
- 检查向量是否具有所有可能的字符组合
- SDL 操纵杆按钮按下/C++
- 如何在加密++中将两个源组合成新的源
- 根中的组合
- VSCode IntelliSense无法识别SDL框架的SDL_image扩展库
- 更改 C++ 中的组合分类变量
- 错误:(-210:不支持的格式或格式组合)功能'create'中的硬件视频解码器不支持视频源
- 使用FreeGlut与SDL的组合