feat(termux): MC 启动接线——Linux arm64 natives + softpipe 子进程环境
- Library::native_classifier:Linux/aarch64 上把 LWJGL3 的 natives-linux 改写成 natives-linux-arm64(Mojang 清单只有 x86_64) - install::libraries:arm64 分类器在清单里没有下载信息时,按 Maven 相对路径 兜底到阿里云镜像(实测 Mojang libraries 404、Aliyun 200); 单测覆盖 arm64 兜底与 x86_64 不变 - launch::defaults:Termux glibc 构建启动 MC 时默认带 MESA_LOADER_DRIVER_OVERRIDE=swrast / LIBGL_ALWAYS_SOFTWARE=1(用户可覆盖) - 文档:JRE patchelf 一次性步骤与接线现状;README 同步 - 验证:patched Temurin java 直接执行;LWJGL arm64+GLFW 探针 gl-ok
This commit is contained in:
1 parent
02ed09ae49
commit
7eed6c6261
5 files changed
+179
-26
No files matched your search
@@ -174,6 +174,13 @@ pub fn environment(req: &LaunchRequest, os: OsFamily) -> Vec<(String, String)> {
|
||||
set_env(&mut env, "MESA_LOADER_DRIVER_OVERRIDE", "llvmpipe");
|
||||
set_env(&mut env, "GALLIUM_DRIVER", "llvmpipe");
|
||||
}
|
||||
// Termux + glibc 构建:termux-x11 下 glibc Mesa 的 zink 卡 DRI3,softpipe 是当前
|
||||
// 可用路径。放在软件渲染块之后、用户自定义之前(用户显式设置仍可覆盖)。
|
||||
if cfg!(target_os = "linux")
|
||||
&& crate::platform::termux::is_termux(&crate::platform::paths::ProcessEnv)
|
||||
{
|
||||
apply_termux_gl_defaults(&mut env);
|
||||
}
|
||||
if os == OsFamily::MacOs {
|
||||
if let Some(icd) = &req.renderer.vulkan_icd {
|
||||
set_env(&mut env, "VK_ICD_FILENAMES", &icd.display().to_string());
|
||||
@@ -201,3 +208,43 @@ fn set_env(env: &mut Vec<(String, String)>, key: &str, value: &str) {
|
||||
env.push((key.to_string(), value.to_string()));
|
||||
}
|
||||
}
|
||||
|
||||
/// Termux(glibc 构建)上的默认 GL 环境:softpipe。
|
||||
///
|
||||
/// glibc Mesa 26 的 zink 在 termux-x11 下报 `DRI3 not available`,softpipe 是当前
|
||||
/// 可用的软件路径;硬件路径等 DRI3 问题解决后再切。
|
||||
fn apply_termux_gl_defaults(env: &mut Vec<(String, String)>) {
|
||||
set_env(env, "MESA_LOADER_DRIVER_OVERRIDE", "swrast");
|
||||
set_env(env, "LIBGL_ALWAYS_SOFTWARE", "1");
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::apply_termux_gl_defaults;
|
||||
|
||||
#[test]
|
||||
fn termux_gl_defaults_force_softpipe() {
|
||||
let mut env = Vec::new();
|
||||
apply_termux_gl_defaults(&mut env);
|
||||
assert!(env.contains(&(
|
||||
"MESA_LOADER_DRIVER_OVERRIDE".to_string(),
|
||||
"swrast".to_string()
|
||||
)));
|
||||
assert!(env.contains(&("LIBGL_ALWAYS_SOFTWARE".to_string(), "1".to_string())));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn termux_gl_defaults_overwrite_earlier_llvmpipe_choice() {
|
||||
let mut env = vec![(
|
||||
"MESA_LOADER_DRIVER_OVERRIDE".to_string(),
|
||||
"llvmpipe".to_string(),
|
||||
)];
|
||||
apply_termux_gl_defaults(&mut env);
|
||||
assert_eq!(
|
||||
env.iter()
|
||||
.find(|(key, _)| key == "MESA_LOADER_DRIVER_OVERRIDE")
|
||||
.map(|(_, value)| value.as_str()),
|
||||
Some("swrast")
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user