<!-- markdownlint-disable MD028 MD033 MD041 MD045 -->

<img src="assets/MobileGlues-icon.png" width="128">

# MobileGlues

**语言**: [English](README.md) | **简体中文** | [繁體中文](README_CHT.md) | [日本語](README_JP.md)

> [!NOTE]
>
> 最新版本：
>
> **2.0.0**
>
> 请查看 [Release](https://github.com/MobileGL-Dev/MobileGlues-release/releases)

> [!NOTE]
>
> 查看 [CompatibleShaders.md](https://github.com/MobileGL-Dev/MobileGlues-release/blob/main/CompatibleShaders.md) 以获取兼容的 Minecraft 光影信息。
>
> 查看 [CompatibleMods.md](https://github.com/MobileGL-Dev/MobileGlues-release/blob/main/CompatibleMods.md) 以获取兼容的 Minecraft 模组信息。
>
> 查看 [模组支持列表](https://github.com/MobileGL-Dev/MobileGlues-release/blob/main/ModSupportMatrix.md) 或 [光影支持列表](https://github.com/MobileGL-Dev/MobileGlues-release/blob/main/ShaderSupportMatrix.md)，了解您的设备运行情况。

**MobileGlues**，其名称意为“(在)移动设备上，GL 使用 ES”，是一个基于 OpenGL ES 3.x（最佳为 3.2，最低 3.0）运行的 GL 实现，专为运行 Minecraft Java 版设计。

# 功能特点

1. 能够运行 Minecraft 的 [Sodium](https://github.com/CaffeineMC/sodium) 模组；

2. 能够使用 Minecraft 的 [Iris](https://github.com/IrisShaders/Iris) 模组或 [Optifine](https://optifine.net/home) 渲染大部分光影；

3. 能够兼容部分具有自定义渲染流程的 Minecraft 模组，如 [JourneyMap](https://teamjm.github.io/journeymap-docs/latest) 和 [Create](https://createmod.net)；

4. 其他易用性特性：可选用 ANGLE 作为 ES 驱动、着色器缓存以加快光影包重载、支持 Minecraft 的 GPU 占用率显示……以及更多。

# 给光影开发者

1. MobileGlues 会自动：
   - 将桌面 GLSL 转换为 GLSL ES
   - 移除 `layout(binding)` 语法
   - 处理 version 指令
   - 请始终显式声明精度：
     ```glsl
     precision highp float;
     precision highp int;
     ```

2. MobileGlues（自 V1.2.6 起）会向您的着色器注入以下宏：

   ```glsl
   #define MG_MOBILEGLUES                   // 表示处于 MobileGlues 环境
   #define MG_MOBILEGLUES_VERSION 2000      // 版本号（例如 2000 = V2.0.0）
   ```

   可利用这些宏编写平台相关的逻辑：

   ```glsl
   #ifdef MG_MOBILEGLUES
       #if MG_MOBILEGLUES_VERSION >= 2000
           // MobileGlues（版本 >= V2.0.0）的逻辑
       #else
           // MobileGlues（版本 < V2.0.0）的逻辑
       #endif
   #else
       // ...
   #endif
   ```

3. 若遇到问题：
   - 请启用 `忽略 shader/program 报错`，并查看日志（位于 `/sdcard/MG/latest.log`）。

# 开源链接

[MobileGlues](https://github.com/MobileGL-Dev/MobileGlues)

[MobileGlues-plugin](https://github.com/MobileGL-Dev/MobileGlues-plugin)

# 开源许可证

MobileGlues 和它的插件应用程序都以 **GNU LGPL-2.1 License** 开源。

# 校验您所下载版本的签名

本节用于帮助您确认手中的 apk 是否为 MobileGlues 开发组发布的官方版本。

在您的 Android build-tools 中找到 `apksigner`，然后运行：

```bash
apksigner verify --print-certs path/to/MobileGlues-plugin.apk
```

它应当输出：

```bash
Signer #1 certificate DN: CN=MGDev, OU=MGDev, O=MGDev, L=Unknown, ST=Unknown, C=CN
Signer #1 certificate SHA-256 digest: 324f4efaff81632373dec9bc714a904b64740249410b551b61805340e42ff5d5
Signer #1 certificate SHA-1 digest: 615bc8b2741c24e7e5847b0c5c1d6816d5b0763a
Signer #1 certificate MD5 digest: 320ede9d22c709fe3792c804d5e00153
```

请检查 `certificate DN` 与 `certificate digest` 两部分是否与上文完全一致。

如果您希望对照公钥文件进行校验，我们同时提供了 `pub.cer` 与 `pub.pem`，您可以使用任何趁手的工具用它们校验您的 apk。

# 加入我们

由于我们的团队规模较小，我们无法拥有所有设备并对其进行全面测试。

如果您对该项目感兴趣，请考虑通过以下方式贡献：

填写 [模组设备支持列表](https://github.com/MobileGL-Dev/MobileGlues-release/blob/main/ModSupportMatrix.md) 或 [光影设备支持列表](https://github.com/MobileGL-Dev/MobileGlues-release/blob/main/ShaderSupportMatrix.md)！

我们需要您的帮助来测试不同设备对着色器和模组的兼容性！

> [!NOTE]
> 如何填写表格：
>
> 您可以：
>
> - 在表格中新增一个设备，通过在表格末尾添加新的一行。（您可以使用 `adb shell getprop ro.product.name` 获取设备代号）
> - 在表格中新增一个项目，通过在表格末尾添加新的一列。（请确保所有行格式合法！）
> - 在设备的对应单元格中标记兼容性情况：
>   - 兼容的项目标记为 ✅；
>   - 完全不兼容的项目标记为 ❌（并提交问题或提供问题链接）；
>   - 未测试的项目（不在您的模组包中/您未安装该模组）标记为 ？；
>   - 存在部分功能缺失或渲染问题的项目标记为 \*️⃣（并提交问题或提供问题链接）。
> - 如适用，您可以在 "额外驱动/插件" 列中说明您使用的除官方提供之外的其他驱动或插件（如 Turnip 驱动、ANGLE 等）。
> - 如适用，您应添加一个 `*设备代号*.md` 文件，提供更多详细信息，并在表格的最后一列附上链接。

# 第三方组件

## MobileGlues

**SPIRV-Cross** by **KhronosGroup** - [Apache License 2.0](https://github.com/KhronosGroup/SPIRV-Cross/blob/master/LICENSE): [github](https://github.com/KhronosGroup/SPIRV-Cross)

**glslang** by **KhronosGroup** - [Various Licenses](https://github.com/KhronosGroup/glslang/blob/main/LICENSE.txt): [github](https://github.com/KhronosGroup/glslang)

**cJSON** by **DaveGamble** - [MIT License](https://github.com/DaveGamble/cJSON/blob/master/LICENSE): [github](https://github.com/DaveGamble/cJSON)

**FidelityFX-FSR** by **AMD** - [MIT License](https://github.com/GPUOpen-Effects/FidelityFX-FSR/blob/master/license.txt): [github](https://github.com/GPUOpen-Effects/FidelityFX-FSR)

**Perfetto** by **Google** - [Apache License 2.0](https://github.com/google/perfetto/blob/main/LICENSE): [github](https://github.com/google/perfetto)

**xxHash** by **Yann Collet** - [BSD 2-Clause License](https://github.com/Cyan4973/xxHash/blob/dev/LICENSE): [github](https://github.com/Cyan4973/xxHash)

**flat_hash_map** by **Malte Skarupke** - [Boost Software License 1.0](https://github.com/MobileGL-Dev/flat_hash_map/blob/master/LICENSE): [github](https://github.com/MobileGL-Dev/flat_hash_map)（[skarupke/flat_hash_map](https://github.com/skarupke/flat_hash_map) 的分支，带有使该头文件可在 32 位目标上包含的修复）

## MobileGlues-plugin

**Miuix** by **compose-miuix-ui** - [Apache License 2.0](https://github.com/compose-miuix-ui/miuix/blob/main/LICENSE): [github](https://github.com/compose-miuix-ui/miuix)

**Jetpack Compose** by **Android Open Source Project (AOSP)** - [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt): [Android Developers](https://developer.android.com/jetpack/compose)

**AndroidX** by **Android Open Source Project (AOSP)** - [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt): [Android Developers](https://developer.android.com/jetpack/androidx)

**kotlinx.coroutines** by **JetBrains** - [Apache License 2.0](https://github.com/Kotlin/kotlinx.coroutines/blob/master/LICENSE.txt): [github](https://github.com/Kotlin/kotlinx.coroutines)

**Gson** by **Google** - [Apache License 2.0](https://github.com/google/gson/blob/main/LICENSE): [github](https://github.com/google/gson)
