Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -144,17 +144,22 @@ public void endBatch() {


type.setupRenderState();
boolean previousMergeRendering = ImmediateState.mergeRendering;
RenderType previousMergedRenderType = ImmediateState.mergedRenderType;
ImmediateState.mergeRendering = true;


for (BufferSegment segment : segments) {
segment.type().draw(segment.meshData());
drawCalls += 1;
ImmediateState.mergedRenderType = type;

try {
for (BufferSegment segment : segments) {
segment.type().draw(segment.meshData());
drawCalls += 1;
}
} finally {
ImmediateState.mergeRendering = previousMergeRendering;
ImmediateState.mergedRenderType = previousMergedRenderType;
type.clearRenderState();
}

type.clearRenderState();
}
ImmediateState.mergeRendering = false;

int targetClearTime = getTargetClearTime();

Expand Down Expand Up @@ -192,19 +197,24 @@ public void endBatchWithType(TransparencyType transparencyType) {


type.setupRenderState();
boolean previousMergeRendering = ImmediateState.mergeRendering;
RenderType previousMergedRenderType = ImmediateState.mergedRenderType;
ImmediateState.mergeRendering = true;


for (BufferSegment segment : segments) {
segment.type().draw(segment.meshData());
drawCalls += 1;
ImmediateState.mergedRenderType = type;

try {
for (BufferSegment segment : segments) {
segment.type().draw(segment.meshData());
drawCalls += 1;
}
} finally {
ImmediateState.mergeRendering = previousMergeRendering;
ImmediateState.mergedRenderType = previousMergedRenderType;
type.clearRenderState();
}

typeToSegment.remove(type);

type.clearRenderState();
}
ImmediateState.mergeRendering = false;

profiler.popPush("reset type " + transparencyType);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package net.irisshaders.iris.layer;

import com.mojang.blaze3d.vertex.MeshData;
import net.irisshaders.batchedentityrendering.impl.BlendingStateHolder;
import net.irisshaders.batchedentityrendering.impl.TransparencyType;
import net.irisshaders.batchedentityrendering.impl.WrappableRenderType;
Expand Down Expand Up @@ -92,11 +91,6 @@ public String toString() {
return "iris_wrapped:" + this.wrapped.toString();
}

@Override
public void draw(MeshData meshData) {
wrapped.draw(meshData);
}

@Override
public TransparencyType getTransparencyType() {
return ((BlendingStateHolder) wrapped).getTransparencyType();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package net.irisshaders.iris.layer;

import com.mojang.blaze3d.vertex.MeshData;
import net.irisshaders.batchedentityrendering.impl.BlendingStateHolder;
import net.irisshaders.batchedentityrendering.impl.TransparencyType;
import net.irisshaders.batchedentityrendering.impl.WrappableRenderType;
Expand Down Expand Up @@ -87,11 +86,6 @@ public int hashCode() {
return this.wrapped.hashCode() + 1;
}

@Override
public void draw(MeshData meshData) {
wrapped.draw(meshData);
}

@Override
public String toString() {
return "iris_wrapped:" + this.wrapped.toString();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,24 @@
import net.minecraft.client.renderer.RenderType;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.Redirect;

@Mixin(RenderType.class)
public class MixinRenderType {
@Redirect(method = "draw", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/RenderType;setupRenderState()V"))
private void redirectSetupRenderState(RenderType renderType) {
if (!ImmediateState.mergeRendering) {
if (!shouldSkipRenderState(renderType)) {
renderType.setupRenderState();
}
}
@Redirect(method = "draw", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/RenderType;clearRenderState()V"))
private void redirectClearRenderState(RenderType renderType) {
if (!ImmediateState.mergeRendering) {
if (!shouldSkipRenderState(renderType)) {
renderType.clearRenderState();
}
}

private static boolean shouldSkipRenderState(RenderType renderType) {
return ImmediateState.mergeRendering && ImmediateState.mergedRenderType == renderType;
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package net.irisshaders.iris.vertices;

import net.minecraft.client.renderer.RenderType;

/**
* Some annoying global state needed for rendering.
*/
Expand All @@ -10,4 +12,5 @@ public class ImmediateState {
public static boolean renderWithExtendedVertexFormat = true;
public static boolean bypass;
public static boolean mergeRendering;
public static RenderType mergedRenderType;
}