Files
Angelica/src/main/java/net/coderbot/iris/pipeline/HandRenderer.java
T

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

184 lines
6.3 KiB
Java
Raw Normal View History

+4
2023-12-24 21:49:28 -08:00
package net.coderbot.iris.pipeline;
import com.gtnewhorizons.angelica.compat.mojang.Camera;
import com.gtnewhorizons.angelica.compat.mojang.InteractionHand;
2024-10-29 00:20:00 +01:00
import com.gtnewhorizons.angelica.compat.toremove.RenderLayer;
2024-10-31 21:36:24 +01:00
import com.gtnewhorizons.angelica.glsm.GLStateManager;
2024-10-29 00:20:00 +01:00
import com.gtnewhorizons.angelica.rendering.RenderingState;
import net.coderbot.iris.block_rendering.BlockRenderingSettings;
+4
2023-12-24 21:49:28 -08:00
import net.irisshaders.iris.api.v0.IrisApi;
2024-10-29 00:20:00 +01:00
import net.minecraft.block.Block;
+4
2023-12-24 21:49:28 -08:00
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.RenderGlobal;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
2024-01-26 10:01:41 -08:00
import net.minecraft.item.ItemStack;
2024-10-29 00:20:00 +01:00
import org.lwjgl.opengl.GL11;
import org.lwjgl.util.glu.Project;
2024-01-26 10:01:41 -08:00
2024-10-29 00:20:00 +01:00
import java.util.Map;
+4
2023-12-24 21:49:28 -08:00
public class HandRenderer {
2024-10-29 00:20:00 +01:00
public static final HandRenderer INSTANCE = new HandRenderer();
private boolean ACTIVE;
private boolean renderingSolid;
public static final float DEPTH = 0.125F;
private void setupGlState(RenderGlobal gameRenderer, Camera camera, float tickDelta) {
Minecraft mc = Minecraft.getMinecraft();
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
// We need to scale the matrix by 0.125 so the hand doesn't clip through blocks.
GL11.glScalef(1.0F, 1.0F, DEPTH);
// TODO: Anaglyph
/*if (this.mc.gameSettings.anaglyph) {
GL11.glTranslatef((float) (-(anaglyphChannel * 2 - 1)) * 0.07F, 0.0F, 0.0F);
}*/
if (mc.entityRenderer.cameraZoom != 1.0D) {
GL11.glTranslatef((float) mc.entityRenderer.cameraYaw, (float) (-mc.entityRenderer.cameraPitch), 0.0F);
GL11.glScaled(mc.entityRenderer.cameraZoom, mc.entityRenderer.cameraZoom, 1.0D);
}
Project.gluPerspective(mc.entityRenderer.getFOVModifier(tickDelta, false), (float) mc.displayWidth / (float) mc.displayHeight, 0.05F, mc.entityRenderer.farPlaneDistance * 2.0F);
if (mc.playerController.enableEverythingIsScrewedUpMode()) {
GL11.glScalef(1.0F, 2 / 3f, 1.0F);
}
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glLoadIdentity();
// TODO: Anaglyph
/*if (mc.gameSettings.anaglyph) {
GL11.glTranslatef((float) (anaglyphChannel * 2 - 1) * 0.1F, 0.0F, 0.0F);
}*/
mc.entityRenderer.hurtCameraEffect(tickDelta);
if (mc.gameSettings.viewBobbing) {
mc.entityRenderer.setupViewBobbing(tickDelta);
}
}
private boolean canRender(Camera camera, RenderGlobal gameRenderer) {
Minecraft mc = Minecraft.getMinecraft();
return mc.entityRenderer.debugViewDirection <= 0 &&
mc.gameSettings.thirdPersonView == 0 &&
!camera.getEntity().isPlayerSleeping() &&
!mc.gameSettings.hideGUI &&
// TODO: SPECTATOR
// mc.playerController.currentGameType
!mc.playerController.enableEverythingIsScrewedUpMode();
}
public boolean isHandTranslucent(InteractionHand hand) {
+4
2023-12-24 21:49:28 -08:00
// TODO: Offhand
// Item item = Minecraft.getMinecraft().thePlayer.getItemBySlot(hand == InteractionHand.OFF_HAND ? EquipmentSlot.OFFHAND : EquipmentSlot.MAINHAND).getItem();
2024-01-26 10:01:41 -08:00
ItemStack heldItem = Minecraft.getMinecraft().thePlayer.getHeldItem();
if (heldItem == null) {
+4
2023-12-24 21:49:28 -08:00
return false;
2024-10-29 00:20:00 +01:00
}
Item item = heldItem.getItem();
+4
2023-12-24 21:49:28 -08:00
2024-10-29 00:20:00 +01:00
if (item instanceof ItemBlock itemBlock) {
Map<Block, RenderLayer> blockTypeIds = BlockRenderingSettings.INSTANCE.getBlockTypeIds();
return blockTypeIds != null && blockTypeIds.get(itemBlock.field_150939_a) == RenderLayer.translucent();
}
+4
2023-12-24 21:49:28 -08:00
2024-10-29 00:20:00 +01:00
return false;
}
+4
2023-12-24 21:49:28 -08:00
2024-10-29 00:20:00 +01:00
public boolean isAnyHandTranslucent() {
return isHandTranslucent(InteractionHand.MAIN_HAND) || isHandTranslucent(InteractionHand.OFF_HAND);
}
+4
2023-12-24 21:49:28 -08:00
2024-10-29 00:20:00 +01:00
public void renderSolid(float tickDelta, Camera camera, RenderGlobal gameRenderer, WorldRenderingPipeline pipeline) {
if (!canRender(camera, gameRenderer) || !IrisApi.getInstance().isShaderPackInUse()) {
return;
}
Minecraft mc = Minecraft.getMinecraft();
+4
2023-12-24 21:49:28 -08:00
2024-10-29 00:20:00 +01:00
ACTIVE = true;
+4
2023-12-24 21:49:28 -08:00
2024-10-29 00:20:00 +01:00
pipeline.setPhase(WorldRenderingPhase.HAND_SOLID);
+4
2023-12-24 21:49:28 -08:00
2024-10-29 00:20:00 +01:00
GL11.glPushMatrix();
GL11.glDepthMask(true); // actually write to the depth buffer, it's normally disabled at this point
+4
2023-12-24 21:49:28 -08:00
2024-10-29 00:20:00 +01:00
mc.mcProfiler.startSection("iris_hand");
+4
2023-12-24 21:49:28 -08:00
2024-10-29 00:20:00 +01:00
setupGlState(gameRenderer, camera, tickDelta);
+4
2023-12-24 21:49:28 -08:00
2024-10-29 00:20:00 +01:00
renderingSolid = true;
mc.entityRenderer.enableLightmap(tickDelta);
mc.entityRenderer.itemRenderer.renderItemInFirstPerson(tickDelta);
mc.entityRenderer.disableLightmap(tickDelta);
+4
2023-12-24 21:49:28 -08:00
2024-10-31 21:36:24 +01:00
GLStateManager.defaultBlendFunc();
2024-10-29 00:20:00 +01:00
GL11.glDepthMask(false);
GL11.glPopMatrix();
+4
2023-12-24 21:49:28 -08:00
2024-10-29 00:20:00 +01:00
mc.mcProfiler.endSection();
+4
2023-12-24 21:49:28 -08:00
2024-10-29 00:20:00 +01:00
resetProjectionMatrix();
+4
2023-12-24 21:49:28 -08:00
2024-10-29 00:20:00 +01:00
renderingSolid = false;
+4
2023-12-24 21:49:28 -08:00
2024-10-29 00:20:00 +01:00
pipeline.setPhase(WorldRenderingPhase.NONE);
+4
2023-12-24 21:49:28 -08:00
2024-10-29 00:20:00 +01:00
ACTIVE = false;
}
+4
2023-12-24 21:49:28 -08:00
2024-10-29 00:20:00 +01:00
// TODO: RenderType
public void renderTranslucent(float tickDelta, Camera camera, RenderGlobal gameRenderer, WorldRenderingPipeline pipeline) {
if (!canRender(camera, gameRenderer) || !isAnyHandTranslucent() || !IrisApi.getInstance().isShaderPackInUse()) {
return;
}
Minecraft mc = Minecraft.getMinecraft();
+4
2023-12-24 21:49:28 -08:00
2024-10-29 00:20:00 +01:00
ACTIVE = true;
+4
2023-12-24 21:49:28 -08:00
2024-10-29 00:20:00 +01:00
pipeline.setPhase(WorldRenderingPhase.HAND_TRANSLUCENT);
+4
2023-12-24 21:49:28 -08:00
2024-10-29 00:20:00 +01:00
GL11.glPushMatrix();
+4
2023-12-24 21:49:28 -08:00
2024-10-29 00:20:00 +01:00
mc.mcProfiler.startSection("iris_hand_translucent");
+4
2023-12-24 21:49:28 -08:00
2024-10-29 00:20:00 +01:00
setupGlState(gameRenderer, camera, tickDelta);
+4
2023-12-24 21:49:28 -08:00
2024-10-29 00:20:00 +01:00
mc.entityRenderer.enableLightmap(tickDelta);
mc.entityRenderer.itemRenderer.renderItemInFirstPerson(tickDelta);
mc.entityRenderer.disableLightmap(tickDelta);
+4
2023-12-24 21:49:28 -08:00
2024-10-29 00:20:00 +01:00
GL11.glPopMatrix();
+4
2023-12-24 21:49:28 -08:00
2024-10-29 00:20:00 +01:00
resetProjectionMatrix();
+4
2023-12-24 21:49:28 -08:00
2024-10-29 00:20:00 +01:00
Minecraft.getMinecraft().mcProfiler.endSection();
+4
2023-12-24 21:49:28 -08:00
2024-10-29 00:20:00 +01:00
pipeline.setPhase(WorldRenderingPhase.NONE);
+4
2023-12-24 21:49:28 -08:00
2024-10-29 00:20:00 +01:00
ACTIVE = false;
}
+4
2023-12-24 21:49:28 -08:00
2024-10-29 00:20:00 +01:00
private void resetProjectionMatrix() {
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GL11.glMultMatrix(RenderingState.INSTANCE.getProjectionBuffer());
GL11.glMatrixMode(GL11.GL_MODELVIEW);
}
+4
2023-12-24 21:49:28 -08:00
2024-10-29 00:20:00 +01:00
public boolean isActive() {
return ACTIVE;
}
+4
2023-12-24 21:49:28 -08:00
2024-10-29 00:20:00 +01:00
public boolean isRenderingSolid() {
return renderingSolid;
}
+4
2023-12-24 21:49:28 -08:00
}