v3.0_2026-01-29-rc4
For players (stability-focused)
This release is primarily about stability. If you were frustrated by crashes or random UI glitches, this build should feel noticeably steadier.
- Tested extensively on system update 21.2.0 (and 17.0.1) targeting 1080p ResHack and full GUI usage.
- PLEASE replace your
config.tomlwith the one in the release!
- PLEASE replace your
- Emulator users: PLEASE enable 6GB/8GB RAM hack
- 1440/2160 output targets (4K) are not yet stable again while I focus on Switch hardware stability; they will be stable again for v3.0 final release
- Fixed a GPU/CPU sync hazard that caused random triangles/striping and occasional crashes when switching tabs or docking the overlay.
- Reduced overlay memory pressure and added hard caps to prevent runaway allocations.
- Made font loading and the UI atlas more reliable and smaller, reducing stalls and memory spikes.
- Touch input now sends proper press/release events and clears hover correctly.
Known Issues (fixes landing Soon™):
- 1440/2160 (4K) are not stable yet (stick to ~1400p max!)
- Cannot collect challenge rift reward cache
- Killing a Rift Guardian with certain options/cheats enabled may crash
- Permanent scrollbar on GUI window despite nothing to scroll
Technical breakdown (ImGui RendererHasTextures path + stability)
- ImGui texture support is explicitly enabled via
ImGuiBackendFlags_RendererHasTexturesinsource/program/gui2/imgui_overlay.cppandsource/third_party/imgui_backend/imgui_impl_nvn.cpp, and the backend now processesImDrawData->Textureseach frame viaTextureSupport::ProcessTextures. source/third_party/imgui_backend/imgui_impl_nvn_textures.cppimplements the texture lifecycle: descriptor pools sized from NVN device limits, aligned memory pools viaMemoryPoolMaker::createPoolAligned, free-list reuse, and delayed destruction (UnusedFramesvsFramesInFlight) to avoid in-flight GPU use.ImTextureIDnow carries the native NVNTextureHandle(ImU64) instead of a pointer, eliminating handle lifetime hazards when textures are recycled (imgui_impl_nvn_textures.cpp,imgui_impl_nvn.cpp).- GPU/CPU hazard fix: vertex/index/UBO buffers are triple-buffered (
FramesInFlight = 3) and selected per frame to avoid overwriting in-flight data; buffer caps guard against excessive allocations (source/third_party/imgui_backend/imgui_impl_nvn.hpp,source/third_party/imgui_backend/imgui_impl_nvn.cpp). - Font atlas stability improvements: atlas uses Alpha8 and is stored as R8 with swizzle to avoid RGBA expansion; glyph ranges and oversampling are trimmed; max texture dimension capped to 4096; font build is deferred until the shell is initialized, with bounded waits for shared system fonts (
source/program/gui2/imgui_overlay.cpp,source/third_party/imgui_backend/imgui_impl_nvn.cpp,source/third_party/imgui_backend/imgui_impl_nvn_textures.cpp). - Allocator hardening: system allocator helpers added; config/layout buffers and ImGui allocations route through the system allocator when available, with fallback to
nn::ro::LookupSymbolformalloc/free. Aligned allocation helpers reduce heap mismatches (source/program/system_allocator.hpp,source/program/nn_malloc.cpp,source/program/config.cpp,source/program/gui2/ui/overlay.cpp,source/program/gui2/imgui_overlay.cpp). - Crash diagnostics: a user exception handler writes register/stack/module/memory info to
sd:/config/d3hack-nx/user_exception.txt, and ErrorManager dumps are written tosd:/config/d3hack-nx/error_manager_dump.txt(source/program/exception_handler.cpp,source/program/d3/hooks/debug.hpp). - Resolution path tweaks: NVN texture clamp hooks are disabled in the res hack (dynamic scale + memory preferred) and heap thresholds were tuned to reduce allocation failures at higher output sizes (
source/program/d3/hooks/resolution.hpp,source/program/d3/patches.hpp). - Other changes: touch press/hover release fix in the overlay (
source/program/gui2/imgui_overlay.cpp), Chinese config strings updated (data/strings_zh.toml).