From 76ffe51bebb73fced21b732689f7973673985695 Mon Sep 17 00:00:00 2001 From: tsuyumori Date: Tue, 13 May 2025 09:32:19 +0100 Subject: [PATCH] Fix #24 and #31 Signed-off-by: tsuyumori --- .../client/render/world/AstraSkyRenderer.java | 47 ++++++------------- .../render/world/AstraWorldVFXBuilder.java | 5 +- 2 files changed, 16 insertions(+), 36 deletions(-) diff --git a/src/main/java/doctor4t/astronomical/client/render/world/AstraSkyRenderer.java b/src/main/java/doctor4t/astronomical/client/render/world/AstraSkyRenderer.java index 636604f..a3d83cd 100644 --- a/src/main/java/doctor4t/astronomical/client/render/world/AstraSkyRenderer.java +++ b/src/main/java/doctor4t/astronomical/client/render/world/AstraSkyRenderer.java @@ -12,7 +12,7 @@ import doctor4t.astronomical.common.structure.Star; import doctor4t.astronomical.common.structure.Starfall; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.render.VertexConsumerProvider; +import net.minecraft.client.render.*; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.world.ClientWorld; import net.minecraft.util.Identifier; @@ -28,12 +28,15 @@ import org.lwjgl.opengl.GL11; import team.lodestar.lodestone.handlers.RenderHandler; import team.lodestar.lodestone.handlers.ScreenshakeHandler; +import team.lodestar.lodestone.handlers.screenparticle.ScreenParticleHandler; import team.lodestar.lodestone.helpers.RenderHelper; import team.lodestar.lodestone.setup.LodestoneParticles; import team.lodestar.lodestone.setup.LodestoneRenderLayers; +import team.lodestar.lodestone.setup.LodestoneScreenParticles; import team.lodestar.lodestone.setup.LodestoneShaders; import team.lodestar.lodestone.systems.rendering.VFXBuilders; import team.lodestar.lodestone.systems.rendering.particle.Easing; +import team.lodestar.lodestone.systems.rendering.particle.ScreenParticleBuilder; import team.lodestar.lodestone.systems.rendering.particle.WorldParticleBuilder; import team.lodestar.lodestone.systems.rendering.particle.data.ColorParticleData; import team.lodestar.lodestone.systems.rendering.particle.data.GenericParticleData; @@ -80,7 +83,7 @@ public static void renderSky(MatrixStack matrices, VertexConsumerProvider provid // interactable stars bufferBuilder.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR_TEXTURE_LIGHT); - RenderSystem.setShader(LodestoneShaders.LODESTONE_TEXTURE.getInstance()); + RenderSystem.setShader(GameRenderer::getPositionColorTexLightmapShader); RenderSystem.setShaderTexture(0, InteractableStar.INTERACTABLE_TEX); float scale = .2f; AstraSkyComponent com = world.getComponent(AstraCardinalComponents.SKY); @@ -104,7 +107,7 @@ public static void renderSky(MatrixStack matrices, VertexConsumerProvider provid VertexData p4 = createVertexData(vector, UP, (scale + 0.4f * ((1 + MathHelper.sin(rot4)) / 2f)) * .5f * c.getSize(), 95, rot4, Color.WHITE); apply((v, col, u) -> bufferBuilder.vertex(matrix4f, v.x(), v.y(), v.z()).color(col.getRed(), col.getGreen(), col.getBlue(), alpha).uv(u.x, u.y).light(RenderHelper.FULL_BRIGHT).next(), p4); } - drawWithShader(bufferBuilder.end()); + BufferRenderer.drawWithShader(bufferBuilder.end()); // supernovae explosions bufferBuilder.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR_TEXTURE_LIGHT); @@ -125,7 +128,7 @@ public static void renderSky(MatrixStack matrices, VertexConsumerProvider provid yuh += c.getRandomOffset() / 10f; } } - drawWithShader(bufferBuilder.end()); + BufferRenderer.drawWithShader(bufferBuilder.end()); // supernovae explosions dust bufferBuilder.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR_TEXTURE_LIGHT); @@ -144,7 +147,7 @@ public static void renderSky(MatrixStack matrices, VertexConsumerProvider provid yuh += c.getRandomOffset(); } } - drawWithShader(bufferBuilder.end()); + BufferRenderer.drawWithShader(bufferBuilder.end()); RenderSystem.disableBlend(); RenderSystem.setShaderColor(1, 1, 1, 1); @@ -153,31 +156,6 @@ public static void renderSky(MatrixStack matrices, VertexConsumerProvider provid RenderSystem.defaultBlendFunc(); } - private static VertexBuffer upload(BufferBuilder.RenderedBuffer renderedBuffer) { - RenderSystem.assertOnRenderThread(); - if (renderedBuffer.isEmpty()) { - renderedBuffer.release(); - return null; - } else { - VertexBuffer vertexBuffer = getAndBindBuffer(renderedBuffer.getParameters().getVertexFormat()); - vertexBuffer.upload(renderedBuffer); - return vertexBuffer; - } - } - - private static VertexBuffer getAndBindBuffer(VertexFormat format) { - VertexBuffer vertexBuffer = format.getBuffer(); - vertexBuffer.bind(); - return vertexBuffer; - } - - private static void drawWithShader(BufferBuilder.RenderedBuffer renderedBuffer) { - VertexBuffer vertexBuffer = upload(renderedBuffer); - if (vertexBuffer != null) { - vertexBuffer.draw(RenderSystem.getModelViewMatrix(), RenderSystem.getProjectionMatrix(), LodestoneShaders.LODESTONE_TEXTURE.instance); - } - } - public static void redrawStars() { shouldTankPerformanceForAFewFrames = true; } @@ -226,9 +204,12 @@ public static void renderStarfalls(MatrixStack matrices, float tickDelta, Client h /= 300; h *= (MinecraftClient.getInstance().cameraEntity.getRotationVecClient().dotProduct(new Vec3d(one.getX(), one.getY(), one.getZ()).subtract(MinecraftClient.getInstance().player.getPos()).normalize()) + 1) / 2; - // todo lmao -// ScreenParticleBuilder b2 = ScreenParticleBuilder.create(LodestoneScreenParticles.SPARKLE).setAlpha((float) h, 0f).setScale(100000f).setColor(color, color).setLifetime(10).overrideRenderOrder(ScreenParticle.RenderOrder.AFTER_EVERYTHING); -// b2.repeat(0, 0, 1); + ScreenParticleBuilder.create(LodestoneScreenParticles.SPARKLE, ScreenParticleHandler.LATE_PARTICLES) + .setColorData(ColorParticleData.create(color, color).build()) + .setTransparencyData(GenericParticleData.create((float)h, 0f).build()) + .setScaleData(GenericParticleData.create(100000f).build()) + .setLifetime(10) + .spawn(0, 0); ScreenshakeHandler.addScreenshake(new ScreenshakeInstance((int) (50 * h)).setIntensity(0f, 1f, 0f).setEasing(Easing.EXPO_OUT, Easing.SINE_OUT)); } diff --git a/src/main/java/doctor4t/astronomical/client/render/world/AstraWorldVFXBuilder.java b/src/main/java/doctor4t/astronomical/client/render/world/AstraWorldVFXBuilder.java index f192ca7..9b7abad 100644 --- a/src/main/java/doctor4t/astronomical/client/render/world/AstraWorldVFXBuilder.java +++ b/src/main/java/doctor4t/astronomical/client/render/world/AstraWorldVFXBuilder.java @@ -14,7 +14,6 @@ import org.joml.Vector3f; import team.lodestar.lodestone.helpers.RenderHelper; import team.lodestar.lodestone.setup.LodestoneRenderLayers; -import team.lodestar.lodestone.setup.LodestoneShaders; import team.lodestar.lodestone.systems.rendering.Phases; import team.lodestar.lodestone.systems.rendering.VFXBuilders; @@ -22,8 +21,8 @@ public class AstraWorldVFXBuilder extends VFXBuilders.WorldVFXBuilder { public static final LodestoneRenderLayers.RenderLayerProvider TEXTURE_ACTUAL_TRIANGLE = new LodestoneRenderLayers.RenderLayerProvider((texture) -> LodestoneRenderLayers.createGenericRenderLayer(texture.getNamespace(), "texture_actual_triangle", VertexFormats.POSITION_COLOR_TEXTURE, VertexFormat.DrawMode.TRIANGLES, RenderPhase.POSITION_COLOR_TEXTURE_LIGHTMAP_SHADER, Phases.NO_TRANSPARENCY, texture)); - public static final LodestoneRenderLayers.RenderLayerProvider TEXTURE_ACTUAL_TRIANGLE_TRANSPARENT = new LodestoneRenderLayers.RenderLayerProvider((texture) -> LodestoneRenderLayers.createGenericRenderLayer(texture.getNamespace(), "texture_actual_triangle_transparent", VertexFormats.POSITION_COLOR_TEXTURE_LIGHT, VertexFormat.DrawMode.TRIANGLES, LodestoneShaders.LODESTONE_TEXTURE.phase, Phases.NORMAL_TRANSPARENCY, texture)); - public static final LodestoneRenderLayers.RenderLayerProvider TEXTURE_ACTUAL_TRIANGLE_ADDITIVE = new LodestoneRenderLayers.RenderLayerProvider((texture) -> LodestoneRenderLayers.createGenericRenderLayer(texture.getNamespace(), "texture_actual_triangle_additive", VertexFormats.POSITION_COLOR_TEXTURE_LIGHT, VertexFormat.DrawMode.TRIANGLES, LodestoneShaders.LODESTONE_TEXTURE.phase, Phases.ADDITIVE_TRANSPARENCY, texture)); + public static final LodestoneRenderLayers.RenderLayerProvider TEXTURE_ACTUAL_TRIANGLE_TRANSPARENT = new LodestoneRenderLayers.RenderLayerProvider((texture) -> LodestoneRenderLayers.createGenericRenderLayer(texture.getNamespace(), "texture_actual_triangle_transparent", VertexFormats.POSITION_COLOR_TEXTURE_LIGHT, VertexFormat.DrawMode.TRIANGLES, Phases.POSITION_COLOR_TEXTURE_LIGHTMAP_SHADER, Phases.NORMAL_TRANSPARENCY, texture)); + public static final LodestoneRenderLayers.RenderLayerProvider TEXTURE_ACTUAL_TRIANGLE_ADDITIVE = new LodestoneRenderLayers.RenderLayerProvider((texture) -> LodestoneRenderLayers.createGenericRenderLayer(texture.getNamespace(), "texture_actual_triangle_additive", VertexFormats.POSITION_COLOR_TEXTURE_LIGHT, VertexFormat.DrawMode.TRIANGLES, Phases.POSITION_COLOR_TEXTURE_LIGHTMAP_SHADER, Phases.ADDITIVE_TRANSPARENCY, texture)); public AstraWorldVFXBuilder() {