Skip to content

Graphics Troubleshooting

Devin edited this page Oct 13, 2026 · 1 revision

Graphics Troubleshooting

Automatic compatibility retry (self-healing)

If the game dies during GL/EGL startup — a native driver crash never reaches the Java crash handler — the app notices on next launch:

  • A marker is written before GL init and cleared after the first successful frame.
  • If the marker survives, the next launch escalates the persisted GL fallback level.
  • Level 0: normal detection — ES 3.2 + geometry shaders when available.
  • Level 1: forces the ES 3.1-compatible renderer (pretranspiled -310 shaders, no geometry shaders, per-face PS1 depth via gl_FragDepth).

So if the game closes itself on launch, just open it again — the second attempt runs the compatibility renderer. The level is recorded in logs as GL fallback level: N.

ANGLE

The app opts into ANGLE via manifest metadata. If your device has an ANGLE package (most Android 11+ devices ship com.google.android.angle), you can force GLES-over-Vulkan rendering:

  • Developer Options → Preferred graphics driver → Severed Chains → ANGLE, or
  • adb shell settings put global angle_gl_driver_selection_pkgs com.legendofdragoon.severedchains && adb shell settings put global angle_gl_driver_selection_values angle

If the device has no ANGLE package this does nothing — check adb logcat | grep ANGLE for Failed to find ANGLE package.

Known-good configurations

Device SoC/GPU Android Status
moto g82 5G Snapdragon 695 / Adreno 619 13 Works on ES 3.1 fallback (level 1) — see notes
Test device Adreno 610 14 Works on ES 3.2 geometry-shader path

Notes:

  • Android 13 blocks reflective access to java.util.TimSort internals the engine uses — fixed in v0.1.12 via a public Arrays.sort fallback.
  • The ES 3.1 path restores per-face PS1 depth ordering through a flat varying + gl_FragDepth (no geometry shader available). Fixed in v0.1.13.

Logs

Everything lands in Documents/Severed Chains/logs/:

  • crash-*.log — Java-level crashes, captured by the app's handler
  • debug-*.log — verbose engine log (debug builds)
  • A native crash leaves the log truncated with no crash-* file — that's the signal the GL fallback ladder heals.

Clone this wiki locally