Open-source project
rt64/rt64 avatar
rt64/rt64

RT64 N64 Renderer Architecture and Native Port Integration

RT64 is an N64 graphics renderer for playing with enhancements in emulators and native ports.

1,633 stars146 forksC++MIT

At a glance

What is it?
RT64 is a modern N64 graphics renderer for native ports, with deferred rendering, compute-based RSP processing, higher-resolution output, and texture replacement support. Emulator integration, ray tracing, and game scripting remain in development.
Who is it for?
Native port developers should evaluate RT64 when they need a modern replacement renderer with integration-oriented commands and framebuffer preservation. Emulator users and teams requiring path tracing should not treat this repository as their current integration point because both features are explicitly unavailable here.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 4 days ago.
What is it written in?
Mainly C++, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on November 6, 2026, and from our analysis. They are not legal advice.

From daily snapshots

Star history

  • rt64/rt641,633 ★ · +17
Star history
Repository2026-10-162026-11-06
rt64/rt641.6k1.6k

17 Stars in the last 21 days, measured from the daily GitHub snapshot. Compare with other projects

Editorial analysis

RT64 Targets Native N64 Ports, Not Emulator Integration Yet

RT64 addresses a specific graphics problem for developers of native N64 ports: preserving the Nintendo 64 rendering model while using current graphics APIs and adding capabilities such as higher-resolution rendering, widescreen output, frame interpolation, and texture packs. Its intended audience is primarily a native port developer or integrator, not someone looking for a ready-to-install emulator plugin. The README describes implementations based on D3D12, Vulkan, and Metal, as well as support for Windows 10, Windows 11, Linux, and macOS.

The current boundary is significant. Emulator support and ray tracing are not available in this repository yet. The public code is intended to provide a working renderer for native ports, while emulator integration is listed under development with a proposed compatibility database, feature whitelist, and configuration screen. The supported emulator list has not been determined. Path tracing is also unfinished, and the project says initial game support would be limited to a very small selection. Those omissions matter because a feature listed in the roadmap is not an integration surface available now.

The renderer is also selective about enhancements. Ultrawide support and high frame rate interpolation are available only where games support them. Model replacement has details still to be determined, while the planned game script interpreter would configure path tracing and patch game memory. RT64 offers an extensible rendering foundation for native ports, but the README does not establish it as a general-purpose drop-in player front end.

Deferred Frames Preserve Draw History for Replay and Inspection

RT64 does not submit every draw call to the GPU immediately. Instead, it records the history of an entire frame in an auxiliary structure. That history gives later stages access to the frame's complete sequence of commands rather than only the final rendered image. The bundled in-game debugger can examine this structure in detail, according to the README.

This architecture supports optimization, enhancements, asset replacement, and generated frames. A command-aware renderer can make decisions using the context of the frame instead of treating each draw as an isolated operation. That context is also necessary for RT64's extended command set, which is intended for ROM patches, ROM hacks, and native ports that need coordinated widescreen, interpolation, or path tracing behavior. The command extension is an integration mechanism, not a separate application layer automatically provided for every consumer.

The distinction matters for native port work. A port must feed RT64 the relevant RDP and RSP workload in a way that preserves the recorded operation history. The README does not document host callback names, initialization APIs, or a complete embedding example. It does establish the architectural requirement and the reason for it, but it does not let a reader verify from the README alone whether an existing port adapter can connect without additional implementation work.

Deferred RDP and GPU RSP Processing Shift Work Away from the CPU

RDP memory reads and texture-related operations are also deferred. RT64 stores requests in an operation list and flushes them when the game requires RDP synchronization. This gives the renderer time to optimize work and determine when output must be copied from the RDP back to memory. The design can also identify direct GPU-memory copies and patterns that can be replaced by equivalent, faster operations.

Vertex processing follows a different route. Transformations performed by the RSP, including position, lighting, and texturing, run in a highly parallel compute shader on the GPU. The stated purpose is to reduce CPU work and support higher vertex and polygon counts. Because transformations remain available as operations rather than being finalized immediately, the renderer can modify object and camera transformations when it generates a new frame. This is the mechanism behind RT64's ability to target very high frame rates, although the README does not provide measured frame rates for a particular game, computer, or graphics API.

Texture decoding also moves to the GPU. TMEM occupies 4 KB and can be uploaded directly rather than decoded on the CPU. RT64 attempts to generate and cache an RGBA32 texture with a compute shader. If sampling parameters make that representation impractical, such as a large texture mask without clamping caused by unsuitable configuration, it can sample TMEM directly and accept a small performance cost. The README attributes its TMEM behavior to reverse engineering with Wiseguy's homebrew test ROMs and says its color conversion formulas came from Thar0's RDP research.

Native and High-Resolution Renderers Keep Memory Semantics Separate

RT64 uses two renderers with different responsibilities. One draws at the game's native resolution, such as 240p, and immediately synchronizes results back to the running game at its original rate. The second replays draw calls recorded by the main renderer at a higher resolution, and it can run at another rate when interpolation is enabled. If the game does not require those memory regions, the native renderer can be disabled to reduce performance cost.

This separation exists because some N64 games read rendered data from RAM during gameplay. An enhancement that changes the final displayed image cannot disregard those reads. Preserving a native-rate synchronization path keeps game-visible RAM contents correct while allowing a separate presentation path to produce a higher-resolution or interpolated result.

Framebuffer detection tracks addresses, dimensions, matching contents, and related GPU-memory regions. When load and sample parameters align, RT64 can copy a framebuffer region directly and retain the image's high precision. The README limits this optimization to cases where the result is equivalent to sampling from RAM. It can also scale framebuffer operations for the high-resolution renderer and adjust texture coordinates automatically. This is a meaningful porting constraint: the integration must preserve memory synchronization semantics for games that inspect framebuffer contents, rather than treating every frame as presentation-only.

Preparing a Native Port Checkout and Build Environment

The documented starting point is a source checkout with CMake 3.20 or later, a C++17 compiler, and the Windows 10 or 11 SDK when building on Windows. The README lists Microsoft Visual C++, Clang, and GCC as known to work. It does not publish a packaged application, installer, plugin download, or a single end-user launch command, which is consistent with RT64 being a renderer intended for native port integration.

If the repository was cloned without recursively fetching submodules, the documented recovery command initializes and updates them:

bash
git submodule update --init --recursive

The integrator needs to build the renderer and connect it to a native port's graphics flow. The README documents build prerequisites and architecture, but it does not provide the exact CMake configure or build commands. It also does not specify an embedding example, initialization sequence, graphics API selection flag, or runtime configuration file. Those details would have to come from the repository's source and a concrete port implementation before judging integration effort.

The platform statement still gives integrators a useful initial filter. Windows 10, Windows 11, Linux, and macOS are named as supported. The graphics layer is built around D3D12, Vulkan, and Metal. A team can rule out an unsupported host platform early, but cannot infer backend selection or deployment steps from the README alone.

Texture Packs and Upgrade Costs Require Separate Checks

RT64 accepts texture packs using DDS files and provides asynchronous streaming. It is also compatible with Rice filenames, while `TEXTURE-PACKS.md` is the stated reference for creating RT64 texture packs. The README does not document cache sizing, missing-texture behavior, or a configuration key for controlling streaming.

The texture pipeline has two levels of representation. RT64 can upload 4 KB TMEM directly to the GPU and attempt compute-based conversion to a cached RGBA32 form. Some sampling cases cannot use that representation cleanly, so the renderer retains direct TMEM sampling as a fallback. A replacement pack therefore does not eliminate the need to account for the original N64 texture format and sampling rules. Pack authors need to follow the dedicated texture-pack documentation rather than assume that arbitrary image naming or loading behavior is sufficient.

The related release named `texture_pack_tools` was published on 2024-07-25. The repository's last push was on 2026-10-15, and it is not archived. The information supports recent repository activity, but it does not establish release frequency for the renderer itself, upgrade compatibility between commits, or a long-term support policy. The repository identifies the project as MIT licensed. The README does not describe relicensing terms for texture packs or third-party assets, so pack authors must examine applicable asset rights separately. No legal advice is implied.

RT64 Differs from an Emulator Plugin in Host Integration

The clearest alternative is a conventional emulator plugin that attaches to an existing emulator's rendering pipeline. Such an integration can inherit the emulator's configuration UI, compatibility handling, host lifecycle, and command submission conventions. RT64 takes a different approach: it exposes a renderer architecture designed for native ports to host, including deferred command history, extended commands, and separate native and high-resolution rendering paths.

That difference is useful when the port owner controls the N64 execution and graphics integration. It is less useful for a user who wants to add enhancements to an already running emulator, because the repository explicitly says emulator support is not available yet. RT64's dual-renderer memory contract is also more involved than simply replacing a final texture. Integrators must preserve immediate synchronization for game-visible framebuffer data while allowing a second renderer to replay commands at a different resolution or rate.

Several important questions remain outside the README. It does not document ABI stability, API versioning, exception behavior, required ownership of graphics resources, or how out-of-memory conditions are surfaced. It also does not give a compatibility matrix for individual native ports. A prospective adopter should inspect those source-level interfaces rather than infer production readiness from the architecture or the MIT license. If a project needs path tracing, model replacement, emulator loading, or automatic runtime game scripting now, RT64 does not meet that requirement.

Editorial conclusion

Native port developers should evaluate RT64 when they need a modern replacement renderer with integration-oriented commands and framebuffer preservation. Emulator users and teams requiring path tracing should not treat this repository as their current integration point because both features are explicitly unavailable here. Before adoption, verify the target operating system, graphics API integration, texture format requirements, and whether their games rely on synchronization and RAM-visible framebuffer data.

Frequently asked questions

Can RT64 be used as an emulator plugin?

No. The README says emulator plugin support and ray tracing are not available in this repository yet. The current public implementation is intended for native ports that want to use RT64 as their renderer.

Which graphics APIs and operating systems does RT64 support?

The README identifies D3D12, Vulkan, and Metal as the modern graphics APIs used by the renderer. It lists Windows 10, Windows 11, Linux, and macOS as supported platforms.

What must be done before building RT64?

RT64 requires CMake 3.20 or later, a C++17 compiler, and the Windows 10 or 11 SDK on Windows. If submodules were not cloned recursively, the README specifies `git submodule update --init --recursive`.

Does RT64 support replacing N64 textures?

Yes. The README lists DDS texture packs, asynchronous streaming, and compatibility with Rice filenames. It points pack authors to `TEXTURE-PACKS.md` for the project's texture-pack details.

Can RT64 render above the N64's native resolution or interpolate frames?

The available renderer can draw at higher resolution and downsample toward the original game resolution. It can also interpolate visuals to 60 FPS or above through HFR, although the README says both Ultrawide and interpolation have limited game support.

Official sources

  1. Issues
  2. License: MIT
  3. README
  4. Releases
  5. rt64/rt64 on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/rt64-rt64.svg)](https://hysenlabs.com/projects/rt64-rt64)

Star history chart for your README

markdown
[![Star history](https://hysenlabs.com/chart/rt64-rt64.svg)](https://hysenlabs.com/projects/rt64-rt64)

Was this useful?