Skip to content

Instantly share code, notes, and snippets.

@kineticneticat
Created October 11, 2024 08:35
Show Gist options
  • Save kineticneticat/1fefeef06a01c9010ebdafd15e7ae86d to your computer and use it in GitHub Desktop.
Save kineticneticat/1fefeef06a01c9010ebdafd15e7ae86d to your computer and use it in GitHub Desktop.
@Override
public void render(HoldoutEntity holdout, float yaw, float partialTick, PoseStack ps, MultiBufferSource multiBufferSource, int packedLight) {
Vec3 pos = holdout.position();
RenderSystem.enableDepthTest();
LaggingMaskRenderTarget.draw(holdout.level().getGameTime());
if (!(multiBufferSource instanceof MultiBufferSource.BufferSource buffer)) return;
RenderSystem.enableDepthTest();
LaggingMaskRenderTarget.use(() -> {
// Renderer3d.renderFilled(ps, Color.WHITE, new Vec3(0, 70, 0), new Vec3(2, 2, 2));
int colour = 0xffffffff;
int black = 0;
float inner = 1f;
// float hitboxSize = 4f / 16f;
Vector3f innerSize = new Vector3f(inner, inner, inner);
ps.pushPose();
ps.mulPose(Axis.YP.rotationDegrees(180f - yaw));
// ps.mulPose(Axis.XP.rotationDegrees(180 - nix.getXRot()));
ps.mulPose(Axis.ZP.rotationDegrees(180f));
int light = LevelRenderer.getLightColor(holdout.level(), BlockPos.containing(holdout.position()));
RenderSystem.enableDepthTest();
drawCube(holdout, innerSize, new Vector3f(-innerSize.x / 2f, -innerSize.y / 2f, innerSize.z / 2f), ps, buffer, 16, 0x00_ffffff);
RenderSystem.enableDepthTest();
ps.popPose();
});
RenderSystem.enableDepthTest();
super.render(holdout, yaw, partialTick, ps, multiBufferSource, packedLight);
RenderSystem.enableDepthTest();
}
package dev.kineticcat.complexhex.client.render.entity.holdoutrenderingshenannigans;//package dev.kineticcat.complexhex.client.render.entity.holdoutrenderingshenannigans;//package dev.kineticcat.complexhex.client.render.entity.holdoutrenderingshenannigans;
import com.mojang.blaze3d.pipeline.RenderTarget;
import com.mojang.blaze3d.platform.GlStateManager;
import com.mojang.blaze3d.systems.RenderSystem;
import dev.kineticcat.complexhex.ComplexhexClient;
import net.minecraft.client.Minecraft;
import org.lwjgl.opengl.GL30C;
// this whole thing and associated files only exist due to the help of "0x150" on the fabric dc server lmao
public class LaggingMaskRenderTarget extends RenderTarget {
private static LaggingMaskRenderTarget instance;
private LaggingMaskRenderTarget(int width, int height) {
super(false);
RenderSystem.assertOnRenderThreadOrInit();
this.resize(width, height, true);
this.setClearColor(0f, 0f, 0f, 0f);
}
private static LaggingMaskRenderTarget obtain() {
if (instance == null) {
instance = new LaggingMaskRenderTarget(
Minecraft.getInstance().getMainRenderTarget().width,
Minecraft.getInstance().getMainRenderTarget().height);
}
return instance;
}
public static void use(Runnable r) {
RenderTarget mainBuffer = Minecraft.getInstance().getMainRenderTarget();
RenderSystem.assertOnRenderThreadOrInit();
LaggingMaskRenderTarget buffer = obtain();
if (buffer.width != mainBuffer.width || buffer.height != mainBuffer.height) {
buffer.resize(mainBuffer.width, mainBuffer.height, false);
}
GlStateManager._glBindFramebuffer(GL30C.GL_DRAW_FRAMEBUFFER, buffer.frameBufferId);
buffer.bindWrite(true);
r.run();
buffer.unbindWrite();
GlStateManager._glBindFramebuffer(GL30C.GL_DRAW_FRAMEBUFFER, mainBuffer.frameBufferId);
mainBuffer.bindWrite(false);
}
public static void draw(long time) {
RenderTarget mainBuffer = Minecraft.getInstance().getMainRenderTarget();
LaggingMaskRenderTarget buffer = obtain();
ComplexhexClient.mse.setSamplerUniform("Mask", buffer);
ComplexhexClient.mse.setUniformValue("time", (float) time);
ComplexhexClient.mse.render(Minecraft.getInstance().getDeltaFrameTime());
buffer.clear(false);
mainBuffer.bindWrite(false);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment