Remove deprecated FRAPI fallback consumers ()

- Remove appropriate default method implementations
- Move some common code between AbstractBlockRenderContext and ItemRenderContext into AbstractRenderContext
This commit is contained in:
PepperCode1 2024-09-18 07:29:20 -07:00 committed by GitHub
parent 91470af952
commit 75ef59d640
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 31 additions and 175 deletions
fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric
fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/render

View file

@ -115,12 +115,8 @@ public interface MaterialFinder extends MaterialView {
* <p>This property is respected only in block contexts. It will not have an effect in other contexts.
*
* @see ShadeMode
*
* @apiNote The default implementation will be removed in the next breaking release.
*/
default MaterialFinder shadeMode(ShadeMode mode) {
return this;
}
MaterialFinder shadeMode(ShadeMode mode);
/**
* Copies all properties from the given {@link MaterialView} to this material finder.

View file

@ -57,10 +57,6 @@ public interface MaterialView {
/**
* @see MaterialFinder#shadeMode(ShadeMode)
*
* @apiNote The default implementation will be removed in the next breaking release.
*/
default ShadeMode shadeMode() {
return ShadeMode.ENHANCED;
}
ShadeMode shadeMode();
}

View file

@ -40,13 +40,6 @@ public interface Mesh {
/**
* Outputs all quads in this mesh to the given quad emitter.
*
* @apiNote The default implementation will be removed in the next breaking release.
*/
default void outputTo(QuadEmitter emitter) {
forEach(quad -> {
emitter.copyFrom(quad);
emitter.emit();
});
};
void outputTo(QuadEmitter emitter);
}

View file

@ -17,17 +17,11 @@
package net.fabricmc.fabric.api.renderer.v1.render;
import java.util.function.Consumer;
import java.util.function.Supplier;
import org.jetbrains.annotations.Nullable;
import net.minecraft.block.BlockState;
import net.minecraft.client.render.model.BakedModel;
import net.minecraft.client.render.model.json.ModelTransformationMode;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import net.minecraft.world.BlockRenderView;
import net.fabricmc.fabric.api.renderer.v1.mesh.Mesh;
import net.fabricmc.fabric.api.renderer.v1.mesh.MutableQuadView;
@ -59,12 +53,8 @@ public interface RenderContext {
/**
* Returns whether this context currently has at least one transform.
*
* @apiNote The default implementation will be removed in the next breaking release.
*/
default boolean hasTransform() {
return true;
}
boolean hasTransform();
/**
* Causes all models/quads/meshes sent to this consumer to be transformed by the provided
@ -101,24 +91,16 @@ public interface RenderContext {
*
* <p>This function can only be used on a block render context (i.e. in {@link FabricBakedModel#emitBlockQuads}).
* Calling it on another context (e.g. in {@link FabricBakedModel#emitItemQuads}) will throw an exception.
*
* @apiNote The default implementation will be removed in the next breaking release.
*/
default boolean isFaceCulled(@Nullable Direction face) {
return false;
}
boolean isFaceCulled(@Nullable Direction face);
/**
* Returns the current transformation mode.
*
* <p>This function can only be used on an item render context (i.e. in {@link FabricBakedModel#emitItemQuads}).
* Calling it on another context (e.g. in {@link FabricBakedModel#emitBlockQuads}) will throw an exception.
*
* @apiNote The default implementation will be removed in the next breaking release.
*/
default ModelTransformationMode itemTransformationMode() {
return ModelTransformationMode.NONE;
}
ModelTransformationMode itemTransformationMode();
@FunctionalInterface
interface QuadTransform {
@ -136,47 +118,4 @@ public interface RenderContext {
default Consumer<Mesh> meshConsumer() {
return mesh -> mesh.outputTo(getEmitter());
}
/**
* @deprecated Use {@link FabricBakedModel#emitBlockQuads(BlockRenderView, BlockState, BlockPos, Supplier, RenderContext) emitBlockQuads}
* or {@link FabricBakedModel#emitItemQuads(ItemStack, Supplier, RenderContext) emitItemQuads} on the baked model
* that you want to consume instead.
*/
@Deprecated(forRemoval = true)
BakedModelConsumer bakedModelConsumer();
/**
* @deprecated Use {@link FabricBakedModel#emitBlockQuads(BlockRenderView, BlockState, BlockPos, Supplier, RenderContext) emitBlockQuads}
* or {@link FabricBakedModel#emitItemQuads(ItemStack, Supplier, RenderContext) emitItemQuads} on the baked model
* that you want to consume instead.
*/
@Deprecated(forRemoval = true)
default Consumer<BakedModel> fallbackConsumer() {
return bakedModelConsumer();
}
@Deprecated(forRemoval = true)
interface BakedModelConsumer extends Consumer<BakedModel> {
/**
* Render a baked model by processing its {@linkplain BakedModel#getQuads} using the rendered block state.
*
* <p>For block contexts, this will pass the block state being rendered to {@link BakedModel#getQuads}.
* For item contexts, this will pass a {@code null} block state to {@link BakedModel#getQuads}.
* {@link #accept(BakedModel, BlockState)} can be used instead to pass the block state explicitly.
*/
@Override
void accept(BakedModel model);
/**
* Render a baked model by processing its {@linkplain BakedModel#getQuads} with an explicit block state.
*
* <p>This overload allows passing the block state (or {@code null} to query the item quads).
* This is useful when a model is being wrapped, and expects a different
* block state than the one of the block being rendered.
*
* <p>For item render contexts, you can use this function if you want to render the model with a specific block state.
* Otherwise, use {@linkplain #accept(BakedModel)} the other overload} to render the usual item quads.
*/
void accept(BakedModel model, @Nullable BlockState state);
}
}

View file

@ -38,7 +38,6 @@ import net.fabricmc.fabric.api.util.TriState;
/**
* Routines for adaptation of vanilla {@link BakedModel}s to FRAPI pipelines.
* Even though Indigo calls them directly, they are not for use by third party renderers, and might change at any time.
*/
public class VanillaModelEncoder {
private static final Renderer RENDERER = RendererAccess.INSTANCE.getRenderer();

View file

@ -27,41 +27,23 @@ import net.minecraft.client.render.LightmapTextureManager;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.client.render.VertexConsumer;
import net.minecraft.client.render.WorldRenderer;
import net.minecraft.client.render.model.BakedModel;
import net.minecraft.client.render.model.json.ModelTransformationMode;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import net.fabricmc.fabric.api.renderer.v1.material.RenderMaterial;
import net.fabricmc.fabric.api.renderer.v1.material.ShadeMode;
import net.fabricmc.fabric.api.renderer.v1.mesh.QuadEmitter;
import net.fabricmc.fabric.api.util.TriState;
import net.fabricmc.fabric.impl.client.indigo.Indigo;
import net.fabricmc.fabric.impl.client.indigo.renderer.aocalc.AoCalculator;
import net.fabricmc.fabric.impl.client.indigo.renderer.aocalc.AoConfig;
import net.fabricmc.fabric.impl.client.indigo.renderer.helper.ColorHelper;
import net.fabricmc.fabric.impl.client.indigo.renderer.mesh.EncodingFormat;
import net.fabricmc.fabric.impl.client.indigo.renderer.mesh.MutableQuadViewImpl;
import net.fabricmc.fabric.impl.renderer.VanillaModelEncoder;
public abstract class AbstractBlockRenderContext extends AbstractRenderContext {
protected final BlockRenderInfo blockInfo = new BlockRenderInfo();
protected final AoCalculator aoCalc;
private final MutableQuadViewImpl editorQuad = new MutableQuadViewImpl() {
{
data = new int[EncodingFormat.TOTAL_STRIDE];
clear();
}
@Override
public void emitDirectly() {
renderQuad(this);
}
};
private final BakedModelConsumerImpl vanillaModelConsumer = new BakedModelConsumerImpl();
private final BlockPos.Mutable lightPos = new BlockPos.Mutable();
protected AbstractBlockRenderContext() {
@ -72,12 +54,6 @@ public abstract class AbstractBlockRenderContext extends AbstractRenderContext {
protected abstract VertexConsumer getVertexConsumer(RenderLayer layer);
@Override
public QuadEmitter getEmitter() {
editorQuad.clear();
return editorQuad;
}
@Override
public boolean isFaceCulled(@Nullable Direction face) {
return !blockInfo.shouldDrawFace(face);
@ -89,11 +65,7 @@ public abstract class AbstractBlockRenderContext extends AbstractRenderContext {
}
@Override
public BakedModelConsumer bakedModelConsumer() {
return vanillaModelConsumer;
}
private void renderQuad(MutableQuadViewImpl quad) {
protected void renderQuad(MutableQuadViewImpl quad) {
if (!transform(quad)) {
return;
}
@ -273,25 +245,4 @@ public abstract class AbstractBlockRenderContext extends AbstractRenderContext {
// Unfortunately cannot use brightness cache here unless we implement one specifically for flat lighting. See #329
return WorldRenderer.getLightmapCoordinates(blockInfo.blockView, blockState, lightPos);
}
/**
* Consumer for vanilla baked models. Generally intended to give visual results matching a vanilla render,
* however there could be subtle (and desirable) lighting variations so is good to be able to render
* everything consistently.
*
* <p>Also, the API allows multi-part models that hold multiple vanilla models to render them without
* combining quad lists, but the vanilla logic only handles one model per block. To route all of
* them through vanilla logic would require additional hooks.
*/
private class BakedModelConsumerImpl implements BakedModelConsumer {
@Override
public void accept(BakedModel model) {
accept(model, blockInfo.blockState);
}
@Override
public void accept(BakedModel model, @Nullable BlockState state) {
VanillaModelEncoder.emitBlockQuads(model, state, blockInfo.randomSupplier, AbstractBlockRenderContext.this);
}
}
}

View file

@ -28,12 +28,26 @@ import net.minecraft.client.render.VertexConsumer;
import net.fabricmc.fabric.api.renderer.v1.mesh.Mesh;
import net.fabricmc.fabric.api.renderer.v1.mesh.MutableQuadView;
import net.fabricmc.fabric.api.renderer.v1.mesh.QuadEmitter;
import net.fabricmc.fabric.api.renderer.v1.render.RenderContext;
import net.fabricmc.fabric.impl.client.indigo.renderer.mesh.EncodingFormat;
import net.fabricmc.fabric.impl.client.indigo.renderer.mesh.MutableQuadViewImpl;
abstract class AbstractRenderContext implements RenderContext {
private static final QuadTransform NO_TRANSFORM = q -> true;
private final MutableQuadViewImpl editorQuad = new MutableQuadViewImpl() {
{
data = new int[EncodingFormat.TOTAL_STRIDE];
clear();
}
@Override
public void emitDirectly() {
renderQuad(this);
}
};
private QuadTransform activeTransform = NO_TRANSFORM;
private final ObjectArrayList<QuadTransform> transformStack = new ObjectArrayList<>();
private final QuadTransform stackTransform = q -> {
@ -57,6 +71,14 @@ abstract class AbstractRenderContext implements RenderContext {
private final Vector4f posVec = new Vector4f();
private final Vector3f normalVec = new Vector3f();
@Override
public QuadEmitter getEmitter() {
editorQuad.clear();
return editorQuad;
}
protected abstract void renderQuad(MutableQuadViewImpl quadView);
protected final boolean transform(MutableQuadView q) {
return activeTransform.transform(q);
}

View file

@ -20,7 +20,6 @@ import java.util.function.Supplier;
import org.jetbrains.annotations.Nullable;
import net.minecraft.block.BlockState;
import net.minecraft.client.color.item.ItemColors;
import net.minecraft.client.render.LightmapTextureManager;
import net.minecraft.client.render.RenderLayer;
@ -39,12 +38,9 @@ import net.minecraft.util.math.random.Random;
import net.fabricmc.fabric.api.renderer.v1.material.BlendMode;
import net.fabricmc.fabric.api.renderer.v1.material.RenderMaterial;
import net.fabricmc.fabric.api.renderer.v1.mesh.QuadEmitter;
import net.fabricmc.fabric.api.util.TriState;
import net.fabricmc.fabric.impl.client.indigo.renderer.helper.ColorHelper;
import net.fabricmc.fabric.impl.client.indigo.renderer.mesh.EncodingFormat;
import net.fabricmc.fabric.impl.client.indigo.renderer.mesh.MutableQuadViewImpl;
import net.fabricmc.fabric.impl.renderer.VanillaModelEncoder;
import net.fabricmc.fabric.mixin.client.indigo.renderer.ItemRendererAccessor;
/**
@ -61,20 +57,6 @@ public class ItemRenderContext extends AbstractRenderContext {
return random;
};
private final MutableQuadViewImpl editorQuad = new MutableQuadViewImpl() {
{
data = new int[EncodingFormat.TOTAL_STRIDE];
clear();
}
@Override
public void emitDirectly() {
renderQuad(this);
}
};
private final BakedModelConsumerImpl vanillaModelConsumer = new BakedModelConsumerImpl();
private ItemStack itemStack;
private ModelTransformationMode transformMode;
private MatrixStack matrixStack;
@ -95,12 +77,6 @@ public class ItemRenderContext extends AbstractRenderContext {
this.colorMap = colorMap;
}
@Override
public QuadEmitter getEmitter() {
editorQuad.clear();
return editorQuad;
}
@Override
public boolean isFaceCulled(@Nullable Direction face) {
throw new IllegalStateException("isFaceCulled can only be called on a block render context.");
@ -111,11 +87,6 @@ public class ItemRenderContext extends AbstractRenderContext {
return transformMode;
}
@Override
public BakedModelConsumer bakedModelConsumer() {
return vanillaModelConsumer;
}
public void renderModel(ItemStack itemStack, ModelTransformationMode transformMode, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int lightmap, int overlay, BakedModel model) {
this.itemStack = itemStack;
this.transformMode = transformMode;
@ -147,7 +118,8 @@ public class ItemRenderContext extends AbstractRenderContext {
isGlintDynamicDisplay = ItemRendererAccessor.fabric_callUsesDynamicDisplay(itemStack);
}
private void renderQuad(MutableQuadViewImpl quad) {
@Override
protected void renderQuad(MutableQuadViewImpl quad) {
if (!transform(quad)) {
return;
}
@ -255,16 +227,4 @@ public class ItemRenderContext extends AbstractRenderContext {
return ItemRenderer.getItemGlintConsumer(vertexConsumerProvider, layer, true, glint);
}
private class BakedModelConsumerImpl implements BakedModelConsumer {
@Override
public void accept(BakedModel model) {
accept(model, null);
}
@Override
public void accept(BakedModel model, @Nullable BlockState state) {
VanillaModelEncoder.emitItemQuads(model, state, randomSupplier, ItemRenderContext.this);
}
}
}