• Ищем качественного (не новичок) разработчиков Xenforo для этого форума! В идеале, чтобы ты был фулл стек программистом. Если у тебя есть что показать, то свяжись с нами по контактным данным: https://t.me/DREDD

Вопрос Проблема с блюром на 1.20.1

  • Автор темы Автор темы karakas
  • Дата начала Дата начала
Забаненный
Забаненный
Статус
Оффлайн
Регистрация
9 Мар 2025
Сообщения
170
Реакции
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
утилка:
Expand Collapse Copy
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");
    }
}
Caused by: java.lang.NullPointerException: Cannot invoke "net.minecraft.client.gl.Framebuffer.beginWrite(boolean)" because "this.input" is null
 
Может ?
Java:
Expand Collapse Copy
public RoundedShader() {
    super(new Identifier("blur", "rounded"), VertexFormats.POSITION);
    this.setup();
}

и в use обновление размера frame
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Последнее редактирование:
Назад
Сверху Снизу