Fixed shield rendering weirdly with fabulous graphics

This commit is contained in:
Sollace 2021-01-21 11:22:09 +02:00
parent afe820b704
commit e9e57cb949
2 changed files with 66 additions and 10 deletions

View file

@ -120,6 +120,7 @@ public class SphereParticle extends Particle implements Attachment {
} }
MatrixStack matrices = new MatrixStack(); MatrixStack matrices = new MatrixStack();
VertexConsumerProvider.Immediate immediate = MinecraftClient.getInstance().getBufferBuilders().getEntityVertexConsumers(); VertexConsumerProvider.Immediate immediate = MinecraftClient.getInstance().getBufferBuilders().getEntityVertexConsumers();
model.setPosition( model.setPosition(
MathHelper.lerp(tickDelta, prevPosX, x) - camera.getPos().x, MathHelper.lerp(tickDelta, prevPosX, x) - camera.getPos().x,
@ -130,8 +131,10 @@ public class SphereParticle extends Particle implements Attachment {
float lerpedRad = MathHelper.lerp(tickDelta, prevRadius, radius); float lerpedRad = MathHelper.lerp(tickDelta, prevRadius, radius);
VertexConsumer buffer = immediate.getBuffer(RenderLayers.magic()); VertexConsumer buffer;
buffer = immediate.getBuffer(RenderLayers.getTintedTexturedLayer(red, green, blue, alpha));
model.render(matrices, lerpedRad + 0.1F, buffer, 1, 1, red, green, blue, alpha); model.render(matrices, lerpedRad + 0.1F, buffer, 1, 1, red, green, blue, alpha);
buffer = immediate.getBuffer(RenderLayers.getTintedTexturedLayer(red * 0.9F, green * 0.9F, blue * 0.9F, Math.min(1, alpha + 0.2F)));
model.render(matrices, lerpedRad - 0.1F, buffer, 1, 1, red * 0.9F, green * 0.9F, blue * 0.9F, Math.min(1, alpha + 0.2F)); model.render(matrices, lerpedRad - 0.1F, buffer, 1, 1, red * 0.9F, green * 0.9F, blue * 0.9F, Math.min(1, alpha + 0.2F));
immediate.draw(); immediate.draw();

View file

@ -1,6 +1,11 @@
package com.minelittlepony.unicopia.client.render; package com.minelittlepony.unicopia.client.render;
import com.mojang.blaze3d.platform.GlStateManager.DstFactor;
import com.mojang.blaze3d.platform.GlStateManager.SrcFactor;
import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.RenderLayer;
import net.minecraft.client.render.RenderPhase;
import net.minecraft.client.render.VertexFormat; import net.minecraft.client.render.VertexFormat;
import net.minecraft.client.render.VertexFormats; import net.minecraft.client.render.VertexFormats;
@ -11,15 +16,63 @@ public final class RenderLayers extends RenderLayer {
super(name, vertexFormat, drawMode, expectedBufferSize, hasCrumbling, translucent, startAction, endAction); super(name, vertexFormat, drawMode, expectedBufferSize, hasCrumbling, translucent, startAction, endAction);
} }
private static final RenderLayer MAGIC = of("mlp_magic_glow", VertexFormats.POSITION_COLOR_TEXTURE_LIGHT_NORMAL, 7, 256, RenderLayer.MultiPhaseParameters.builder() protected static final RenderPhase.Transparency GLOWING_TRANSPARENCY = new RenderPhase.Transparency("glowing_transparency", () -> {
.texture(NO_TEXTURE) RenderSystem.enableBlend();
.writeMaskState(COLOR_MASK) RenderSystem.blendFuncSeparate(
.transparency(LIGHTNING_TRANSPARENCY) SrcFactor.CONSTANT_COLOR, DstFactor.ONE,
.lightmap(DISABLE_LIGHTMAP) SrcFactor.ONE, DstFactor.ZERO);
.cull(DISABLE_CULLING) }, () -> {
.build(false)); RenderSystem.disableBlend();
RenderSystem.defaultBlendFunc();
});
public static RenderLayer magic() { public static RenderLayer getTintedTexturedLayer(float red, float green, float blue, float alpha) {
return MAGIC; return RenderLayer.of("mlp_tint_layer", VertexFormats.POSITION_COLOR_TEXTURE_OVERLAY_LIGHT_NORMAL, 7, 256, true, true, RenderLayer.MultiPhaseParameters.builder()
.texture(new Color(red, green, blue, alpha))
.writeMaskState(COLOR_MASK)
.alpha(ONE_TENTH_ALPHA)
.transparency(GLOWING_TRANSPARENCY)
.shadeModel(SMOOTH_SHADE_MODEL)
.lightmap(DISABLE_LIGHTMAP)
.overlay(DISABLE_OVERLAY_COLOR)
.cull(DISABLE_CULLING)
.build(true));
}
private static class Color extends Texture {
private final float red;
private final float green;
private final float blue;
private final float alpha;
public Color(float red, float green, float blue, float alpha) {
super();
this.red = red;
this.green = green;
this.blue = blue;
this.alpha = alpha;
}
@Override
public void startDrawing() {
RenderSystem.blendColor(red, green, blue, alpha);
super.startDrawing();
}
@Override
public void endDrawing() {
super.endDrawing();
RenderSystem.blendColor(1, 1, 1, 1);
}
@Override
public boolean equals(Object other) {
return super.equals(other)
&& ((Color)other).red == red
&& ((Color)other).green == green
&& ((Color)other).blue == blue
&& ((Color)other).alpha == alpha;
}
} }
} }