glfighters 的回归:将一款 23 年历史的游戏移植到 WebAssembly

主要观点:作者将 2001 年为经典 Mac OS 编写的游戏 GLFighters 移植到了 WebAssembly,使其能在现代浏览器中运行,并分享了移植过程中的技术挑战和经验。
关键信息:

  • 2001 年举办的 uDevGames 竞赛,David Rosen 创作了 GLFighters 游戏,后他创办 Wolfire Games,该游戏如今仍可在 Wolfire 网站获取,但难以找到能运行的模拟器。
  • 游戏为经典 Mac OS 编写,使用已不存在的 API 和已弃用的 OpenGL 1.2,作者计划将其移植到 Linux 和 WebAssembly。
  • 移植过程中遇到诸多问题,如纹理翻转、非法指令、文件加载错误、随机 SEGFAULT、声音采样率问题、Z-Fighting、天空盒接缝、WebAssembly 相关问题(TGA 文件加载失败、页面无响应、旧 OpenGL 故障、慢动作、纹理加载修复、粉色天空盒纹理、二的幂次方纹理平铺、背景照明错误等),经过努力逐一解决。
  • 作者获得 David 许可,将 GLFighters 的源代码发布在 github.com/wedaly/GLFighters-SDL 上,其 WebAssembly 版本可在 devnonsense.com/GLFighters-SDL 在线游玩。
    重要细节:
  • 移植策略是将窗口、键盘、声音、文件代码从经典 Mac OS API 移植到 SDL,在 Linux 上使图形代码工作,再用 emscripten 编译为 WebAssembly。
  • 解决 Linux 相关问题的方法,如垂直翻转字体纹理、修改函数返回类型、调整文件加载方式、约束随机数范围、调整投影矩阵参数、更改纹理包裹设置等。
  • WebAssembly 移植中使用 emscripten 工具链,解决 TGA 文件加载失败、页面无响应、旧 OpenGL 故障等问题,通过优化代码解决慢动作问题,转换图像格式解决纹理加载问题,修正颜色值解决粉色天空盒纹理问题,调整纹理尺寸解决纹理平铺问题,修正光照计算错误。
阅读 7
0 条评论