- D302: fix a reintroduced D250-class perf regression -- 4 uncached getenv() calls added by D236 diagnostic passes 10/12/14/16 were running on every triangle draw in gfx_sp_tri1; cached with the established pattern. - D304: F10 mouse-sensitivity menu overhaul -- widened Input.AimModeSens' clamp to match Input.MouseTurnSpeed, then collapsed both plus the aim/turn link toggle into a single Input.MouseSensitivity control per user request (avoids decoupling into a confusing state). Fixed two real overlay bugs found along the way: overlayUpdateScroll() bottom-anchored the clicked row on every click (not just when off-screen), and overlayRowAtY()'s hit-test scanned rows past the last one actually drawn, letting a click near a scroll boundary silently hit the wrong row (reproduced as "All unlocked" triggering "Quit to desktop" instead). - D225: GE_DEBUG_UNLOCKALL=1 dev-tooling toggle (file2.c), default off. - D164/D76: docs-only correction -- the legal-screen one-line fix was already committed 8dfc578f4; findings.md just never caught up. - D252: root-caused and fixed a 6+-session-old rainbow-particle bug -- explosionRenderPart() wrote 5 vertices into a 4-vertex allocation, corrupting the next particle/effect's data in the shared vertex pool. User-confirmed live: "Rainbow went away." - D305: Steam Deck SIGSEGV recurrence past D285's own fix -- sndHandleEvent's preempt-scan dereferenced its list-walk pointer before checking it for NULL. Added the missing guard. User-verified crash-free on the Deck across multiple sessions, including toggling Game.AllUnlocked off/on. D236 pass-16 diagnostic (GE_D236RAW, bg.c) carried along from a prior session's in-progress investigation; unchanged, env-gated, zero-cost unset.
fast3d — software RSP
A C++ interpreter that consumes the Gfx display list the game builds each
frame and emits OpenGL calls, replacing the Nintendo 64's Reality Signal
Processor and Reality Display Processor.
Origin and license
This code is adapted from the Perfect Dark PC
port (port/fast3d/), which in
turn is the Ship of Harkinian /
libultraship fast3d, itself descended from
sm64-port.
LICENSE.txt in this directory (MIT, © 2020 Emill, MaikelChan) covers that
lineage. glad/ is generated by glad
(© David Herberth, MIT). GoldenEye-specific changes in this directory are
under the repository's top-level MIT license.
Files
| File | Role |
|---|---|
gfx_pc.cpp |
the RSP interpreter — matrices, lights, fog, G_TRI1/G_TRI4, vtx |
gfx_opengl.cpp |
OpenGL backend — shaders, textures, z-buffer, framebuffers |
gfx_cc.cpp |
color-combiner equation -> GLSL shader |
gfx_sdl2.cpp |
SDL2 window-manager backend |
gfx_api.h |
public API (gfx_init / gfx_run / gfx_start_frame / ...) |
gbiex.h |
GoldenEye custom GBI command definitions |
glad/ |
OpenGL loader |
GoldenEye-specific work
The PD fast3d already handles G_TRI4 (GoldenEye uses it too). The GE additions
are the custom color-combiner / render modes and the handling of GE's GBI
extension commands. rsp/graphics/gmain.s (GE's real RSP microcode, in the
repo root) is the ground truth for the exact command encodings.