c++ - 在游戏机上加载的最佳数据文件格式

标签 c++ python embedded playstation

我需要尽可能高效地在基于 CD 的旧游戏机上加载大型模型和其他结构化二进制数据。最好的方法是什么?数据将从 Python 应用程序导出。这是一个精心设计的业余爱好项目。

要求:

  • 不依赖完全符合标准的 STL - 不过我可能会使用 uSTL。
  • 尽可能少的开销。瞄准一个很好的解决方案。它可以在原始 Playstation 上使用,但尽可能现代和优雅。
  • 无需向后/向前兼容。
  • 不复制大块 - 最好是在后台将文件加载到 RAM 中,然后从那里直接访问所有大块。
  • 不应依赖具有相同字节序和对齐方式的目标,即 Python 中将其结构转储到磁盘的 C 插件不是一个好主意。
  • 应该允许四处移动加载的数据,因为对于 RAM 大小的 1/3 的单个文件,碎片可能是一个问题。不得滥用 MMU。
  • 健壮性是一个很大的好处,因为我的注意力持续时间很短,即我会更改保存部分代码而忘记加载代码,反之亦然,所以至少一个愚蠢的安全措施会很好。
  • 在没有运行时开销和严重内存管理问题的情况下加载数据和运行时生成的数据之间的可交换性将是一个很好的奖励。

我有点半计划在 Python 中解析琐碎的、语法有限的 C 头文件,它将使用带偏移量的结构而不是指针,以及主应用程序中的便利包装结构/类,带有将偏移量正确转换为输入的指针/引用,但我想听听你的建议。

说明:该请求主要是关于数据加载框架和内存管理问题。

最佳答案

在 Nintendo GameCube 和 DS 等平台上,3D 模型通常以非常简单的自定义格式存储:

  • 一个简短的 header ,包含标识文件的魔数(Magic Number)、顶点数、法线等,以及 header 后面可选的数据校验和(Adler-32、CRC-16 等)。
  • 每个 vector 和法线的可能压缩的 32 位浮点三元组列表。
  • 一个可能压缩的边或面列表。
  • 所有数据均采用目标平台的原生字节序格式。
  • 压缩格式通常是普通的 (Huffman)、简单的 (Arithmetic) 或标准的 (gzip)。所有这些都需要非常少的内存或计算能力。

您可以将这样的格式作为提示:它是一种非常紧凑的表示形式。

我的建议是使用与内存数据结构最相似的格式,以尽量减少后处理和复制。如果这意味着您自己创建格式,那就这样吧。您有极端的需求,因此需要采取极端的措施。

关于c++ - 在游戏机上加载的最佳数据文件格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1727594/

相关文章:

c++ - 如果我们只有一个成员,结构和 union 之间有什么区别吗?

c - 如何在嵌入式应用中使用环形缓冲区并保证完整性

linux - malloc_stats和/proc/pid/stat的相关性

c - 串口线命令解析

c++ - 简化多个 ReadProcessMemory 调用

c++ - 为什么我不能从 lambda 返回初始值设定项列表

python - 你如何列出python中的所有子进程?

python - 类型错误 : __init__() takes 3 positional arguments but 4 were given

c++ - 调用其他程序的程序

python - matplotlib - 从等高线中提取数据