Files
goldeneye-pc-port/port/fast3d
James Dansereau 9b0acccd1d D229: fix green/pulsating IsWater water -- fast3d wasn't expanding CI8 indices
texSelect loads the water image as ZLIB+CI8 (raw 8-bit palette indices);
GE's custom RSP ucode expands them to RGBA16 in TMEM at load time, so a
later RGBA/16b tile re-declaration over the same slot samples real blue
pixels. fast3d has no such expansion and read the raw index byte-pairs as
16-bit texels (g dominates -> green mottle); the "pulsing" was always the
pre-existing PRIM_LOD_FRAC sinf() cross-fade between two mis-decoded tiles.

Track each TMEM load's source G_IM_FMT in LoadedTexture.src_fmt; in
import_texture, an RGBA/16b tile over a CI-sourced slot now routes through
the CI8 palette import path instead. Fires only on the genuine format
disagreement, so real RGBA16 textures are untouched.

Verified live on Frigate (-level_26): water renders blue, user confirms
"looks better". Sweep + Surface 2 by-eye still owed.

Also files D245 (water seam), D246 (edge strips), D247 (black bars) from
the same playtest session.

Claude-Session: https://claude.ai/code/session_016DQUKGLZxFtPy52MkKXXog
2026-09-12 20:16:45 -04:00
..
2026-09-01 19:28:59 -04:00
2026-09-01 19:28:59 -04:00

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.