83 lines
2.5 KiB
Java
83 lines
2.5 KiB
Java
package eu.crushedpixel.replaymod.video;
|
|
|
|
import eu.crushedpixel.replaymod.settings.RenderOptions;
|
|
import eu.crushedpixel.replaymod.video.capturer.CaptureData;
|
|
import eu.crushedpixel.replaymod.video.capturer.WorldRenderer;
|
|
import lombok.Getter;
|
|
import net.minecraft.client.Minecraft;
|
|
import net.minecraft.client.renderer.culling.ClippingHelper;
|
|
import org.lwjgl.util.ReadableDimension;
|
|
|
|
import java.io.IOException;
|
|
|
|
import static net.minecraft.client.renderer.GlStateManager.*;
|
|
|
|
public class EntityRendererHandler implements WorldRenderer {
|
|
public final Minecraft mc = Minecraft.getMinecraft();
|
|
|
|
@Getter
|
|
protected final RenderOptions options;
|
|
|
|
public CaptureData data;
|
|
|
|
public EntityRendererHandler(RenderOptions options) {
|
|
this.options = options;
|
|
|
|
((IEntityRenderer) mc.entityRenderer).setHandler(this);
|
|
}
|
|
|
|
public void withDisplaySize(int displayWidth, int displayHeight, Runnable runnable) {
|
|
final int prevWidth = mc.displayWidth;
|
|
final int prevHeight = mc.displayHeight;
|
|
mc.displayWidth = displayWidth;
|
|
mc.displayHeight = displayHeight;
|
|
|
|
runnable.run();
|
|
|
|
mc.displayWidth = prevWidth;
|
|
mc.displayHeight = prevHeight;
|
|
}
|
|
|
|
@Override
|
|
public void renderWorld(ReadableDimension displaySize, final float partialTicks, CaptureData data) {
|
|
this.data = data;
|
|
withDisplaySize(displaySize.getWidth(), displaySize.getHeight(), new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
renderWorld(partialTicks, 0);
|
|
}
|
|
});
|
|
}
|
|
|
|
public void renderWorld(float partialTicks, long finishTimeNano) {
|
|
mc.entityRenderer.updateLightmap(partialTicks);
|
|
|
|
enableDepth();
|
|
enableAlpha();
|
|
alphaFunc(516, 0.5F);
|
|
|
|
mc.entityRenderer.renderWorldPass(2, partialTicks, finishTimeNano);
|
|
}
|
|
|
|
@Override
|
|
public void close() throws IOException {
|
|
((IEntityRenderer) mc.entityRenderer).setHandler(null);
|
|
}
|
|
|
|
public static final class NoCullingClippingHelper extends ClippingHelper {
|
|
@Override
|
|
public boolean isBoxInFrustum(double p_78553_1_, double p_78553_3_, double p_78553_5_, double p_78553_7_, double p_78553_9_, double p_78553_11_) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
public interface GluPerspective {
|
|
void gluPerspective(float fovY, float aspect, float zNear, float zFar);
|
|
}
|
|
|
|
public interface IEntityRenderer {
|
|
void setHandler(EntityRendererHandler handler);
|
|
EntityRendererHandler getHandler();
|
|
}
|
|
}
|