Diffuse fixes II

- Add ForcedDiffuseState to push/pop forced diffuse calculators
- Transform the SBB instead of the global PoseStack when applying ponder
transforms
- Tweak used shaders in RenderTypes
- Rename LerpedFloat.Interpolater to Interpolator
- Update Flywheel
This commit is contained in:
PepperCode1 2022-02-12 21:15:41 -08:00
parent 22af1604b4
commit 3aa0644426
9 changed files with 60 additions and 29 deletions

View File

@ -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.58
flywheel_version = 1.18-0.6.1.60
jei_minecraft_version = 1.18.1
jei_version = 9.2.1.69

View File

@ -72,7 +72,6 @@ public class SchematicRenderer {
public void render(PoseStack ms, SuperRenderTypeBuffer buffer) {
if (!active)
return;
buffer.getBuffer(RenderType.solid());
for (RenderType layer : RenderType.chunkBufferLayers()) {
if (!usedBlockRenderLayers.contains(layer))
continue;

View File

@ -18,7 +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.DiffuseLightCalculator;
import com.jozufozu.flywheel.util.transform.TransformStack;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.math.Matrix4f;
@ -32,6 +32,7 @@ import com.simibubi.create.foundation.ponder.element.WorldSectionElement;
import com.simibubi.create.foundation.ponder.instruction.HideAllInstruction;
import com.simibubi.create.foundation.ponder.instruction.PonderInstruction;
import com.simibubi.create.foundation.ponder.ui.PonderUI;
import com.simibubi.create.foundation.render.ForcedDiffuseState;
import com.simibubi.create.foundation.render.SuperRenderTypeBuffer;
import com.simibubi.create.foundation.utility.AnimationTickHolder;
import com.simibubi.create.foundation.utility.Pair;
@ -225,7 +226,7 @@ public class PonderScene {
}
public void renderScene(SuperRenderTypeBuffer buffer, PoseStack ms, float pt) {
OptifineHandler.pushForceDiffuse();
ForcedDiffuseState.pushCalculator(DiffuseLightCalculator.DEFAULT);
ms.pushPose();
Minecraft mc = Minecraft.getInstance();
Entity prevRVE = mc.cameraEntity;
@ -244,7 +245,7 @@ public class PonderScene {
outliner.renderOutlines(ms, buffer, pt);
ms.popPose();
OptifineHandler.popForceDiffuse();
ForcedDiffuseState.popCalculator();
}
public void renderOverlay(PonderUI screen, PoseStack ms, float partialTicks) {

View File

@ -348,12 +348,6 @@ public class WorldSectionElement extends AnimatedSceneElement {
@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();
@ -367,9 +361,9 @@ public class WorldSectionElement extends AnimatedSceneElement {
if (contraptionBuffer.isEmpty())
return;
transformMS(contraptionBuffer.getTransforms(), pt);
int light = lightCoordsFromFade(fade);
contraptionBuffer
.fullNormalTransform()
.light(light)
.renderInto(ms, buffer.getBuffer(type));
}

View File

@ -0,0 +1,31 @@
package com.simibubi.create.foundation.render;
import javax.annotation.Nullable;
import com.jozufozu.flywheel.util.DiffuseLightCalculator;
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
public final class ForcedDiffuseState {
private static final ThreadLocal<ObjectArrayList<DiffuseLightCalculator>> FORCED_DIFFUSE = ThreadLocal.withInitial(ObjectArrayList::new);
private ForcedDiffuseState() {
}
public static void pushCalculator(DiffuseLightCalculator calculator) {
FORCED_DIFFUSE.get().push(calculator);
}
public static void popCalculator() {
FORCED_DIFFUSE.get().pop();
}
@Nullable
public static DiffuseLightCalculator getForcedCalculator() {
ObjectArrayList<DiffuseLightCalculator> stack = FORCED_DIFFUSE.get();
if (stack.isEmpty()) {
return null;
}
return stack.top();
}
}

View File

@ -29,7 +29,7 @@ public class RenderTypes extends RenderStateShard {
public static RenderType getOutlineTranslucent(ResourceLocation texture, boolean cull) {
return RenderType.create(createLayerName("outline_translucent" + (cull ? "_cull" : "")),
DefaultVertexFormat.NEW_ENTITY, VertexFormat.Mode.QUADS, 256, true, true, RenderType.CompositeState.builder()
.setShaderState(RENDERTYPE_ENTITY_TRANSLUCENT_SHADER)
.setShaderState(cull ? RENDERTYPE_ENTITY_TRANSLUCENT_CULL_SHADER : RENDERTYPE_ENTITY_TRANSLUCENT_SHADER)
.setTextureState(new RenderStateShard.TextureStateShard(texture, false, false))
.setTransparencyState(TRANSLUCENT_TRANSPARENCY)
.setCullState(cull ? CULL : NO_CULL)
@ -42,7 +42,7 @@ public class RenderTypes extends RenderStateShard {
public static RenderType getGlowingSolid(ResourceLocation texture) {
return RenderType.create(createLayerName("glowing_solid"), DefaultVertexFormat.NEW_ENTITY, VertexFormat.Mode.QUADS, 256,
true, false, RenderType.CompositeState.builder()
.setShaderState(NEW_ENTITY_SHADER)
.setShaderState(RENDERTYPE_BEACON_BEAM_SHADER)
.setTextureState(new RenderStateShard.TextureStateShard(texture, false, false))
.setLightmapState(LIGHTMAP)
.setOverlayState(OVERLAY)
@ -58,7 +58,7 @@ public class RenderTypes extends RenderStateShard {
public static RenderType getGlowingTranslucent(ResourceLocation texture) {
return RenderType.create(createLayerName("glowing_translucent"), DefaultVertexFormat.NEW_ENTITY, VertexFormat.Mode.QUADS,
256, true, true, RenderType.CompositeState.builder()
.setShaderState(NEW_ENTITY_SHADER)
.setShaderState(RENDERTYPE_BEACON_BEAM_SHADER)
.setTextureState(new RenderStateShard.TextureStateShard(texture, false, false))
.setTransparencyState(TRANSLUCENT_TRANSPARENCY)
.setCullState(NO_CULL)
@ -78,7 +78,6 @@ public class RenderTypes extends RenderStateShard {
false, RenderType.CompositeState.builder()
.setShaderState(RENDERTYPE_ENTITY_SOLID_SHADER)
.setTextureState(BLOCK_SHEET)
.setTransparencyState(NO_TRANSPARENCY)
.setLightmapState(LIGHTMAP)
.setOverlayState(OVERLAY)
.createCompositeState(true));
@ -89,7 +88,7 @@ public class RenderTypes extends RenderStateShard {
private static final RenderType ITEM_PARTIAL_TRANSLUCENT = RenderType.create(createLayerName("item_partial_translucent"),
DefaultVertexFormat.NEW_ENTITY, VertexFormat.Mode.QUADS, 256, true, true, RenderType.CompositeState.builder()
.setShaderState(RENDERTYPE_ENTITY_TRANSLUCENT_SHADER)
.setShaderState(RENDERTYPE_ENTITY_TRANSLUCENT_CULL_SHADER)
.setTextureState(BLOCK_SHEET)
.setTransparencyState(TRANSLUCENT_TRANSPARENCY)
.setLightmapState(LIGHTMAP)
@ -102,7 +101,7 @@ public class RenderTypes extends RenderStateShard {
private static final RenderType FLUID = RenderType.create(createLayerName("fluid"),
DefaultVertexFormat.NEW_ENTITY, VertexFormat.Mode.QUADS, 256, true, true, RenderType.CompositeState.builder()
.setShaderState(RENDERTYPE_ENTITY_TRANSLUCENT_SHADER)
.setShaderState(RENDERTYPE_ENTITY_TRANSLUCENT_CULL_SHADER)
.setTextureState(BLOCK_SHEET_MIPPED)
.setTransparencyState(TRANSLUCENT_TRANSPARENCY)
.setLightmapState(LIGHTMAP)

View File

@ -98,10 +98,13 @@ public class SuperByteBuffer implements Scale<SuperByteBuffer>, Translate<SuperB
final Vector3f normal = new Vector3f();
final Vector4f lightPos = new Vector4f();
final boolean disableDiffuseMult = this.disableDiffuseMult || !OptifineHandler.shouldApplyDiffuse();
DiffuseLightCalculator diffuseCalculator = this.diffuseCalculator;
DiffuseLightCalculator diffuseCalculator = ForcedDiffuseState.getForcedCalculator();
final boolean disableDiffuseMult = this.disableDiffuseMult || (OptifineHandler.isUsingShaders() && diffuseCalculator == null);
if (diffuseCalculator == null) {
diffuseCalculator = DiffuseLightCalculator.forCurrentLevel();
diffuseCalculator = this.diffuseCalculator;
if (diffuseCalculator == null) {
diffuseCalculator = DiffuseLightCalculator.forCurrentLevel();
}
}
final int vertexCount = template.getVertexCount();
@ -218,6 +221,10 @@ public class SuperByteBuffer implements Scale<SuperByteBuffer>, Translate<SuperB
return template.isEmpty();
}
public PoseStack getTransforms() {
return transforms;
}
@Override
public SuperByteBuffer translate(double x, double y, double z) {
transforms.translate(x, y, z);
@ -439,8 +446,8 @@ public class SuperByteBuffer implements Scale<SuperByteBuffer>, Translate<SuperB
}
@FunctionalInterface
public interface IVertexLighter {
public int getPackedLight(float x, float y, float z);
public interface VertexLighter {
int getPackedLight(float x, float y, float z);
}
}

View File

@ -77,9 +77,9 @@ public class TileEntityRenderHelper {
} catch (Exception e) {
iterator.remove();
String message = "TileEntity " + tileEntity.getType()
String message = "BlockEntity " + tileEntity.getType()
.getRegistryName()
.toString() + " didn't want to render while moved.\n";
.toString() + " could not be rendered virtually.";
if (AllConfigs.CLIENT.explainRenderErrors.get())
Create.LOGGER.error(message, e);
else

View File

@ -9,7 +9,7 @@ import net.minecraft.util.Mth;
// InterpolatedChasingValue, InterpolatedValue, InterpolatedChasingAngle, InterpolatedAngle
public class LerpedFloat {
protected Interpolater interpolater;
protected Interpolator interpolator;
protected float previousValue;
protected float value;
@ -19,8 +19,8 @@ public class LerpedFloat {
protected boolean forcedSync;
public LerpedFloat(Interpolater interpolater) {
this.interpolater = interpolater;
public LerpedFloat(Interpolator interpolator) {
this.interpolator = interpolator;
startWithValue(0);
forcedSync = true;
}
@ -117,7 +117,7 @@ public class LerpedFloat {
}
@FunctionalInterface
public interface Interpolater {
public interface Interpolator {
float interpolate(double progress, double current, double target);
}