Skip to content

Commit

Permalink
Fix shaders compatibility
Browse files Browse the repository at this point in the history
  • Loading branch information
sakura-ryoko committed Feb 9, 2025
1 parent 569db0b commit db27ebf
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 30 deletions.
24 changes: 9 additions & 15 deletions src/main/java/fi/dy/masa/litematica/render/LitematicaRenderer.java
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
package fi.dy.masa.litematica.render;

import javax.annotation.Nullable;

import fi.dy.masa.litematica.compat.iris.IrisCompat;
import net.minecraft.client.render.GameRenderer;
import org.joml.Matrix4f;

import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gl.Framebuffer;
import net.minecraft.client.gl.ShaderProgram;
import net.minecraft.client.gl.ShaderProgramKeys;
import net.minecraft.client.render.Camera;
import net.minecraft.client.render.Frustum;
Expand Down Expand Up @@ -305,9 +303,8 @@ public void piecewiseRenderSolid(Matrix4f viewMatrix, Matrix4f posMatrix, Profil
RenderSystem.polygonOffset(-0.3f, -0.6f);
}

//RenderSystem.setShader(GameRenderer::getRenderTypeSolidProgram);
RenderSystem.setShader(ShaderProgramKeys.RENDERTYPE_SOLID);
this.getWorldRenderer().renderBlockLayer(RenderLayer.getSolid(), viewMatrix, this.getCamera(), posMatrix, profiler);
ShaderProgram shader = RenderSystem.setShader(ShaderProgramKeys.RENDERTYPE_SOLID);
this.getWorldRenderer().renderBlockLayer(RenderLayer.getSolid(), viewMatrix, this.getCamera(), posMatrix, profiler, shader);

if (this.renderCollidingSchematicBlocks)
{
Expand All @@ -331,9 +328,8 @@ public void piecewiseRenderCutoutMipped(Matrix4f viewMatrix, Matrix4f posMatrix,
RenderSystem.polygonOffset(-0.3f, -0.6f);
}

//RenderSystem.setShader(GameRenderer::getRenderTypeCutoutMippedProgram);
RenderSystem.setShader(ShaderProgramKeys.RENDERTYPE_CUTOUT_MIPPED);
this.getWorldRenderer().renderBlockLayer(RenderLayer.getCutoutMipped(), viewMatrix, this.getCamera(), posMatrix, profiler);
ShaderProgram shader = RenderSystem.setShader(ShaderProgramKeys.RENDERTYPE_CUTOUT_MIPPED);
this.getWorldRenderer().renderBlockLayer(RenderLayer.getCutoutMipped(), viewMatrix, this.getCamera(), posMatrix, profiler, shader);

if (this.renderCollidingSchematicBlocks)
{
Expand All @@ -357,9 +353,8 @@ public void piecewiseRenderCutout(Matrix4f viewMatrix, Matrix4f posMatrix, Profi
RenderSystem.polygonOffset(-0.3f, -0.6f);
}

//RenderSystem.setShader(GameRenderer::getRenderTypeCutoutProgram);
RenderSystem.setShader(ShaderProgramKeys.RENDERTYPE_CUTOUT);
this.getWorldRenderer().renderBlockLayer(RenderLayer.getCutout(), viewMatrix, this.getCamera(), posMatrix, profiler);
ShaderProgram shader = RenderSystem.setShader(ShaderProgramKeys.RENDERTYPE_CUTOUT);
this.getWorldRenderer().renderBlockLayer(RenderLayer.getCutout(), viewMatrix, this.getCamera(), posMatrix, profiler, shader);

if (this.renderCollidingSchematicBlocks)
{
Expand All @@ -383,9 +378,8 @@ public void piecewiseRenderTranslucent(Matrix4f viewMatrix, Matrix4f posMatrix,
RenderSystem.polygonOffset(-0.3f, -0.6f);
}

//RenderSystem.setShader(GameRenderer::getRenderTypeTranslucentProgram);
RenderSystem.setShader(ShaderProgramKeys.RENDERTYPE_TRANSLUCENT);
this.getWorldRenderer().renderBlockLayer(RenderLayer.getTranslucent(), viewMatrix, this.getCamera(), posMatrix, profiler);
ShaderProgram shader = RenderSystem.setShader(ShaderProgramKeys.RENDERTYPE_TRANSLUCENT);
this.getWorldRenderer().renderBlockLayer(RenderLayer.getTranslucent(), viewMatrix, this.getCamera(), posMatrix, profiler, shader);

if (this.renderCollidingSchematicBlocks)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,6 @@

import java.util.*;
import javax.annotation.Nullable;

import net.minecraft.client.render.block.BlockModelRenderer;
import net.minecraft.client.render.model.BakedModelManager;
import net.minecraft.util.math.random.Random;
import net.minecraft.util.profiler.Profilers;
import org.joml.Matrix4f;
import org.joml.Matrix4fStack;

Expand All @@ -15,7 +10,6 @@
import net.minecraft.block.BlockState;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gl.GlUniform;
import net.minecraft.client.gl.ShaderProgram;
import net.minecraft.client.gl.ShaderProgramKeys;
import net.minecraft.client.gl.VertexBuffer;
Expand All @@ -34,6 +28,7 @@
import net.minecraft.util.math.ChunkPos;
import net.minecraft.util.math.Vec3d;
import net.minecraft.util.profiler.Profiler;
import net.minecraft.util.profiler.Profilers;
import net.minecraft.world.BlockRenderView;

import fi.dy.masa.malilib.util.EntityUtils;
Expand Down Expand Up @@ -414,7 +409,7 @@ public void updateChunks(long finishTimeNano, Profiler profiler)
profiler.pop();
}

public int renderBlockLayer(RenderLayer renderLayer, Matrix4f matrices, Camera camera, Matrix4f projMatrix, Profiler profiler)
public int renderBlockLayer(RenderLayer renderLayer, Matrix4f matrices, Camera camera, Matrix4f projMatrix, Profiler profiler, ShaderProgram shader)
{
RenderSystem.assertOnRenderThread();
profiler.push("render_block_layer_" + renderLayer.toString());
Expand Down Expand Up @@ -469,7 +464,9 @@ public int renderBlockLayer(RenderLayer renderLayer, Matrix4f matrices, Camera c
int increment = reverse ? -1 : 1;
int count = 0;

ShaderProgram shader = RenderSystem.getShader();
Matrix4fStack matrix4fStack = RenderSystem.getModelViewStack();
Fog orgFog = RenderSystem.getShaderFog();
//ShaderProgram shader = RenderSystem.getShader();
BufferRenderer.reset();

boolean renderAsTranslucent = Configs.Visuals.RENDER_BLOCKS_AS_TRANSLUCENT.getBooleanValue();
Expand All @@ -485,9 +482,10 @@ public int renderBlockLayer(RenderLayer renderLayer, Matrix4f matrices, Camera c
//shader.initializeUniforms(VertexFormat.DrawMode.QUADS, matrices, projMatrix, MinecraftClient.getInstance().getWindow());
shader.initializeUniforms(renderLayer.getDrawMode(), matrices, projMatrix, MinecraftClient.getInstance().getWindow());
RenderSystem.setupShaderLights(shader);
RenderSystem.setShaderFog(Fog.DUMMY);
shader.bind();

GlUniform chunkOffsetUniform = shader.modelOffset;
//GlUniform chunkOffsetUniform = shader.modelOffset;
boolean startedDrawing = false;

for (int i = startIndex; i != stopIndex; i += increment)
Expand All @@ -509,15 +507,21 @@ public int renderBlockLayer(RenderLayer renderLayer, Matrix4f matrices, Camera c
continue;
}

/*
if (chunkOffsetUniform != null)
{
chunkOffsetUniform.set((float)(chunkOrigin.getX() - x), (float)(chunkOrigin.getY() - y), (float)(chunkOrigin.getZ() - z));
chunkOffsetUniform.upload();
}
*/

matrix4fStack.pushMatrix();
matrix4fStack.translate((float) (chunkOrigin.getX() - x), (float) (chunkOrigin.getY() - y), (float) (chunkOrigin.getZ() - z));
buffer.bind();
buffer.draw();
//buffer.draw(RenderSystem.getModelViewMatrix(), RenderSystem.getProjectionMatrix(), shader);
buffer.draw(matrix4fStack, RenderSystem.getProjectionMatrix(), shader);
VertexBuffer.unbind();
matrix4fStack.popMatrix();
startedDrawing = true;
++count;
}
Expand All @@ -528,10 +532,12 @@ public int renderBlockLayer(RenderLayer renderLayer, Matrix4f matrices, Camera c
RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, 1.0f);
}

/*
if (chunkOffsetUniform != null)
{
chunkOffsetUniform.set(0.0F, 0.0F, 0.0F);
}
*/

shader.unbind();

Expand All @@ -542,6 +548,7 @@ public int renderBlockLayer(RenderLayer renderLayer, Matrix4f matrices, Camera c

VertexBuffer.unbind();
renderLayer.endDrawing();
RenderSystem.setShaderFog(orgFog);

profiler.pop();
profiler.pop();
Expand Down Expand Up @@ -607,10 +614,8 @@ protected void renderBlockOverlay(OverlayRenderType type, Matrix4f viewMatrix, C
}

ShaderProgram originalShader = RenderSystem.getShader();
RenderSystem.setShader(ShaderProgramKeys.POSITION_COLOR);
//RenderSystem.setShader(GameRenderer::getPositionColorProgram);
ShaderProgram shader = RenderSystem.setShader(ShaderProgramKeys.POSITION_COLOR);

ShaderProgram shader = RenderSystem.getShader();
BufferRenderer.reset();
Matrix4fStack matrix4fStack = RenderSystem.getModelViewStack();

Expand All @@ -635,7 +640,7 @@ protected void renderBlockOverlay(OverlayRenderType type, Matrix4f viewMatrix, C
matrix4fStack.pushMatrix();
matrix4fStack.translate((float) (chunkOrigin.getX() - x), (float) (chunkOrigin.getY() - y), (float) (chunkOrigin.getZ() - z));
buffer.bind();
buffer.draw(matrix4fStack, projMatrix, shader);
buffer.draw(matrix4fStack, RenderSystem.getProjectionMatrix(), shader);

VertexBuffer.unbind();
matrix4fStack.popMatrix();
Expand All @@ -646,7 +651,6 @@ protected void renderBlockOverlay(OverlayRenderType type, Matrix4f viewMatrix, C
renderLayer.endDrawing();

RenderSystem.setShader(originalShader);
//RenderSystem.setShader(() -> originalShader);
RenderSystem.disableBlend();

profiler.pop();
Expand Down

0 comments on commit db27ebf

Please sign in to comment.