gctex 0.3.2

gctex is a Rust crate designed for encoding and decoding texture formats used in the Nintendo GameCube and Wii games. The library provides C bindings, making it useful in both Rust and C/C++ based projects.
Documentation
[![crates.io](https://img.shields.io/crates/v/gctex.svg)](https://crates.io/crates/gctex)
[![docs.rs](https://docs.rs/gctex/badge.svg)](https://docs.rs/gctex/)

# `gctex`

gctex is a Rust crate designed for encoding and decoding texture formats used in the Nintendo GameCube and Wii games. The library provides C bindings, making it useful in both Rust and C/C++ based projects.

## Usage 


### Rust

The following snippet demonstrates how to encode a texture in CMPR format using Rust:

```rust
let src = vec![0; src_len];
let dst = gctex::encode(gctex::TextureFormat::CMPR, &src, width, height);
```

### C# Bindings

See https://github.com/riidefi/RiiStudio/tree/master/source/gctex/examples/c%23
```cs
byte[] dst = new byte[dst_len];
byte[] src = new byte[src_len];
gctex.Encode(0xE /* CMPR */, dst, src, width, height);
```

### C/C++

See https://github.com/riidefi/RiiStudio/tree/master/source/gctex/examples/c%2b%2b
```cpp
#include "gctex.h"


unsigned char dst[dst_len];
unsigned char src[src_len];
rii_encode_cmpr(dst, sizeof(dst), src, sizeof(src), width, height);
```
The relevant header is available in `include/gctex.h`.

#### Supported Formats

All supported texture formats and their respective encoding and decoding sources are listed below.

| Format  | Encoding Source | Decoding Source |
|---------|-----------------|-----------------|
| CMPR    | WSZST           | Dolphin Emulator |
| I4      | Builtin         | Dolphin Emulator (SIMD) |
| I8      | Builtin         | Dolphin Emulator (SIMD) |
| IA4     | Builtin         | Dolphin Emulator |
| IA8     | Builtin         | Dolphin Emulator (SIMD) |
| RGB565  | Builtin         | Dolphin Emulator |
| RGB5A3  | Builtin         | Dolphin Emulator (SIMD) |
| RGBA8   | Builtin         | Dolphin Emulator (SIMD) |

Please note, SIMD texture decoding for I4, I8 and IA8 formats uses SSE3 instructions with a fallback to SSE2 if necessary, and these are implemented based on the Dolphin Emulator's texture decoding logic.

#### License

This dynamically linked library is published under GPLv2.