feat!: Use entrypoints and RendererProvider for more reliable Renderer registry#5185
Open
sylv256 wants to merge 29 commits intoFabricMC:26.1from
Open
feat!: Use entrypoints and RendererProvider for more reliable Renderer registry#5185sylv256 wants to merge 29 commits intoFabricMC:26.1from
RendererProvider for more reliable Renderer registry#5185sylv256 wants to merge 29 commits intoFabricMC:26.1from
Conversation
Member
Author
|
Setting to draft as changes were requested |
modmuss50
reviewed
Feb 4, 2026
...enderer-api-v1/src/client/java/net/fabricmc/fabric/impl/client/renderer/RendererManager.java
Outdated
Show resolved
Hide resolved
modmuss50
reviewed
Feb 4, 2026
fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/Indigo.java
Show resolved
Hide resolved
- Crash when no `RendererProvider` is present - Replace `fabric-renderer-indigo:contains_renderer` mechanism with the `RendererProvider#priority` system
# Conflicts: # fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/api/client/renderer/v1/Renderer.java # fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/impl/client/renderer/RendererManager.java # fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/Indigo.java # fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/IndigoMixinConfigPlugin.java # fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/IndigoRenderer.java
- Also remove unnecessary ServiceLoader for Indigo
PepperCode1
requested changes
Feb 5, 2026
...erer-api-v1/src/client/java/net/fabricmc/fabric/api/client/renderer/v1/RendererProvider.java
Outdated
Show resolved
Hide resolved
...erer-api-v1/src/client/java/net/fabricmc/fabric/api/client/renderer/v1/RendererProvider.java
Outdated
Show resolved
Hide resolved
...erer-api-v1/src/client/java/net/fabricmc/fabric/api/client/renderer/v1/RendererProvider.java
Show resolved
Hide resolved
...enderer-api-v1/src/client/java/net/fabricmc/fabric/impl/client/renderer/RendererManager.java
Show resolved
Hide resolved
...enderer-api-v1/src/client/java/net/fabricmc/fabric/impl/client/renderer/RendererManager.java
Outdated
Show resolved
Hide resolved
...enderer-api-v1/src/client/java/net/fabricmc/fabric/impl/client/renderer/RendererManager.java
Outdated
Show resolved
Hide resolved
...enderer-api-v1/src/client/java/net/fabricmc/fabric/impl/client/renderer/RendererManager.java
Show resolved
Hide resolved
...enderer-api-v1/src/client/java/net/fabricmc/fabric/impl/client/renderer/RendererManager.java
Outdated
Show resolved
Hide resolved
...r-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/IndigoMixinConfigPlugin.java
Outdated
Show resolved
Hide resolved
...erer-api-v1/src/client/java/net/fabricmc/fabric/api/client/renderer/v1/RendererProvider.java
Outdated
Show resolved
Hide resolved
Member
Author
modmuss50
requested changes
Feb 7, 2026
...erer-api-v1/src/client/java/net/fabricmc/fabric/api/client/renderer/v1/RendererProvider.java
Outdated
Show resolved
Hide resolved
...erer-api-v1/src/client/java/net/fabricmc/fabric/api/client/renderer/v1/RendererProvider.java
Outdated
Show resolved
Hide resolved
Renderer registry, RendererReadyEntrypointRendererProvider for Renderer registry
RendererProvider for Renderer registryRendererProvider for more reliable Renderer registry
PepperCode1
requested changes
Feb 10, 2026
...erer-api-v1/src/client/java/net/fabricmc/fabric/api/client/renderer/v1/RendererProvider.java
Outdated
Show resolved
Hide resolved
fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/api/client/renderer/v1/Renderer.java
Show resolved
Hide resolved
...erer-api-v1/src/client/java/net/fabricmc/fabric/api/client/renderer/v1/RendererProvider.java
Outdated
Show resolved
Hide resolved
…/client/renderer/v1/RendererProvider.java Co-authored-by: PepperCode1 <44146161+PepperCode1@users.noreply.github.com>
Juuxel
reviewed
Feb 10, 2026
Member
Juuxel
left a comment
There was a problem hiding this comment.
The changes look fine assuming this is something that renderer impls and consumers want (I'm not a huge expert in this area), just some minor comments from me.
...erer-api-v1/src/client/java/net/fabricmc/fabric/api/client/renderer/v1/RendererProvider.java
Outdated
Show resolved
Hide resolved
...erer-api-v1/src/client/java/net/fabricmc/fabric/api/client/renderer/v1/RendererProvider.java
Outdated
Show resolved
Hide resolved
...enderer-api-v1/src/client/java/net/fabricmc/fabric/impl/client/renderer/RendererManager.java
Outdated
Show resolved
Hide resolved
docs on `#getModId` `Renderer#get`
# Conflicts: # fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/api/client/renderer/v1/RendererProvider.java
PepperCode1
approved these changes
Feb 11, 2026
Member
|
This is ready to merge, I can either do it now before the rendering API has been ported to the latest snapshot or after? Im not sure what is better. |
Member
Author
Go ahead and merge this. The port is likely going to take a while, and I don't think this will interfere much. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Problem
Because
Renderercan be rendered at any point before or during Minecraft's initialization until it is used, problems arise when it's necessary to use it early. For example, in order to disable Indigo, FRAPI implementations need to add a custom field to theirfabric.mod.json. Renderers should not need to add a field to their FMJ just to disable Indigo, let alone any other Renderer. Also, mods extending FRAPI such as Conduit need a defined point in time during and after whichRendereris ready to use. All of this introduces inconsistent behavior and quickly becomes a headache. See #3109 for more details.Solution
This Pull Request overhauls and adds new concepts to FRAPI's
Rendererregistration.RendererProviderInstead of manually calling
Renderer#register, renderers are now registered with an entrypointfabric-renderer-api-v1:renderer_providerset to the implementation ofRendererProvider. This lets mods get basic information about the renderer that will be loaded at any point during the game's execution as they can be loaded immediately, and this is especially useful for Mixin Config Plugins.The
entrypointssection will look as follows:and the class:
Justification
Sometimes, mods will want to use
Rendererright away, and this is where the issues with the prior system really reveal themselves. Previously, if a mod wantedRenderer, they would have to either useRenderer#getand hope it's already registered, or they would Mixin intoRenderer#registerto ensure thatRendererhas been registered before using it.Conduit is a library built to create and implement extensions for FRAPI. In order for Conduit's extensions, implementations, and users to use FRAPI and Conduit effectively, it must be possible to get the
Rendererinstance early. Some operations are best done at mod initialization afterRendererhas been initialized, so having a lazily initializedRendererto ensure code that requiresRendererdoes not use it before it is registered is powerful.Tests & Integrity
I've added two checks: one in FRAPI itself to ensure a renderer is loaded, and a unit test to ensure the override ordering is correct. If either of these conditions fail, an exception is thrown.
Additional Information
Proof that it works

Fixes #3109