- Статус
- Оффлайн
- Регистрация
- 9 Мар 2025
- Сообщения
- 170
- Реакции
- 0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
утилка:
package ru.expensive.common.util.render.shaders.impl;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gl.Framebuffer;
import net.minecraft.client.gl.GlUniform;
import net.minecraft.client.gl.SimpleFramebuffer;
import net.minecraft.client.render.VertexFormats;
import net.minecraft.util.Identifier;
import org.lwjgl.opengl.GL30;
import ru.expensive.common.util.render.shaders.GlProgram;
import ru.expensive.common.util.render.shaders.WindowResizeCallback;
import java.awt.*;
import static ru.expensive.common.util.player.IHolder.mc;
public class RoundedShader extends GlProgram {
private GlUniform uSize;
private GlUniform uLocation;
private GlUniform radius;
private GlUniform color1;
private GlUniform color2;
private GlUniform color3;
private GlUniform color4;
private Framebuffer input;
public RoundedShader() {
super(new Identifier("blur", "rounded"), VertexFormats.POSITION);
WindowResizeCallback.EVENT.register(( client, window ) -> {
if (input != null)
input.resize(window.getFramebufferWidth(), window.getFramebufferHeight(), MinecraftClient.IS_SYSTEM_MAC);
});
}
public void setParameters( float x, float y, float width, float height, float r, Color c1, Color c2 ) {
int i = mc.options.getGuiScale().getValue();
radius.set(r * i);
uLocation.set(x * i, -y * i + mc.getWindow().getScaledHeight() * i - height * i);
uSize.set(width * i, height * i);
color1.set(c2.getRed() / 255f, c2.getGreen() / 255f, c2.getBlue() / 255f, c2.getAlpha() / 255f);
color2.set(c1.getRed() / 255f, c1.getGreen() / 255f, c1.getBlue() / 255f, c1.getAlpha() / 255f);
color3.set(c1.getRed() / 255f, c1.getGreen() / 255f, c1.getBlue() / 255f, c1.getAlpha() / 255f);
color4.set(c2.getRed() / 255f, c2.getGreen() / 255f, c2.getBlue() / 255f, c2.getAlpha() / 255f);
}
public void setParameters( float x, float y, float width, float height, float r, Color c1, Color c2, Color c3, Color c4 ) {
int i = mc.options.getGuiScale().getValue();
radius.set(r * i);
uLocation.set(x * i, -y * i + mc.getWindow().getScaledHeight() * i - height * i);
uSize.set(width * i, height * i);
color1.set(c2.getRed() / 255f, c2.getGreen() / 255f, c2.getBlue() / 255f, c2.getAlpha() / 255f);
color2.set(c1.getRed() / 255f, c1.getGreen() / 255f, c1.getBlue() / 255f, c1.getAlpha() / 255f);
color3.set(c4.getRed() / 255f, c4.getGreen() / 255f, c4.getBlue() / 255f, c4.getAlpha() / 255f);
color4.set(c3.getRed() / 255f, c3.getGreen() / 255f, c3.getBlue() / 255f, c3.getAlpha() / 255f);
}
public void setParameters( float x, float y, float width, float height, float r, Color c1 ) {
int i = mc.options.getGuiScale().getValue();
radius.set(r * i);
uLocation.set(x * i, -y * i + mc.getWindow().getScaledHeight() * i - height * i);
uSize.set(width * i, height * i);
color1.set(c1.getRed() / 255f, c1.getGreen() / 255f, c1.getBlue() / 255f, c1.getAlpha() / 255f);
color2.set(c1.getRed() / 255f, c1.getGreen() / 255f, c1.getBlue() / 255f, c1.getAlpha() / 255f);
color3.set(c1.getRed() / 255f, c1.getGreen() / 255f, c1.getBlue() / 255f, c1.getAlpha() / 255f);
color4.set(c1.getRed() / 255f, c1.getGreen() / 255f, c1.getBlue() / 255f, c1.getAlpha() / 255f);
}
public void setParameters( float x, float y, float width, float height, float r, float alpha, Color c1, Color c2, Color c3, Color c4 ) {
int i = mc.options.getGuiScale().getValue();
radius.set(r * i);
uLocation.set(x * i, -y * i + mc.getWindow().getScaledHeight() * i - height * i);
uSize.set(width * i, height * i);
color1.set(c1.getRed() / 255f, c1.getGreen() / 255f, c1.getBlue() / 255f, alpha);
color2.set(c2.getRed() / 255f, c2.getGreen() / 255f, c2.getBlue() / 255f, alpha);
color3.set(c3.getRed() / 255f, c3.getGreen() / 255f, c3.getBlue() / 255f, alpha);
color4.set(c4.getRed() / 255f, c4.getGreen() / 255f, c4.getBlue() / 255f, alpha);
}
[USER=1367676]@override[/USER]
public void use() {
var buffer = MinecraftClient.getInstance().getFramebuffer();
input.beginWrite(false);
GL30.glBindFramebuffer(GL30.GL_READ_FRAMEBUFFER, buffer.fbo);
GL30.glBlitFramebuffer(0, 0, buffer.textureWidth, buffer.textureHeight, 0, 0, buffer.textureWidth, buffer.textureHeight, GL30.GL_COLOR_BUFFER_BIT, GL30.GL_LINEAR);
buffer.beginWrite(false);
super.use();
}
[USER=1367676]@override[/USER]
protected void setup() {
var window = MinecraftClient.getInstance().getWindow();
if (window == null) {
throw new IllegalStateException("Minecraft window is not initialized!");
}
int width = window.getFramebufferWidth();
int height = window.getFramebufferHeight();
if (width <= 0 || height <= 0) {
throw new IllegalStateException("Invalid framebuffer dimensions: " + width + "x" + height);
}
try {
input = new SimpleFramebuffer(width, height, false, MinecraftClient.IS_SYSTEM_MAC);
} catch (Exception e) {
throw new RuntimeException("Failed to create framebuffer", e);
}
uSize = findUniform("uSize");
uLocation = findUniform("uLocation");
radius = findUniform("radius");
color1 = findUniform("color1");
color2 = findUniform("color2");
color3 = findUniform("color3");
color4 = findUniform("color4");
}
}