Add compatibility to shaders that utilize the Shadow Map by manually setting displayListEntitiesDirty to false Call Shaders.beginRender in an Event Handler to avoid calling all of EntityRenderer#renderWorld
68 lines
2.0 KiB
Java
68 lines
2.0 KiB
Java
package com.replaymod.render.hooks;
|
|
|
|
import com.replaymod.render.RenderSettings;
|
|
import com.replaymod.render.capturer.CaptureData;
|
|
import com.replaymod.render.capturer.WorldRenderer;
|
|
import lombok.Getter;
|
|
import net.minecraft.client.Minecraft;
|
|
import net.minecraft.client.renderer.GlStateManager;
|
|
import net.minecraftforge.fml.common.FMLCommonHandler;
|
|
|
|
import java.io.IOException;
|
|
|
|
public class EntityRendererHandler implements WorldRenderer {
|
|
public final Minecraft mc = Minecraft.getMinecraft();
|
|
|
|
@Getter
|
|
protected final RenderSettings settings;
|
|
|
|
public CaptureData data;
|
|
|
|
public boolean omnidirectional;
|
|
|
|
public EntityRendererHandler(RenderSettings settings) {
|
|
this.settings = settings;
|
|
|
|
((IEntityRenderer) mc.entityRenderer).replayModRender_setHandler(this);
|
|
}
|
|
|
|
@Override
|
|
public void renderWorld(final float partialTicks, CaptureData data) {
|
|
this.data = data;
|
|
renderWorld(partialTicks, 0);
|
|
}
|
|
|
|
public void renderWorld(float partialTicks, long finishTimeNano) {
|
|
FMLCommonHandler.instance().onRenderTickStart(partialTicks);
|
|
|
|
mc.entityRenderer.updateLightmap(partialTicks);
|
|
|
|
GlStateManager.enableDepth();
|
|
GlStateManager.enableAlpha();
|
|
GlStateManager.alphaFunc(516, 0.5F);
|
|
|
|
mc.entityRenderer.renderWorldPass(2, partialTicks, finishTimeNano);
|
|
|
|
FMLCommonHandler.instance().onRenderTickEnd(partialTicks);
|
|
}
|
|
|
|
@Override
|
|
public void close() throws IOException {
|
|
((IEntityRenderer) mc.entityRenderer).replayModRender_setHandler(null);
|
|
}
|
|
|
|
@Override
|
|
public void setOmnidirectional(boolean omnidirectional) {
|
|
this.omnidirectional = omnidirectional;
|
|
}
|
|
|
|
public interface GluPerspective {
|
|
void replayModRender_gluPerspective(float fovY, float aspect, float zNear, float zFar);
|
|
}
|
|
|
|
public interface IEntityRenderer {
|
|
void replayModRender_setHandler(EntityRendererHandler handler);
|
|
EntityRendererHandler replayModRender_getHandler();
|
|
}
|
|
}
|