Skip to content

Port the renderer, installer and tools to Minecraft 26.3 - #79

Open
AlexMelanFromRingo wants to merge 8 commits into
NVIDIAGameWorks:mainfrom
AlexMelanFromRingo:port/minecraft-26.3
Open

AlexMelanFromRingo wants to merge 8 commits into
NVIDIAGameWorks:mainfrom
AlexMelanFromRingo:port/minecraft-26.3

Conversation

@AlexMelanFromRingo

@AlexMelanFromRingo AlexMelanFromRingo commented Oct 30, 2026 •

Copy link
Copy Markdown
Contributor

The README hopes the community takes on ports to newer versions; this is a port of the mod, its installer, its developer tools and its docs to Minecraft Java Edition 26.3. Whether 26.x should replace 1.21.1 on main or live on its own branch is the maintainers' call; the installer has not been run end to end yet (details below).

This branch builds on #78 (migrate from Yarn to Mojang mappings on 1.21.1) and contains its commit; the review that matters here is the last two commits. It is rebased on main after #77, #61 and #70; #70's new ServerLightSnapshot tests are ported to Mojang names and to 26.3, and the CHANGELOG keeps #61's entry.

Port the renderer to Minecraft 26.3

Minecraft 26.x ships unobfuscated, renders through renderpearl and SDL3, and draws the world through an extract and submit pipeline, so most of the work is a port of APIs rather than names.

  • Build: Fabric Loom 1.19 without mappings or a refmap, Fabric Loader 0.20.1, Fabric API 0.165.0+26.3, Java 25 (also in build.yml), access widener in the official namespace.
  • Frame and input: the OpenGL backend is forced (GL 4.5 core), since Remix interop imports its image into GL. Presentation hooks GlSurface, the overlay input gate follows SDL events, and the Remix image is blitted into the main target with DSA.
  • Terrain: sections are captured from SectionCompiler through RenderSectionRegion, from BlockStateModel parts and the BakedQuad record, whose layer is now per quad. Visibility comes from LevelExtractor, so the 1.21.1 visibility-walk port is removed.
  • Entities: RemixSubmitCollector evaluates SubmitNodeCollector submits into the Remix capture in place of vanilla's feature renderers, for entities, block entities, first-person hands and items, and the breaking crack. The Copper Beacon renderer follows the new BlockEntityRenderer API.
  • Textures: glyph pages are mirrored from command-encoder writes; animated sprites are forwarded from the animation tick, since 26.x animates them on the GPU. Every CPU atlas copy honours and fills the sprite padding 26.x adds, and the Copper Beacon lens textures are 48 pixels square so they no longer cap the block atlas at one mip level.
  • Content: block lights and flame emission for the copper torch and copper lanterns; the Copper Beacon recipe, loot table and item definition use the 26.x data formats.
  • Found in game: the atmospheric sky readback sets a tight pack state, because vanilla now leaves GL_PACK_ROW_LENGTH set (about 20 GL errors a second otherwise); the block-entity atlas warm-up targets the chest atlas, since beds are block models in 26.x.

Mixin targets are no longer checked at compile time on 26.x. Every mixin was checked against the 26.3 client JAR at the bytecode level: target methods, @At call sites present in the target method, exact @Shadow, @Accessor and @Invoker descriptors, and injector handler signatures (67 mixins, 148 injection targets).

Move the installer, developer tools and docs to Minecraft 26.3

  • Installer: pins Minecraft 26.3, Fabric Loader 0.20.1, Fabric API 0.165.0+26.3 and a new GAME_JAVA_MAJOR of 25. The managed JDK is JDK 25: Adoptium Temurin on x64, and the Microsoft Build of OpenJDK on ARM64, where Adoptium builds no JDK 25, verified against the SHA-256 file Microsoft publishes beside it. The Microsoft launcher's java-runtime-epsilon is probed first. Upgrade moves a Prism instance an earlier release set up for 1.21.1 to the pinned versions and warns that its worlds upgrade when they next open. Fabric installer 1.0.1 still produces the 26.3 profile (checked headless), so it stays pinned.
  • Developer tools: require a JDK 25, the only major Prism accepts for 26.3, kept in step with the installer by a test; the diagnostic tools match a game window of any version, not only a 1.x title.
  • Zones: a 1.21.1 save's data/rtx_remix_zones.dat, which 26.x's own world upgrade leaves in place, is copied into the current file on first load, and the state lives in the server's save-wide storage so that file is data/rtx-remix-renderer/zones.dat.
  • Checks the port had broken: the access widener carries its SPDX header again, fabric.mod.json pins the exact Minecraft version, and the build-configuration test reads the Loom plugin id 26.x uses.
  • Docs: player, installer, developer and agent docs name 26.3, Java 25 and the 26.3 classes, events and file locations, and drop the removed visibility-walk switches.

How it was verified

  • gradlew.bat build test: 769 tests pass. The suite is smaller than on 1.21.1 because the visibility-walk tests went with the code they tested; new tests cover the atlas padding fill, the lens textures and the 1.21.1 zone migration.
  • tools\rtx.bat check --tests: ruff, ty, 1137 Python tests and the public-boundary gate pass.
  • installer.ps1 parses in Windows PowerShell 5.1 and PowerShell 7.
  • In game on 26.3 through a Prism instance: world load and upgrade of a 1.21.1 world, terrain near and far, block lights, sky by day and night, clouds, water, entities and mobs, particles, held and thrown items, and the Copper Beacon.

Not verified

  • The installer has not been run end to end, neither a fresh install nor an upgrade of a 1.21.1 instance, and the ARM64 path has not run on ARM64 hardware.
  • The zone migration is covered by unit tests on a real 1.21.1-layout file, not yet by loading such a world in game.
  • The redstone torch was redesigned in 26.x with an opaque red shell around its head; it renders as vanilla's geometry, which reads as a glowing cube under path tracing.

🤖 Generated with Claude Code

@AlexMelanFromRingo
AlexMelanFromRingo marked this pull request as ready for review November 1, 2026 16:21
@AlexMelanFromRingo AlexMelanFromRingo changed the title Port the renderer to Minecraft 26.3 Port the renderer, installer and tools to Minecraft 26.3 Nov 1, 2026
danzrikonew2 added a commit to danzrikonew2/rtx-remix-minecraft that referenced this pull request Nov 2, 2026
Adapts the save-wide storage and diagnostic-title corrections from NVIDIA upstream PR NVIDIAGameWorks#79 follow-up 600a95f by Alex Melan. Also preserves this fork's existing 26.3 dimension data and blocks fallback overwrites for unreadable or future-schema files.

Signed-off-by: danzrikonew2 <danzrikonew2@gmail.com>
AlexMelanFromRingo and others added 3 commits November 2, 2026 20:32
Minecraft 26.1+ ships unobfuscated and Fabric no longer supports
third-party mappings there, so move the mod to Mojang names first,
while still on 1.21.1.

- Sources, tests and the access widener remapped with Loom's
  migrateMappings / migrateClassTweakerMappings.
- Mixin strings the remapper missed fixed by hand: the held-item
  descriptor constant, and @at targets on inherited methods
  (ServerGamePacketListenerImpl.send, BlockState.isSolidRender,
  BlockState.getRenderShape).
- RenderSystem.flipFrame redirect marked remap = false: RenderSystem
  is not obfuscated, so Mojang mappings have no entry for it.
- Test reflection on OptionInstance uses the Mojang field name.

Verified: the remapped JAR matches the Yarn build class for class
(only constant-pool indexes, synthetic names and lambda names differ),
the refmaps resolve to the same intermediary targets, all 800 tests
pass, and the demo world renders with the same terrain, entity,
light and particle capture counts as 0.1.0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Alex Melan <59925151+AlexMelanFromRingo@users.noreply.github.com>
Move the mod from Minecraft 1.21.1 to 26.3 on Fabric Loader 0.20.1, Fabric
API 0.165.0+26.3 and Java 25. 26.x ships unobfuscated, so Loom 1.19 builds
without mappings or a refmap and the access widener uses the official
namespace.

Frame and input: 26.x renders through renderpearl and SDL3. The OpenGL
backend is forced (GL 4.5 core) because Remix interop imports its image into
GL; presentation hooks GlSurface, input gating follows SDL events, and the
Remix image is blitted into the main target with DSA.

Terrain: sections are captured from SectionCompiler through
RenderSectionRegion, from BlockStateModel parts and the BakedQuad record,
whose layer is now per quad. Visibility now comes from LevelExtractor, so the
1.21.1 visibility-walk port and its far-section probe are removed.

Entities: 26.x extracts render states and defers drawing through
SubmitNodeCollector. RemixSubmitCollector evaluates submits into the Remix
capture in place of vanilla's feature renderers, for entities, block
entities, first-person hands and items, and the breaking crack. The Copper
Beacon renderer follows the new BlockEntityRenderer API and articulates its
model from the render state.

Textures: glyph pages are mirrored from command-encoder writes, and animated
sprites are forwarded from the animation tick, since 26.x animates sprites
on the GPU. Every CPU atlas copy honours and fills the sprite padding 26.x
adds; the Copper Beacon lens textures are 48 pixels square so they no longer
cap the block atlas at one mip level.

Content: the copper torch, copper wall torch and copper lanterns get block
lights and flame emission. The Copper Beacon recipe, loot table and item
definition use the 26.x data formats.

Fixes found in game on 26.3: the atmospheric sky readback sets a tight pack
state, as vanilla now leaves GL_PACK_ROW_LENGTH set; the block-entity atlas
warm-up targets the chest atlas, since beds are block models in 26.x; a
closed DynamicTexture is recognised by its closed image.

Verified with gradlew build test (767 tests) and in game on 26.3 through a
Prism instance: world load, terrain, block lights, sky, clouds, water,
entities, particles, held items and thrown items. The installer and the
Python developer tooling still target 1.21.1 and are not updated here.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Alex Melan <59925151+AlexMelanFromRingo@users.noreply.github.com>
The installer pins Minecraft 26.3, Fabric Loader 0.20.1, Fabric API
0.165.0+26.3 and a new GAME_JAVA_MAJOR of 25. Its managed JDK is JDK 25:
Adoptium Temurin on x64 and, since Adoptium builds no Windows ARM64 JDK 25,
the Microsoft Build of OpenJDK on ARM64, verified against the SHA-256 file
Microsoft publishes beside it. The Microsoft launcher's java-runtime-epsilon
is probed first. Upgrading rewrites a Prism instance an earlier release set
up for another Minecraft version to the pinned versions and Java major,
warning that its worlds upgrade when they next open. Fabric installer 1.0.1
still produces the 26.3 profile, so it stays pinned.

The developer tools require a JDK 25 for Prism, which accepts only Java 25
for 26.3 (compatibleJavaMajors), and a test keeps that major in step with
the installer's. The diagnostic tools match a game window of any version
rather than only a 1.x title.

Zones saved by the 1.21.1 build in data/rtx_remix_zones.dat, which 26.x's
own world upgrade leaves in place, are copied into the current file on the
first lookup, and the state lives in the server's save-wide data storage so
that file is data/rtx-remix-renderer/zones.dat as documented.

Checks the 26.3 port had broken: the access widener carries its SPDX header
again, fabric.mod.json pins the exact Minecraft version as before, and the
build-configuration test reads the Loom plugin id 26.x uses.

Docs name the 26.3 classes, events and file locations, drop the removed
visibility-walk switches and invariant, and describe the new installer and
JDK behaviour.

Verified with gradlew build test (769 tests), tools\rtx.bat check --tests
(ruff, ty, 1137 tests and the public-boundary gate), a parse of
installer.ps1 in Windows PowerShell 5.1 and PowerShell 7, and the Fabric
installer run headless against 26.3. The installer itself was not run end
to end.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Alex Melan <59925151+AlexMelanFromRingo@users.noreply.github.com>
@sambvfx

sambvfx commented Nov 3, 2026

Copy link
Copy Markdown
Collaborator

Thanks for this, and for splitting the mappings change out into #78 so each can be reviewed on its own.

To answer your question directly: 26.3 won't replace 1.21.1 on main. If we support more than one version, we don't want two branches that drift apart. Before taking a port, we want to settle how one repository builds and tests more than one game version and loader, so a change doesn't have to be tested by hand in each. This PR is the most complete picture we have of what 26.x needs, including the extract and submit pipeline, SDL3 input, the forced GL backend and Java 25, so it's very useful for that.

The exact set of versions we'll support is still being decided, and it will be chosen based on community interest. If you'd like to weigh in, the RTX Remix Discord has a thread for it: https://discord.com/channels/1028444667789967381/1565060125301936169

Please keep the branch, and feel free to switch it to a draft for now.

AlexMelanFromRingo and others added 5 commits November 3, 2026 02:38
Brings in the installer's support for a Prism Launcher it does not detect
(NVIDIAGameWorks#47). The new data-folder record sits beside the 26.3 version constants, and
Initialize-Prism writes it before the version-neutral JVM defaults message.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Alex Melan <59925151+AlexMelanFromRingo@users.noreply.github.com>
Brings in the Fabric mesh fix (NVIDIAGameWorks#38) and the installer's support for a Prism
Launcher it does not detect (NVIDIAGameWorks#47). build.gradle keeps Mojang mappings with
NVIDIAGameWorks#38's shared Fabric Loader version, and NVIDIAGameWorks#38's Indigo integration test uses
Mojang names: Bootstrap.bootStrap, SharedConstants.tryDetectVersion and
BlockPos.ZERO.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Alex Melan <59925151+AlexMelanFromRingo@users.noreply.github.com>
Brings in the Fabric mesh fix (NVIDIAGameWorks#38) through NVIDIAGameWorks#78. On 26.3 terrain capture
reads vanilla model parts and has no RemixRenderContext, so nothing hands an
Indigo mesh a foreign emitter: the Indigo mixin, its quad copier and their
integration test stay out. The fabricTest task and its shared Fabric Loader
version stay, and may run with no tagged tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Alex Melan <59925151+AlexMelanFromRingo@users.noreply.github.com>
Brings in the end portal and gateway surfaces (NVIDIAGameWorks#68) and the lighting
profile upgrade (NVIDIAGameWorks#57). NVIDIAGameWorks#68's code uses Mojang names: the end portal and
gateway programs are RenderStateShard.RENDERTYPE_END_PORTAL_SHADER and
RENDERTYPE_END_GATEWAY_SHADER, compared against CompositeState.shaderState,
the bake reads textures through Resource.open and
NativeImage.getPixelRGBA, and its tests draw with addVertex and setUv.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Alex Melan <59925151+AlexMelanFromRingo@users.noreply.github.com>
Brings in the end portal and gateway surfaces (NVIDIAGameWorks#68) and the lighting
profile upgrade (NVIDIAGameWorks#57) through NVIDIAGameWorks#78. On 26.3 the surfaces are recognised by
RenderPipelines.END_PORTAL and END_GATEWAY, which need no access widener;
the bake reads end_portal.png from its 26.x folder, textures/entity/end_portal/,
and takes NativeImage.getPixel's ARGB. The payload history records the 26.3
minecraft-logic README.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Alex Melan <59925151+AlexMelanFromRingo@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants