Skip to content

Commit

Permalink
Horrible code
Browse files Browse the repository at this point in the history
  • Loading branch information
IMS212 committed Jul 15, 2024
1 parent 3f50d7f commit 3a3ea20
Show file tree
Hide file tree
Showing 8 changed files with 61 additions and 14 deletions.
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ plugins {
}

val MINECRAFT_VERSION by extra { "1.21" }
val NEOFORGE_VERSION by extra { "21.0.57-beta" }
val NEOFORGE_VERSION by extra { "21.0.76-beta" }
val FABRIC_LOADER_VERSION by extra { "0.15.11" }
val FABRIC_API_VERSION by extra { "0.100.4+1.21" }

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@
*/
public class SodiumWorldRenderer {
private final Minecraft client;
private final LevelRendererExtension parent;

private ClientLevel level;
private int renderDistance;
Expand Down Expand Up @@ -89,7 +90,8 @@ public static SodiumWorldRenderer instanceNullable() {
return null;
}

public SodiumWorldRenderer(Minecraft client) {
public SodiumWorldRenderer(LevelRendererExtension parent, Minecraft client) {
this.parent = parent;
this.client = client;
}

Expand Down Expand Up @@ -118,6 +120,10 @@ private void loadLevel(ClientLevel level) {
}
}

public LevelRendererExtension getParent() {
return parent;
}

private void unloadLevel() {
if (this.renderSectionManager != null) {
this.renderSectionManager.destroy();
Expand Down Expand Up @@ -267,7 +273,7 @@ private void initRenderer(CommandList commandList) {

this.renderDistance = this.client.options.getEffectiveRenderDistance();

this.renderSectionManager = new RenderSectionManager(this.level, this.renderDistance, commandList);
this.renderSectionManager = new RenderSectionManager(this, this.level, this.renderDistance, commandList);

var tracker = ChunkTrackerHolder.get(this.level);
ChunkTracker.forEachChunk(tracker.getReadyChunks(), this.renderSectionManager::onChunkAdded);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,18 +24,26 @@
import net.caffeinemc.mods.sodium.client.render.chunk.vertex.format.ChunkMeshAttribute;
import net.caffeinemc.mods.sodium.client.render.chunk.vertex.format.ChunkVertexType;
import net.caffeinemc.mods.sodium.client.render.viewport.CameraTransform;
import net.caffeinemc.mods.sodium.client.services.PlatformLevelAccess;
import net.caffeinemc.mods.sodium.client.util.BitwiseMath;
import net.caffeinemc.mods.sodium.client.world.LevelRendererExtension;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.LevelRenderer;
import net.minecraft.client.renderer.RenderType;
import org.joml.Matrix4f;
import org.lwjgl.system.MemoryUtil;
import java.util.Iterator;

public class DefaultChunkRenderer extends ShaderChunkRenderer {
private final MultiDrawBatch batch;

private final RenderSectionManager manager;
private final SharedQuadIndexBuffer sharedIndexBuffer;

public DefaultChunkRenderer(RenderDevice device, ChunkVertexType vertexType) {
public DefaultChunkRenderer(RenderSectionManager manager, RenderDevice device, ChunkVertexType vertexType) {
super(device, vertexType);

this.manager = manager;
this.batch = new MultiDrawBatch((ModelQuadFacing.COUNT * RenderRegion.REGION_SIZE) + 1);
this.sharedIndexBuffer = new SharedQuadIndexBuffer(device.createCommandList(), SharedQuadIndexBuffer.IndexType.INTEGER);
}
Expand Down Expand Up @@ -96,6 +104,13 @@ public void render(ChunkRenderMatrices matrices,
executeDrawBatch(commandList, tessellation, this.batch);
}

RenderType[] renderTypes = renderPass.getVanillaLayers();
LevelRendererExtension levelRenderer = manager.getRenderer().getParent();

for (RenderType renderType : renderTypes) {
PlatformLevelAccess.getInstance().runChunkLayerEvents(renderType, ((LevelRenderer) levelRenderer), new Matrix4f(matrices.modelView()), new Matrix4f(matrices.projection()), levelRenderer.sodium$getTickCount(), Minecraft.getInstance().gameRenderer.getMainCamera(), levelRenderer.sodium$getFrustum());
}

super.end(renderPass);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import net.caffeinemc.mods.sodium.client.SodiumClientMod;
import net.caffeinemc.mods.sodium.client.gl.device.CommandList;
import net.caffeinemc.mods.sodium.client.gl.device.RenderDevice;
import net.caffeinemc.mods.sodium.client.render.SodiumWorldRenderer;
import net.caffeinemc.mods.sodium.client.render.chunk.compile.BuilderTaskOutput;
import net.caffeinemc.mods.sodium.client.render.chunk.compile.ChunkBuildOutput;
import net.caffeinemc.mods.sodium.client.render.chunk.compile.ChunkSortOutput;
Expand Down Expand Up @@ -68,6 +69,8 @@ public class RenderSectionManager {
private final RenderRegionManager regions;
private final ClonedChunkSectionCache sectionCache;

private final SodiumWorldRenderer renderer;

private final Long2ReferenceMap<RenderSection> sectionByPosition = new Long2ReferenceOpenHashMap<>();

private final ConcurrentLinkedDeque<ChunkJobResult<? extends BuilderTaskOutput>> buildResults = new ConcurrentLinkedDeque<>();
Expand Down Expand Up @@ -99,8 +102,9 @@ public class RenderSectionManager {
private @Nullable BlockPos cameraBlockPos;
private @Nullable Vector3dc cameraPosition;

public RenderSectionManager(ClientLevel level, int renderDistance, CommandList commandList) {
this.chunkRenderer = new DefaultChunkRenderer(RenderDevice.INSTANCE, ChunkMeshFormats.COMPACT);
public RenderSectionManager(SodiumWorldRenderer renderer, ClientLevel level, int renderDistance, CommandList commandList) {
this.renderer = renderer;
this.chunkRenderer = new DefaultChunkRenderer(this, RenderDevice.INSTANCE, ChunkMeshFormats.COMPACT);

this.level = level;
this.builder = new ChunkBuilder(level, ChunkMeshFormats.COMPACT);
Expand Down Expand Up @@ -736,4 +740,8 @@ public void onChunkRemoved(int x, int z) {
public Collection<RenderSection> getSectionsWithGlobalEntities() {
return ReferenceSets.unmodifiable(this.sectionsWithGlobalEntities);
}

public SodiumWorldRenderer getRenderer() {
return renderer;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
import net.minecraft.client.renderer.RenderType;

public class DefaultTerrainRenderPasses {
public static final TerrainRenderPass SOLID = new TerrainRenderPass(RenderType.solid(), false, false);
public static final TerrainRenderPass CUTOUT = new TerrainRenderPass(RenderType.cutoutMipped(), false, true);
public static final TerrainRenderPass TRANSLUCENT = new TerrainRenderPass(RenderType.translucent(), true, false);
public static final TerrainRenderPass SOLID = new TerrainRenderPass(RenderType.solid(), new RenderType[] {RenderType.solid()}, false, false);
public static final TerrainRenderPass CUTOUT = new TerrainRenderPass(RenderType.cutoutMipped(), new RenderType[] {RenderType.cutout(), RenderType.cutoutMipped()}, false, true);
public static final TerrainRenderPass TRANSLUCENT = new TerrainRenderPass(RenderType.translucent(), new RenderType[] {RenderType.translucent(), RenderType.tripwire()}, true, false);


public static final TerrainRenderPass[] ALL = new TerrainRenderPass[] { SOLID, CUTOUT, TRANSLUCENT };
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,15 @@ public class TerrainRenderPass {
@Deprecated(forRemoval = true)
private final RenderType renderType;

@Deprecated(forRemoval = true)
private final RenderType[] replacementTypes;

private final boolean isTranslucent;
private final boolean fragmentDiscard;

public TerrainRenderPass(RenderType renderType, boolean isTranslucent, boolean allowFragmentDiscard) {
public TerrainRenderPass(RenderType renderType, RenderType[] replacementTypes, boolean isTranslucent, boolean allowFragmentDiscard) {
this.renderType = renderType;
this.replacementTypes = replacementTypes;

this.isTranslucent = isTranslucent;
this.fragmentDiscard = allowFragmentDiscard;
Expand All @@ -33,4 +37,8 @@ public void endDrawing() {
public boolean supportsFragmentDiscard() {
return this.fragmentDiscard;
}

public RenderType[] getVanillaLayers() {
return replacementTypes;
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
package net.caffeinemc.mods.sodium.client.world;

import net.caffeinemc.mods.sodium.client.render.SodiumWorldRenderer;
import net.minecraft.client.renderer.culling.Frustum;

public interface LevelRendererExtension {
SodiumWorldRenderer sodium$getWorldRenderer();
Frustum sodium$getFrustum();
int sodium$getTickCount();
}
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,16 @@ public abstract class LevelRendererMixin implements LevelRendererExtension {
return this.renderer;
}

@Override
public Frustum sodium$getFrustum() {
return cullingFrustum;
}

@Override
public int sodium$getTickCount() {
return ticks;
}

@Redirect(method = "allChanged()V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Options;getEffectiveRenderDistance()I", ordinal = 1))
private int nullifyBuiltChunkStorage(Options options) {
// Do not allow any resources to be allocated
Expand All @@ -79,7 +89,7 @@ private int nullifyBuiltChunkStorage(Options options) {

@Inject(method = "<init>", at = @At("RETURN"))
private void init(Minecraft client, EntityRenderDispatcher entityRenderDispatcher, BlockEntityRenderDispatcher blockEntityRenderDispatcher, RenderBuffers bufferBuilderStorage, CallbackInfo ci) {
this.renderer = new SodiumWorldRenderer(client);
this.renderer = new SodiumWorldRenderer(this, client);
}

@Inject(method = "setLevel", at = @At("RETURN"))
Expand Down Expand Up @@ -129,8 +139,6 @@ private void renderSectionLayer(RenderType renderLayer, double x, double y, doub
} finally {
RenderDevice.exitManagedCode();
}

PlatformLevelAccess.getInstance().runChunkLayerEvents(renderLayer, ((LevelRenderer) (Object) this), modelMatrix, projectionMatrix, this.ticks, this.minecraft.gameRenderer.getMainCamera(), this.cullingFrustum);
}

/**
Expand All @@ -139,7 +147,6 @@ private void renderSectionLayer(RenderType renderLayer, double x, double y, doub
*/
@Overwrite
private void setupRender(Camera camera, Frustum frustum, boolean hasForcedFrustum, boolean spectator) {

var viewport = ((ViewportProvider) frustum).sodium$createViewport();
var updateChunksImmediately = PlatformInfoAccess.getInstance().isFlawlessFramesActive();

Expand Down

0 comments on commit 3a3ea20

Please sign in to comment.