Начинающий
- Статус
- Оффлайн
- Регистрация
- 25 Июн 2024
- Сообщения
- 102
- Реакции
- 1
Помогите пожалуйста перенести с 1.21.4 на 1.21.7
BuiltBlur:
package dev.satofan.white.utils.render.renderers.impl;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gl.Defines;
import net.minecraft.client.gl.Framebuffer;
import net.minecraft.client.gl.ShaderProgram;
import net.minecraft.client.gl.ShaderProgramKey;
import net.minecraft.client.gl.SimpleFramebuffer;
import net.minecraft.client.render.BufferBuilder;
import net.minecraft.client.render.BufferRenderer;
import net.minecraft.client.render.Tessellator;
import net.minecraft.client.render.VertexFormat.DrawMode;
import net.minecraft.client.render.VertexFormats;
import org.joml.Matrix4f;
import com.google.common.base.Supplier;
import com.google.common.base.Suppliers;
import com.mojang.blaze3d.systems.RenderSystem;
import dev.satofan.white.utils.providers.ResourceProvider;
import dev.satofan.white.utils.builders.states.QuadColorState;
import dev.satofan.white.utils.builders.states.QuadRadiusState;
import dev.satofan.white.utils.builders.states.SizeState;
import dev.satofan.white.utils.render.renderers.IRenderer;
public record BuiltBlur(
SizeState size,
QuadRadiusState radius,
QuadColorState color,
float smoothness,
float blurRadius
) implements IRenderer {
private static final ShaderProgramKey BLUR_SHADER_KEY = new ShaderProgramKey(ResourceProvider.getShaderIdentifier("blur"),
VertexFormats.POSITION_COLOR, Defines.EMPTY);
private static final Supplier<SimpleFramebuffer> TEMP_FBO_SUPPLIER = Suppliers
.memoize(() -> new SimpleFramebuffer(1920, 1024, false));
private static final Framebuffer MAIN_FBO = MinecraftClient.getInstance().getFramebuffer();
@Override
public void render(Matrix4f matrix, float x, float y, float z) {
SimpleFramebuffer fbo = TEMP_FBO_SUPPLIER.get();
if (fbo.textureWidth != MAIN_FBO.textureWidth || fbo.textureHeight != MAIN_FBO.textureHeight) {
fbo.resize(MAIN_FBO.textureWidth, MAIN_FBO.textureHeight);
}
RenderSystem.enableBlend();
RenderSystem.defaultBlendFunc();
RenderSystem.disableCull();
fbo.beginWrite(false);
MAIN_FBO.draw(fbo.textureWidth, fbo.textureHeight);
MAIN_FBO.beginWrite(false);
RenderSystem.setShaderTexture(0, fbo.getColorAttachment());
float width = this.size.width(), height = this.size.height();
ShaderProgram shader = RenderSystem.setShader(BLUR_SHADER_KEY);
shader.getUniform("Size").set(width, height);
shader.getUniform("Radius").set(this.radius.radius1(), this.radius.radius2(),
this.radius.radius3(), this.radius.radius4());
shader.getUniform("Smoothness").set(this.smoothness);
shader.getUniform("BlurRadius").set(this.blurRadius);
BufferBuilder builder = Tessellator.getInstance().begin(DrawMode.QUADS, VertexFormats.POSITION_COLOR);
builder.vertex(matrix, x, y, z).color(this.color.color1());
builder.vertex(matrix, x, y + height, z).color(this.color.color2());
builder.vertex(matrix, x + width, y + height, z).color(this.color.color3());
builder.vertex(matrix, x + width, y, z).color(this.color.color4());
BufferRenderer.drawWithGlobalProgram(builder.end());
RenderSystem.setShaderTexture(0, 0);
RenderSystem.enableCull();
RenderSystem.disableBlend();
}
}
BuiltBorder:
package dev.satofan.white.utils.render.renderers.impl;
import dev.satofan.white.utils.builders.states.QuadColorState;
import dev.satofan.white.utils.builders.states.QuadRadiusState;
import dev.satofan.white.utils.builders.states.SizeState;
import dev.satofan.white.utils.providers.ResourceProvider;
import dev.satofan.white.utils.render.renderers.IRenderer;
import net.minecraft.client.gl.Defines;
import net.minecraft.client.gl.ShaderProgram;
import net.minecraft.client.gl.ShaderProgramKey;
import net.minecraft.client.render.VertexFormat.DrawMode;
import net.minecraft.client.render.BufferBuilder;
import net.minecraft.client.render.BufferRenderer;
import net.minecraft.client.render.Tessellator;
import net.minecraft.client.render.VertexFormats;
import org.joml.Matrix4f;
import com.mojang.blaze3d.systems.RenderSystem;
public record BuiltBorder(
SizeState size,
QuadRadiusState radius,
QuadColorState color,
float thickness,
float internalSmoothness, float externalSmoothness
) implements IRenderer {
private static final ShaderProgramKey RECTANGLE_SHADER_KEY = new ShaderProgramKey(ResourceProvider.getShaderIdentifier("border"),
VertexFormats.POSITION_COLOR, Defines.EMPTY);
@Override
public void render(Matrix4f matrix, float x, float y, float z) {
RenderSystem.enableBlend();
RenderSystem.defaultBlendFunc();
RenderSystem.disableCull();
float width = this.size.width(), height = this.size.height();
ShaderProgram shader = RenderSystem.setShader(RECTANGLE_SHADER_KEY);
shader.getUniform("Size").set(width, height);
shader.getUniform("Radius").set(this.radius.radius1(), this.radius.radius2(),
this.radius.radius3(), this.radius.radius4());
shader.getUniform("Thickness").set(thickness);
shader.getUniform("Smoothness").set(this.internalSmoothness, this.externalSmoothness);
BufferBuilder builder = Tessellator.getInstance().begin(DrawMode.QUADS, VertexFormats.POSITION_COLOR);
builder.vertex(matrix, x, y, z).color(this.color.color1());
builder.vertex(matrix, x, y + height, z).color(this.color.color2());
builder.vertex(matrix, x + width, y + height, z).color(this.color.color3());
builder.vertex(matrix, x + width, y, z).color(this.color.color4());
BufferRenderer.drawWithGlobalProgram(builder.end());
RenderSystem.enableCull();
RenderSystem.disableBlend();
}
}
BuiltRectangle:
package dev.satofan.white.utils.render.renderers.impl;
import net.minecraft.client.gl.Defines;
import net.minecraft.client.gl.ShaderProgram;
import net.minecraft.client.gl.ShaderProgramKey;
import net.minecraft.client.render.VertexFormat.DrawMode;
import net.minecraft.client.render.BufferBuilder;
import net.minecraft.client.render.BufferRenderer;
import net.minecraft.client.render.Tessellator;
import net.minecraft.client.render.VertexFormats;
import org.joml.Matrix4f;
import com.mojang.blaze3d.systems.RenderSystem;
import dev.satofan.white.utils.providers.ResourceProvider;
import dev.satofan.white.utils.builders.states.QuadColorState;
import dev.satofan.white.utils.builders.states.QuadRadiusState;
import dev.satofan.white.utils.builders.states.SizeState;
import dev.satofan.white.utils.render.renderers.IRenderer;
public record BuiltRectangle(
SizeState size,
QuadRadiusState radius,
QuadColorState color,
float smoothness
) implements IRenderer {
private static final ShaderProgramKey RECTANGLE_SHADER_KEY = new ShaderProgramKey(ResourceProvider.getShaderIdentifier("rectangle"),
VertexFormats.POSITION_COLOR, Defines.EMPTY);
@Override
public void render(Matrix4f matrix, float x, float y, float z) {
RenderSystem.enableBlend();
RenderSystem.defaultBlendFunc();
RenderSystem.disableCull();
float width = this.size.width(), height = this.size.height();
ShaderProgram shader = RenderSystem.setShader(RECTANGLE_SHADER_KEY);
shader.getUniform("Size").set(width, height);
shader.getUniform("Radius").set(this.radius.radius1(), this.radius.radius2(),
this.radius.radius3(), this.radius.radius4());
shader.getUniform("Smoothness").set(this.smoothness);
BufferBuilder builder = Tessellator.getInstance().begin(DrawMode.QUADS, VertexFormats.POSITION_COLOR);
builder.vertex(matrix, x, y, z).color(this.color.color1());
builder.vertex(matrix, x, y + height, z).color(this.color.color2());
builder.vertex(matrix, x + width, y + height, z).color(this.color.color3());
builder.vertex(matrix, x + width, y, z).color(this.color.color4());
BufferRenderer.drawWithGlobalProgram(builder.end());
RenderSystem.enableCull();
RenderSystem.disableBlend();
}
}
BuiltText:
package dev.satofan.white.utils.render.renderers.impl;
import dev.satofan.white.utils.render.msdf.MsdfFont;
import org.joml.Matrix4f;
import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.gl.Defines;
import net.minecraft.client.gl.ShaderProgram;
import net.minecraft.client.gl.ShaderProgramKey;
import net.minecraft.client.render.BufferBuilder;
import net.minecraft.client.render.BufferRenderer;
import net.minecraft.client.render.Tessellator;
import net.minecraft.client.render.VertexFormat.DrawMode;
import net.minecraft.client.render.VertexFormats;
import dev.satofan.white.utils.providers.ResourceProvider;
import dev.satofan.white.utils.render.renderers.IRenderer;
public record BuiltText(
MsdfFont font,
String text,
float size,
float thickness,
int color,
float smoothness,
float spacing,
int outlineColor,
float outlineThickness
) implements IRenderer {
private static final ShaderProgramKey MSDF_FONT_SHADER_KEY = new ShaderProgramKey(ResourceProvider.getShaderIdentifier("msdf_font"),
VertexFormats.POSITION_TEXTURE_COLOR, Defines.EMPTY);
@Override
public void render(Matrix4f matrix, float x, float y, float z) {
RenderSystem.enableBlend();
RenderSystem.defaultBlendFunc();
RenderSystem.disableCull();
RenderSystem.setShaderTexture(0, this.font.getTextureId());
boolean outlineEnabled = (this.outlineThickness > 0.0f);
ShaderProgram shader = RenderSystem.setShader(MSDF_FONT_SHADER_KEY);
shader.getUniform("Range").set(this.font.getAtlas().range());
shader.getUniform("Thickness").set(this.thickness);
shader.getUniform("Smoothness").set(this.smoothness);
shader.getUniform("Outline").set(outlineEnabled ? 1 : 0);
if (outlineEnabled) {
shader.getUniform("OutlineThickness").set(this.outlineThickness);
float[] outlineComponents = ColorProvider.normalize(this.outlineColor);
shader.getUniform("OutlineColor").set(outlineComponents[0], outlineComponents[1],
outlineComponents[2], outlineComponents[3]);
}
BufferBuilder builder = Tessellator.getInstance().begin(DrawMode.QUADS, VertexFormats.POSITION_TEXTURE_COLOR);
this.font.applyGlyphs(matrix, builder, this.text, this.size,
(this.thickness + this.outlineThickness * 0.5f) * 0.5f * this.size, this.spacing,
x, y + this.font.getMetrics().baselineHeight() * this.size, z, this.color);
BufferRenderer.drawWithGlobalProgram(builder.end());
RenderSystem.setShaderTexture(0, 0);
RenderSystem.enableCull();
RenderSystem.disableBlend();
}
}
BuiltTexture:
package dev.satofan.white.utils.render.renderers.impl;
import net.minecraft.client.gl.Defines;
import net.minecraft.client.gl.ShaderProgram;
import net.minecraft.client.gl.ShaderProgramKey;
import net.minecraft.client.render.BufferBuilder;
import net.minecraft.client.render.BufferRenderer;
import net.minecraft.client.render.Tessellator;
import net.minecraft.client.render.VertexFormat.DrawMode;
import net.minecraft.client.render.VertexFormats;
import org.joml.Matrix4f;
import com.mojang.blaze3d.systems.RenderSystem;
import dev.satofan.white.utils.providers.ResourceProvider;
import dev.satofan.white.utils.builders.states.QuadColorState;
import dev.satofan.white.utils.builders.states.QuadRadiusState;
import dev.satofan.white.utils.builders.states.SizeState;
import dev.satofan.white.utils.render.renderers.IRenderer;
public record BuiltTexture(
SizeState size,
QuadRadiusState radius,
QuadColorState color,
float smoothness,
float u, float v,
float texWidth, float texHeight,
int textureId
) implements IRenderer {
private static final ShaderProgramKey TEXTURE_SHADER_KEY = new ShaderProgramKey(ResourceProvider.getShaderIdentifier("texture"),
VertexFormats.POSITION_TEXTURE_COLOR, Defines.EMPTY);
@Override
public void render(Matrix4f matrix, float x, float y, float z) {
RenderSystem.enableBlend();
RenderSystem.defaultBlendFunc();
RenderSystem.disableCull();
RenderSystem.setShaderTexture(0, this.textureId);
float width = this.size.width(), height = this.size.height();
ShaderProgram shader = RenderSystem.setShader(TEXTURE_SHADER_KEY);
shader.getUniform("Size").set(width, height);
shader.getUniform("Radius").set(this.radius.radius1(), this.radius.radius2(),
this.radius.radius3(), this.radius.radius4());
shader.getUniform("Smoothness").set(this.smoothness);
BufferBuilder builder = Tessellator.getInstance().begin(DrawMode.QUADS, VertexFormats.POSITION_TEXTURE_COLOR);
builder.vertex(matrix, x, y, z).texture(this.u, this.v).color(this.color.color1());
builder.vertex(matrix, x, y + height, z).texture(this.u, this.v + this.texHeight).color(this.color.color2());
builder.vertex(matrix, x + width, y + height, z).texture(this.u + this.texWidth, this.v + this.texHeight).color(this.color.color3());
builder.vertex(matrix, x + width, y, z).texture(this.u + this.texWidth, this.v).color(this.color.color4());
BufferRenderer.drawWithGlobalProgram(builder.end());
RenderSystem.setShaderTexture(0, 0);
RenderSystem.enableCull();
RenderSystem.disableBlend();
}
}