Skip to content

Commit 9125b6d

Browse files
committed
Override submodel AO setting by parent
Match vanilla behavior
1 parent b71c3a6 commit 9125b6d

4 files changed

Lines changed: 25 additions & 2 deletions

File tree

fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/api/renderer/v1/render/RenderContext.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.util.function.Consumer;
2020
import java.util.function.Supplier;
2121

22+
import net.fabricmc.fabric.api.util.TriState;
2223
import net.minecraft.client.renderer.RenderType;
2324
import net.neoforged.neoforge.client.model.data.ModelData;
2425
import org.jetbrains.annotations.Nullable;
@@ -191,4 +192,10 @@ default RenderType getRenderType() {
191192
default void pushModelData(ModelData modelData) {}
192193

193194
default void popModelData() {}
195+
196+
default TriState usesAmbientOcclusion() {
197+
return TriState.DEFAULT;
198+
}
199+
200+
default void setUsesAmbientOcclusion(TriState state) {}
194201
}

fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/impl/renderer/VanillaModelEncoder.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ public class VanillaModelEncoder {
4545

4646
public static void emitBlockQuads(BakedModel model, @Nullable BlockState state, Supplier<RandomSource> randomSupplier, RenderContext context) {
4747
QuadEmitter emitter = context.getEmitter();
48-
final RenderMaterial defaultMaterial = model.useAmbientOcclusion() ? STANDARD_MATERIAL : NO_AO_MATERIAL;
48+
final TriState useAO = context.usesAmbientOcclusion();
49+
final RenderMaterial defaultMaterial = useAO == TriState.TRUE || useAO == TriState.DEFAULT && model.useAmbientOcclusion() ? STANDARD_MATERIAL : NO_AO_MATERIAL;
4950

5051
for (int i = 0; i <= ModelHelper.NULL_FACE_ID; i++) {
5152
final Direction cullFace = ModelHelper.faceFromIndex(i);

fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/mixin/renderer/client/MultipartBakedModelMixin.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import net.fabricmc.fabric.api.renderer.v1.model.FabricBakedModel;
2020
import net.fabricmc.fabric.api.renderer.v1.render.RenderContext;
21+
import net.fabricmc.fabric.api.util.TriState;
2122
import net.minecraft.client.renderer.RenderType;
2223
import net.minecraft.client.resources.model.BakedModel;
2324
import net.minecraft.client.resources.model.MultiPartBakedModel;
@@ -106,9 +107,12 @@ public void emitBlockQuads(BlockAndTintGetter blockView, BlockState state, Block
106107
if (renderType != null && !model.getRenderTypes(state, random, context.getModelData()).contains(renderType))
107108
continue;
108109

110+
net.neoforged.neoforge.common.util.TriState usesAO = ((MultiPartBakedModel) (Object) this).useAmbientOcclusion(state, context.getModelData(), renderType);
109111
context.pushModelData(data);
112+
context.setUsesAmbientOcclusion(usesAO == net.neoforged.neoforge.common.util.TriState.FALSE ? TriState.FALSE : TriState.TRUE);
110113
model.emitBlockQuads(blockView, state, pos, subModelRandomSupplier, context);
111114
context.popModelData();
115+
context.setUsesAmbientOcclusion(TriState.DEFAULT);
112116
}
113117
}
114118
}

fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/AbstractBlockRenderContext.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ public void emitDirectly() {
6666
private final BlockPos.MutableBlockPos lightPos = new BlockPos.MutableBlockPos();
6767

6868
private final Stack<ModelData> modelDataStack = new Stack<>();
69+
private TriState useAO = TriState.DEFAULT;
6970

7071
protected AbstractBlockRenderContext() {
7172
aoCalc = createAoCalc(blockInfo);
@@ -118,7 +119,17 @@ public void pushModelData(ModelData modelData) {
118119
public void popModelData() {
119120
this.modelDataStack.pop();
120121
}
121-
122+
123+
@Override
124+
public TriState usesAmbientOcclusion() {
125+
return this.useAO;
126+
}
127+
128+
@Override
129+
public void setUsesAmbientOcclusion(TriState state) {
130+
this.useAO = state;
131+
}
132+
122133
private void renderQuad(MutableQuadViewImpl quad) {
123134
if (!transform(quad)) {
124135
return;

0 commit comments

Comments
 (0)