ROOT CAUSE FOUND (GE_D172 probe, user Silo firefight capture): particle draws (G_CC_INTERFERENCE = TEXEL0*TEXEL1) configure tile 0 = IA8 smoke @ tmem 0 and tile 1 = RGBA16 fire @ tmem 0x188, but gfx_lod_tile_offset() returns 0 unconditionally on the !gfx_detail_textures_enabled path (a D107 blurry-ceiling fix), so texunit 1 samples the smoke texture too. smoke * smoke -> the magenta/cyan blood/spark colour. Probe evidence, 40/40 particle tris: cfg1[tile=1 tmem=392 fmt=RGBA siz=16b] SAMPLED1=tile0(tmem=0 fmt=IA) Fix: only fold texunit i to the base tile when LOD is actually active (rdp.tex_lod). D107's mip case (tex_lod=1) is unchanged; genuine non-LOD multitexture now gets tile i. bunker1 verify PASS (worst_cell 11.3, the D107 repro level, no regression). Needs an in-game eyeball: blood/sparks should read dark red, not magenta.
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.