Fixed Sky rendering errors
This commit is contained in:
parent
c66a1a1824
commit
adfe267cd3
1 changed files with 33 additions and 57 deletions
|
@ -1,5 +1,6 @@
|
||||||
package ru.betterend.client.render;
|
package ru.betterend.client.render;
|
||||||
|
|
||||||
|
import com.mojang.blaze3d.platform.GlDebug;
|
||||||
import com.mojang.blaze3d.platform.GlStateManager;
|
import com.mojang.blaze3d.platform.GlStateManager;
|
||||||
import com.mojang.blaze3d.systems.RenderSystem;
|
import com.mojang.blaze3d.systems.RenderSystem;
|
||||||
import com.mojang.blaze3d.vertex.BufferBuilder;
|
import com.mojang.blaze3d.vertex.BufferBuilder;
|
||||||
|
@ -16,6 +17,8 @@ import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext;
|
||||||
import net.minecraft.client.renderer.FogRenderer;
|
import net.minecraft.client.renderer.FogRenderer;
|
||||||
import net.minecraft.client.renderer.GameRenderer;
|
import net.minecraft.client.renderer.GameRenderer;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
|
||||||
|
import org.lwjgl.opengl.GLDebugMessageAMDCallback;
|
||||||
import ru.bclib.util.BackgroundInfo;
|
import ru.bclib.util.BackgroundInfo;
|
||||||
import ru.bclib.util.MHelper;
|
import ru.bclib.util.MHelper;
|
||||||
import ru.betterend.BetterEnd;
|
import ru.betterend.BetterEnd;
|
||||||
|
@ -25,6 +28,10 @@ import net.minecraft.util.RandomSource;
|
||||||
import net.minecraft.world.level.levelgen.LegacyRandomSource;
|
import net.minecraft.world.level.levelgen.LegacyRandomSource;
|
||||||
|
|
||||||
public class BetterEndSkyRenderer implements DimensionRenderingRegistry.SkyRenderer {
|
public class BetterEndSkyRenderer implements DimensionRenderingRegistry.SkyRenderer {
|
||||||
|
@FunctionalInterface
|
||||||
|
static interface BufferFunction {
|
||||||
|
void make(BufferBuilder bufferBuilder, double minSize, double maxSize, int count, long seed);
|
||||||
|
}
|
||||||
private static final ResourceLocation NEBULA_1 = BetterEnd.makeID("textures/sky/nebula_2.png");
|
private static final ResourceLocation NEBULA_1 = BetterEnd.makeID("textures/sky/nebula_2.png");
|
||||||
private static final ResourceLocation NEBULA_2 = BetterEnd.makeID("textures/sky/nebula_3.png");
|
private static final ResourceLocation NEBULA_2 = BetterEnd.makeID("textures/sky/nebula_3.png");
|
||||||
private static final ResourceLocation HORIZON = BetterEnd.makeID("textures/sky/nebula_1.png");
|
private static final ResourceLocation HORIZON = BetterEnd.makeID("textures/sky/nebula_1.png");
|
||||||
|
@ -157,93 +164,59 @@ public class BetterEndSkyRenderer implements DimensionRenderingRegistry.SkyRende
|
||||||
|
|
||||||
private void renderBuffer(PoseStack matrices, Matrix4f matrix4f, VertexBuffer buffer, VertexFormat format, float r, float g, float b, float a) {
|
private void renderBuffer(PoseStack matrices, Matrix4f matrix4f, VertexBuffer buffer, VertexFormat format, float r, float g, float b, float a) {
|
||||||
RenderSystem.setShaderColor(r, g, b, a);
|
RenderSystem.setShaderColor(r, g, b, a);
|
||||||
|
buffer.bind();
|
||||||
if (format == DefaultVertexFormat.POSITION) {
|
if (format == DefaultVertexFormat.POSITION) {
|
||||||
buffer.drawWithShader(matrices.last().pose(), matrix4f, GameRenderer.getPositionShader());
|
buffer.drawWithShader(matrices.last().pose(), matrix4f, GameRenderer.getPositionShader());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
buffer.drawWithShader(matrices.last().pose(), matrix4f, GameRenderer.getPositionTexShader());
|
buffer.drawWithShader(matrices.last().pose(), matrix4f, GameRenderer.getPositionTexShader());
|
||||||
}
|
}
|
||||||
|
VertexBuffer.unbind();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initStars() {
|
private void initStars() {
|
||||||
BufferBuilder buffer = Tesselator.getInstance().getBuilder();
|
BufferBuilder buffer = Tesselator.getInstance().getBuilder();
|
||||||
stars1 = buildBufferStars(buffer, stars1, 0.1, 0.30, 3500, 41315);
|
stars1 = buildBuffer(buffer, stars1, 0.1, 0.30, 3500, 41315, this::makeStars);
|
||||||
stars2 = buildBufferStars(buffer, stars2, 0.1, 0.35, 2000, 35151);
|
stars2 = buildBuffer(buffer, stars2, 0.1, 0.35, 2000, 35151, this::makeStars);
|
||||||
stars3 = buildBufferUVStars(buffer, stars3, 0.4, 1.2, 1000, 61354);
|
stars3 = buildBuffer(buffer, stars3, 0.4, 1.2, 1000, 61354, this::makeUVStars);
|
||||||
stars4 = buildBufferUVStars(buffer, stars4, 0.4, 1.2, 1000, 61355);
|
stars4 = buildBuffer(buffer, stars4, 0.4, 1.2, 1000, 61355, this::makeUVStars);
|
||||||
nebula1 = buildBufferFarFog(buffer, nebula1, 40, 60, 30, 11515);
|
nebula1 = buildBuffer(buffer, nebula1, 40, 60, 30, 11515, this::makeFarFog);
|
||||||
nebula2 = buildBufferFarFog(buffer, nebula2, 40, 60, 10, 14151);
|
nebula2 = buildBuffer(buffer, nebula2, 40, 60, 10, 14151, this::makeFarFog);
|
||||||
horizon = buildBufferHorizon(buffer, horizon);
|
horizon = buildBufferHorizon(buffer, horizon);
|
||||||
fog = buildBufferFog(buffer, fog);
|
fog = buildBufferFog(buffer, fog);
|
||||||
}
|
}
|
||||||
|
|
||||||
private VertexBuffer buildBufferStars(BufferBuilder bufferBuilder, VertexBuffer buffer, double minSize, double maxSize, int count, long seed) {
|
private VertexBuffer buildBuffer(BufferBuilder bufferBuilder, VertexBuffer buffer, double minSize, double maxSize, int count, long seed, BufferFunction fkt) {
|
||||||
if (buffer != null) {
|
if (buffer != null) {
|
||||||
buffer.close();
|
buffer.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
buffer = new VertexBuffer();
|
buffer = new VertexBuffer();
|
||||||
makeStars(bufferBuilder, minSize, maxSize, count, seed);
|
fkt.make(bufferBuilder, minSize, maxSize, count, seed);
|
||||||
BufferBuilder.RenderedBuffer renderedBuffer = bufferBuilder.end();
|
BufferBuilder.RenderedBuffer renderedBuffer = bufferBuilder.end();
|
||||||
|
buffer.bind();
|
||||||
buffer.upload(renderedBuffer);
|
buffer.upload(renderedBuffer);
|
||||||
|
|
||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
private VertexBuffer buildBufferUVStars(BufferBuilder bufferBuilder, VertexBuffer buffer, double minSize, double maxSize, int count, long seed) {
|
|
||||||
if (buffer != null) {
|
|
||||||
buffer.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
buffer = new VertexBuffer();
|
|
||||||
makeUVStars(bufferBuilder, minSize, maxSize, count, seed);
|
|
||||||
BufferBuilder.RenderedBuffer renderedBuffer = bufferBuilder.end();
|
|
||||||
buffer.upload(renderedBuffer);
|
|
||||||
|
|
||||||
return buffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
private VertexBuffer buildBufferFarFog(BufferBuilder bufferBuilder, VertexBuffer buffer, double minSize, double maxSize, int count, long seed) {
|
|
||||||
if (buffer != null) {
|
|
||||||
buffer.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
buffer = new VertexBuffer();
|
|
||||||
makeFarFog(bufferBuilder, minSize, maxSize, count, seed);
|
|
||||||
BufferBuilder.RenderedBuffer renderedBuffer = bufferBuilder.end();
|
|
||||||
buffer.upload(renderedBuffer);
|
|
||||||
|
|
||||||
return buffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
private VertexBuffer buildBufferHorizon(BufferBuilder bufferBuilder, VertexBuffer buffer) {
|
private VertexBuffer buildBufferHorizon(BufferBuilder bufferBuilder, VertexBuffer buffer) {
|
||||||
if (buffer != null) {
|
return buildBuffer(
|
||||||
buffer.close();
|
bufferBuilder, buffer, 0, 0, 0, 0,
|
||||||
}
|
(_builder, _minSize, _maxSize, _count, _seed)->makeCylinder(_builder, 16, 50, 100));
|
||||||
|
|
||||||
buffer = new VertexBuffer();
|
|
||||||
makeCylinder(bufferBuilder, 16, 50, 100);
|
|
||||||
BufferBuilder.RenderedBuffer renderedBuffer = bufferBuilder.end();
|
|
||||||
buffer.upload(renderedBuffer);
|
|
||||||
|
|
||||||
return buffer;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private VertexBuffer buildBufferFog(BufferBuilder bufferBuilder, VertexBuffer buffer) {
|
private VertexBuffer buildBufferFog(BufferBuilder bufferBuilder, VertexBuffer buffer) {
|
||||||
if (buffer != null) {
|
return buildBuffer(
|
||||||
buffer.close();
|
bufferBuilder, buffer, 0, 0, 0, 0,
|
||||||
}
|
(_builder, _minSize, _maxSize, _count, _seed)->makeCylinder(_builder, 16, 50, 70));
|
||||||
|
|
||||||
buffer = new VertexBuffer();
|
|
||||||
makeCylinder(bufferBuilder, 16, 50, 70);
|
|
||||||
BufferBuilder.RenderedBuffer renderedBuffer = bufferBuilder.end();
|
|
||||||
buffer.upload(renderedBuffer);
|
|
||||||
|
|
||||||
return buffer;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void makeStars(BufferBuilder buffer, double minSize, double maxSize, int count, long seed) {
|
private void makeStars(BufferBuilder buffer, double minSize, double maxSize, int count, long seed) {
|
||||||
RandomSource random = new LegacyRandomSource(seed);
|
RandomSource random = new LegacyRandomSource(seed);
|
||||||
|
RenderSystem.setShader(GameRenderer::getPositionShader);
|
||||||
buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION);
|
buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION);
|
||||||
|
|
||||||
for (int i = 0; i < count; ++i) {
|
for (int i = 0; i < count; ++i) {
|
||||||
|
@ -290,6 +263,7 @@ public class BetterEndSkyRenderer implements DimensionRenderingRegistry.SkyRende
|
||||||
|
|
||||||
private void makeUVStars(BufferBuilder buffer, double minSize, double maxSize, int count, long seed) {
|
private void makeUVStars(BufferBuilder buffer, double minSize, double maxSize, int count, long seed) {
|
||||||
RandomSource random = new LegacyRandomSource(seed);
|
RandomSource random = new LegacyRandomSource(seed);
|
||||||
|
RenderSystem.setShader(GameRenderer::getPositionTexShader);
|
||||||
buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX);
|
buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX);
|
||||||
|
|
||||||
for (int i = 0; i < count; ++i) {
|
for (int i = 0; i < count; ++i) {
|
||||||
|
@ -339,6 +313,7 @@ public class BetterEndSkyRenderer implements DimensionRenderingRegistry.SkyRende
|
||||||
|
|
||||||
private void makeFarFog(BufferBuilder buffer, double minSize, double maxSize, int count, long seed) {
|
private void makeFarFog(BufferBuilder buffer, double minSize, double maxSize, int count, long seed) {
|
||||||
RandomSource random = new LegacyRandomSource(seed);
|
RandomSource random = new LegacyRandomSource(seed);
|
||||||
|
RenderSystem.setShader(GameRenderer::getPositionTexShader);
|
||||||
buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX);
|
buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX);
|
||||||
|
|
||||||
for (int i = 0; i < count; ++i) {
|
for (int i = 0; i < count; ++i) {
|
||||||
|
@ -388,6 +363,7 @@ public class BetterEndSkyRenderer implements DimensionRenderingRegistry.SkyRende
|
||||||
}
|
}
|
||||||
|
|
||||||
private void makeCylinder(BufferBuilder buffer, int segments, double height, double radius) {
|
private void makeCylinder(BufferBuilder buffer, int segments, double height, double radius) {
|
||||||
|
RenderSystem.setShader(GameRenderer::getPositionTexShader);
|
||||||
buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX);
|
buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX);
|
||||||
for (int i = 0; i < segments; i++) {
|
for (int i = 0; i < segments; i++) {
|
||||||
double a1 = (double) i * Math.PI * 2.0 / (double) segments;
|
double a1 = (double) i * Math.PI * 2.0 / (double) segments;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue