From 99e94f7c6ea4d64dcd5b09c1998b88f62a855403 Mon Sep 17 00:00:00 2001 From: PepperCode1 <44146161+PepperCode1@users.noreply.github.com> Date: Tue, 8 Feb 2022 20:58:13 -0800 Subject: [PATCH] Update Flywheel + diffuse fixes - Fix ponder diffuse when using shaders - Partially fix incorrect diffuse formula being used in the nether - Invalidate schematic renderers at the appropriate time --- gradle.properties | 2 +- .../com/simibubi/create/CreateClient.java | 1 + .../PortableStorageInterfaceRenderer.java | 3 +- .../deployer/DeployerActorInstance.java | 33 ++++++++++-------- .../components/deployer/DeployerRenderer.java | 4 +-- .../bell/CustomRotationParticle.java | 2 +- .../content/schematics/SchematicWorld.java | 8 ++++- .../schematics/client/SchematicHandler.java | 6 ++++ .../schematics/client/SchematicRenderer.java | 8 ++--- .../gui/element/GuiGameElement.java | 4 +-- .../create/foundation/ponder/PonderScene.java | 3 ++ .../ponder/element/WorldSectionElement.java | 34 ++++++++++--------- .../foundation/render/SuperByteBuffer.java | 26 ++++++++++---- 13 files changed, 84 insertions(+), 50 deletions(-) diff --git a/gradle.properties b/gradle.properties index 17d861a56..82620ed50 100644 --- a/gradle.properties +++ b/gradle.properties @@ -19,7 +19,7 @@ parchment_version = 2022.01.23 # dependency versions registrate_version = MC1.18-1.0.21 -flywheel_version = 1.18-0.6.1.56 +flywheel_version = 1.18-0.6.1.58 jei_minecraft_version = 1.18.1 jei_version = 9.2.1.69 diff --git a/src/main/java/com/simibubi/create/CreateClient.java b/src/main/java/com/simibubi/create/CreateClient.java index 235db054c..01be62a18 100644 --- a/src/main/java/com/simibubi/create/CreateClient.java +++ b/src/main/java/com/simibubi/create/CreateClient.java @@ -108,6 +108,7 @@ public class CreateClient { public static void invalidateRenderers() { BUFFER_CACHE.invalidate(); + SCHEMATIC_HANDLER.updateRenderers(); ContraptionRenderDispatcher.reset(); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceRenderer.java index 87bcb8836..f6e78d810 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceRenderer.java @@ -35,7 +35,8 @@ public class PortableStorageInterfaceRenderer extends SafeTileEntityRenderer float time = AnimationTickHolder.getRenderTime(context.world) / 20; float angle = (time * speed) % 360; - new MatrixTransformStack(m) + TransformStack.cast(m) .centre() .rotateY(axis == Axis.Z ? 90 : 0) .rotateZ(axis.isHorizontal() ? 90 : 0) diff --git a/src/main/java/com/simibubi/create/content/curiosities/bell/CustomRotationParticle.java b/src/main/java/com/simibubi/create/content/curiosities/bell/CustomRotationParticle.java index 3372bcbc7..c0066d094 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/bell/CustomRotationParticle.java +++ b/src/main/java/com/simibubi/create/content/curiosities/bell/CustomRotationParticle.java @@ -63,7 +63,7 @@ public class CustomRotationParticle extends SimpleAnimatedParticle { float maxU = mirror ? getU0() : getU1(); float minV = getV0(); float maxV = getV1(); - int brightness = OptifineHandler.usingShaders() ? LightTexture.pack(12, 15 ) : getLightColor(partialTicks); + int brightness = OptifineHandler.isUsingShaders() ? LightTexture.pack(12, 15) : getLightColor(partialTicks); builder.vertex(vertices[0].x(), vertices[0].y(), vertices[0].z()).uv(maxU, maxV).color(rCol, gCol, bCol, alpha).uv2(brightness).endVertex(); builder.vertex(vertices[1].x(), vertices[1].y(), vertices[1].z()).uv(maxU, minV).color(rCol, gCol, bCol, alpha).uv2(brightness).endVertex(); builder.vertex(vertices[2].x(), vertices[2].y(), vertices[2].z()).uv(minU, minV).color(rCol, gCol, bCol, alpha).uv2(brightness).endVertex(); diff --git a/src/main/java/com/simibubi/create/content/schematics/SchematicWorld.java b/src/main/java/com/simibubi/create/content/schematics/SchematicWorld.java index 8104244c3..2fa4526b9 100644 --- a/src/main/java/com/simibubi/create/content/schematics/SchematicWorld.java +++ b/src/main/java/com/simibubi/create/content/schematics/SchematicWorld.java @@ -13,6 +13,7 @@ import com.simibubi.create.Create; import com.simibubi.create.foundation.utility.worldWrappers.WrappedWorld; import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.decoration.ArmorStand; @@ -142,10 +143,15 @@ public class SchematicWorld extends WrappedWorld implements ServerLevelAccessor } @Override - public int getBrightness(LightLayer p_226658_1_, BlockPos p_226658_2_) { + public int getBrightness(LightLayer lightLayer, BlockPos pos) { return 15; } + @Override + public float getShade(Direction face, boolean hasShade) { + return 1f; + } + @Override public LevelTickAccess getBlockTicks() { return BlackholeTickAccess.emptyLevelList(); diff --git a/src/main/java/com/simibubi/create/content/schematics/client/SchematicHandler.java b/src/main/java/com/simibubi/create/content/schematics/client/SchematicHandler.java index fb4e2a8ab..090a1aaf7 100644 --- a/src/main/java/com/simibubi/create/content/schematics/client/SchematicHandler.java +++ b/src/main/java/com/simibubi/create/content/schematics/client/SchematicHandler.java @@ -196,6 +196,12 @@ public class SchematicHandler { } + public void updateRenderers() { + for (SchematicRenderer renderer : renderers) { + renderer.update(); + } + } + public IIngameOverlay getOverlayRenderer() { return overlayRenderer; } diff --git a/src/main/java/com/simibubi/create/content/schematics/client/SchematicRenderer.java b/src/main/java/com/simibubi/create/content/schematics/client/SchematicRenderer.java index a34729aad..57c47f85c 100644 --- a/src/main/java/com/simibubi/create/content/schematics/client/SchematicRenderer.java +++ b/src/main/java/com/simibubi/create/content/schematics/client/SchematicRenderer.java @@ -8,6 +8,7 @@ import java.util.Map; import java.util.Random; import java.util.Set; +import com.jozufozu.flywheel.core.model.ModelUtil; import com.jozufozu.flywheel.util.transform.TransformStack; import com.mojang.blaze3d.vertex.BufferBuilder; import com.mojang.blaze3d.vertex.DefaultVertexFormat; @@ -64,7 +65,7 @@ public class SchematicRenderer { if (mc.level == null || mc.player == null || !changed) return; - redraw(mc); + redraw(); changed = false; } @@ -76,18 +77,17 @@ public class SchematicRenderer { if (!usedBlockRenderLayers.contains(layer)) continue; SuperByteBuffer superByteBuffer = bufferCache.get(layer); - superByteBuffer.disableDiffuseMult(); superByteBuffer.renderInto(ms, buffer.getBuffer(layer)); } TileEntityRenderHelper.renderTileEntities(schematic, schematic.getRenderedTileEntities(), ms, buffer); } - protected void redraw(Minecraft minecraft) { + protected void redraw() { usedBlockRenderLayers.clear(); startedBufferBuilders.clear(); final SchematicWorld blockAccess = schematic; - final BlockRenderDispatcher blockRendererDispatcher = minecraft.getBlockRenderer(); + final BlockRenderDispatcher blockRendererDispatcher = ModelUtil.VANILLA_RENDERER; List blockstates = new LinkedList<>(); Map buffers = new HashMap<>(); diff --git a/src/main/java/com/simibubi/create/foundation/gui/element/GuiGameElement.java b/src/main/java/com/simibubi/create/foundation/gui/element/GuiGameElement.java index 51050fd69..0309b9532 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/element/GuiGameElement.java +++ b/src/main/java/com/simibubi/create/foundation/gui/element/GuiGameElement.java @@ -33,8 +33,8 @@ import net.minecraft.core.BlockPos; import net.minecraft.world.inventory.InventoryMenu; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.ItemLike; +import net.minecraft.world.level.block.BaseFireBlock; import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.FireBlock; import net.minecraft.world.level.block.LiquidBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.Fluid; @@ -208,7 +208,7 @@ public class GuiGameElement { @Override protected void renderModel(BlockRenderDispatcher blockRenderer, MultiBufferSource.BufferSource buffer, RenderType renderType, VertexConsumer vb, PoseStack ms) { - if (blockState.getBlock() instanceof FireBlock) { + if (blockState.getBlock() instanceof BaseFireBlock) { Lighting.setupForFlatItems(); blockRenderer.renderSingleBlock(blockState, ms, buffer, LightTexture.FULL_BRIGHT, OverlayTexture.NO_OVERLAY, VirtualEmptyModelData.INSTANCE); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/PonderScene.java b/src/main/java/com/simibubi/create/foundation/ponder/PonderScene.java index 9bf14f960..28590c3ad 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/PonderScene.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/PonderScene.java @@ -18,6 +18,7 @@ import javax.annotation.Nullable; import org.apache.commons.lang3.mutable.MutableDouble; import org.apache.commons.lang3.mutable.MutableObject; +import com.jozufozu.flywheel.backend.OptifineHandler; import com.jozufozu.flywheel.util.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Matrix4f; @@ -224,6 +225,7 @@ public class PonderScene { } public void renderScene(SuperRenderTypeBuffer buffer, PoseStack ms, float pt) { + OptifineHandler.pushForceDiffuse(); ms.pushPose(); Minecraft mc = Minecraft.getInstance(); Entity prevRVE = mc.cameraEntity; @@ -242,6 +244,7 @@ public class PonderScene { outliner.renderOutlines(ms, buffer, pt); ms.popPose(); + OptifineHandler.popForceDiffuse(); } public void renderOverlay(PonderUI screen, PoseStack ms, float partialTicks) { diff --git a/src/main/java/com/simibubi/create/foundation/ponder/element/WorldSectionElement.java b/src/main/java/com/simibubi/create/foundation/ponder/element/WorldSectionElement.java index 3b1cb3fc5..ebc587e32 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/element/WorldSectionElement.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/element/WorldSectionElement.java @@ -7,6 +7,7 @@ import java.util.Map.Entry; import java.util.Random; import java.util.function.Consumer; +import com.jozufozu.flywheel.core.model.ModelUtil; import com.jozufozu.flywheel.util.transform.TransformStack; import com.mojang.blaze3d.vertex.BufferBuilder; import com.mojang.blaze3d.vertex.DefaultVertexFormat; @@ -298,13 +299,6 @@ public class WorldSectionElement extends AnimatedSceneElement { tileEntity.getBlockPos(), tileEntity.getBlockState(), tileEntity))); } - @Override - protected void renderLayer(PonderWorld world, MultiBufferSource buffer, RenderType type, PoseStack ms, float fade, - float pt) { - transformMS(ms, pt); - renderStructure(world, ms, buffer, type, fade); - } - @Override public void renderFirst(PonderWorld world, MultiBufferSource buffer, PoseStack ms, float fade, float pt) { int light = -1; @@ -342,8 +336,7 @@ public class WorldSectionElement extends AnimatedSceneElement { .pose(), overlayMS.last() .normal()); - Minecraft.getInstance() - .getBlockRenderer() + ModelUtil.VANILLA_RENDERER .renderBatched(world.getBlockState(pos), pos, world, ms, builder, true, new Random(), EmptyModelData.INSTANCE); ms.popPose(); @@ -352,13 +345,21 @@ public class WorldSectionElement extends AnimatedSceneElement { ms.popPose(); } + @Override + protected void renderLayer(PonderWorld world, MultiBufferSource buffer, RenderType type, PoseStack ms, float fade, + float pt) { + transformMS(ms, pt); + renderStructure(world, ms, buffer, type, fade); + } + protected void renderStructure(PonderWorld world, PoseStack ms, MultiBufferSource buffer, RenderType type, float fade) { SuperByteBufferCache bufferCache = CreateClient.BUFFER_CACHE; - int code = hashCode() ^ world.hashCode(); + int code = hashCode() ^ world.hashCode(); Pair key = Pair.of(code, RenderType.chunkBufferLayers() .indexOf(type)); + if (redraw) bufferCache.invalidate(DOC_WORLD_SECTION, key); SuperByteBuffer contraptionBuffer = @@ -367,7 +368,9 @@ public class WorldSectionElement extends AnimatedSceneElement { return; int light = lightCoordsFromFade(fade); - contraptionBuffer.light(light) + contraptionBuffer + .fullNormalTransform() + .light(light) .renderInto(ms, buffer.getBuffer(type)); } @@ -405,8 +408,7 @@ public class WorldSectionElement extends AnimatedSceneElement { private SuperByteBuffer buildStructureBuffer(PonderWorld world, RenderType layer) { ForgeHooksClient.setRenderType(layer); - BlockRenderDispatcher dispatcher = Minecraft.getInstance() - .getBlockRenderer(); + BlockRenderDispatcher dispatcher = ModelUtil.VANILLA_RENDERER; PoseStack ms = new PoseStack(); Random random = new Random(); BufferBuilder builder = new BufferBuilder(512); @@ -415,7 +417,7 @@ public class WorldSectionElement extends AnimatedSceneElement { section.forEach(pos -> { BlockState state = world.getBlockState(pos); - FluidState ifluidstate = world.getFluidState(pos); + FluidState fluidState = world.getFluidState(pos); ms.pushPose(); ms.translate(pos.getX(), pos.getY(), pos.getZ()); @@ -426,8 +428,8 @@ public class WorldSectionElement extends AnimatedSceneElement { tileEntity != null ? tileEntity.getModelData() : EmptyModelData.INSTANCE); } - if (!ifluidstate.isEmpty() && ItemBlockRenderTypes.canRenderInLayer(ifluidstate, layer)) - dispatcher.renderLiquid(pos, world, builder, ifluidstate); + if (!fluidState.isEmpty() && ItemBlockRenderTypes.canRenderInLayer(fluidState, layer)) + dispatcher.renderLiquid(pos, world, builder, fluidState); ms.popPose(); }); diff --git a/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java b/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java index 6f47ade73..3ba745806 100644 --- a/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java +++ b/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java @@ -3,6 +3,7 @@ package com.simibubi.create.foundation.render; import com.jozufozu.flywheel.api.vertex.VertexList; import com.jozufozu.flywheel.backend.OptifineHandler; import com.jozufozu.flywheel.core.vertex.BlockVertexList; +import com.jozufozu.flywheel.util.DiffuseLightCalculator; import com.jozufozu.flywheel.util.transform.Rotate; import com.jozufozu.flywheel.util.transform.Scale; import com.jozufozu.flywheel.util.transform.TStack; @@ -29,7 +30,6 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.util.Mth; import net.minecraft.world.level.Level; -import net.minecraftforge.client.model.pipeline.LightUtil; public class SuperByteBuffer implements Scale, Translate, Rotate, TStack { @@ -42,13 +42,14 @@ public class SuperByteBuffer implements Scale, Translate, Translate, Translate, Translate, Translate, Translate { float targetU = entry.getTarget()