#codec #texture #game-cube #wii #graphics #gamedev

gctex

gctex 是一个为编码和解码任天堂 GameCube 和 Wii 游戏中使用的纹理格式的 Rust 包。该库提供了 C 绑定,使其在基于 Rust 和 C/C++ 的项目中都非常有用。

27 个版本

0.3.12 2024年7月12日
0.3.8 2024年6月14日
0.3.0 2023年10月21日
0.1.4 2023年7月15日

#65 in 图形 API

每月 44 次下载
2 个 包中使用

GPL-2.0-or-later

235KB
5K SLoC

C++ 2.5K SLoC // 0.2% comments Rust 2K SLoC // 0.0% comments Bitbake 716 SLoC

包含 (Windows DLL, 190KB) examples/c#/bindings/gctex_v13.dll

crates.io docs.rs

gctex

gctex 是一个为编码和解码任天堂 GameCube 和 Wii 游戏中使用的纹理格式的 Rust 包。该库提供了 C 绑定,使其在基于 Rust 和 C/C++ 的项目中都非常有用。

用法

Rust

以下示例演示了如何使用 Rust 对 CMPR 格式的纹理进行编码

let width: u32 = 32;
let height: u32 = 32;
let src = vec![0; (width*height*4) as usize];
let dst = gctex::encode(gctex::TextureFormat::CMPR, &src, width, height);

C# 绑定

https://github.com/riidefi/RiiStudio/tree/master/source/gctex/examples/c%

byte[] dst = new byte[dst_len];
byte[] src = new byte[src_len];
gctex.Encode(0xE /* CMPR */, dst, src, width, height);

C/C++

https://github.com/riidefi/RiiStudio/tree/master/source/gctex/examples/c%2b%2b

#include "gctex.h"

unsigned char dst[dst_len];
unsigned char src[src_len];
rii_encode_cmpr(dst, sizeof(dst), src, sizeof(src), width, height);

相关的头文件在 include/gctex.h 中。

支持的格式

以下列出了所有支持的纹理格式及其相应的编码和解码源。

格式 编码源 解码源
CMPR 内置 Dolphin 模拟器 (SIMD) / Rust 非SIMD 回退
I4 内置 内置 (SIMD (SSE3))
I8 内置 Dolphin 模拟器 (SIMD) / Rust 非SIMD 回退
IA4 内置 内置
IA8 内置 Dolphin 模拟器 (SIMD) / Rust 非SIMD 回退
RGB565 内置 Dolphin 模拟器 (SIMD) / Rust 非SIMD 回退
RGB5A3 内置 Dolphin 模拟器 (SIMD) / Rust 非SIMD 回退
RGBA8 内置 内置 (SIMD (SSE3))
C4 - Dolphin 模拟器 / 无回退
C8 - Dolphin 模拟器 / 无回退
C14 - Dolphin 模拟器 / 无回退

请注意,I4、I8 和 IA8 格式的 SIMD 纹理解码使用 SSE3 指令,必要时回退到 SSE2(除了 I4),这些是根据 Dolphin 模拟器的纹理解码逻辑实现的。

可选功能

  • 为了避免需要 C++ 编译器或运行 C++ 代码,取消设置 cpp_fallback 功能以回退到非 SIMD Rust 实现的 I4/I8/IA8/RGB565/RGB5A3 解码。
  • 对于调试,可以禁用 simd 功能以使用纯、标准 Rust。

许可证

这个动态链接库是根据GPLv2发布的。

依赖项

约440-600KB
约12K SLoC