Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Вопрос Проблема с шейдерами в mainmenu 1.21.4 fabric

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
22 Ноя 2024
Сообщения
7
Реакции
0
крч вот код:
миксин:
Expand Collapse Copy
package vs.vsa.screen.mixin;

import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.Screen;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

import com.mojang.blaze3d.systems.RenderSystem;

import vs.vsa.screen.shader.ShaderManager;

@Mixin(Screen.class)
public abstract class ScreenMixin {

    @Shadow
    protected MinecraftClient client;

    @Inject(method = "render", at = @At("HEAD"))
    private void vsa$renderShader(DrawContext context, int mouseX, int mouseY, float delta, CallbackInfo ci) {
        if (this.client == null || this.client.world != null) {
            return;
        }

        context.getMatrices().push();
        ShaderManager.renderTitleBackground(context, mouseX, mouseY);
        context.draw();
        RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);
        RenderSystem.enableBlend();
        RenderSystem.defaultBlendFunc();

        context.getMatrices().pop();
    }

    @Inject(method = "renderBackground", at = @At("HEAD"), cancellable = true)
    private void vsa$cancelBackground(DrawContext context, int mouseX, int mouseY, float delta, CallbackInfo ci) {
        if (this.client == null || this.client.world != null) {
            return;
        }
        ci.cancel();
    }

    @Inject(method = "renderInGameBackground", at = @At("HEAD"), cancellable = true)
    private void vsa$cancelInGameBackground(DrawContext context, CallbackInfo ci) {
        if (this.client == null || this.client.world != null) {
            return;
        }
        ci.cancel();
    }
}
GLSLShader:
Expand Collapse Copy
package vs.vsa.screen.shader;

import net.minecraft.client.gl.Defines;
import net.minecraft.client.gl.ShaderProgram;
import net.minecraft.client.gl.ShaderProgramKey;
import net.minecraft.client.render.VertexFormat;

import com.mojang.blaze3d.systems.RenderSystem;

import net.minecraft.util.Identifier;

public final class GLSLShader {

    private final ShaderProgramKey key;

    public GLSLShader(Identifier identifier, VertexFormat vertexFormat) {
        this.key = new ShaderProgramKey(identifier, vertexFormat, Defines.EMPTY);
    }

    public ShaderProgram use() {
        return RenderSystem.setShader(this.key);
    }
}
ShaderManager:
Expand Collapse Copy
package vs.vsa.screen.shader;

import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gl.ShaderProgram;
import net.minecraft.client.gui.DrawContext;
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 net.minecraft.util.Identifier;
import org.joml.Matrix4f;

import vs.vsa.Vsa;

public final class ShaderManager {

    private static final GLSLShader TITLE_BACKGROUND = new GLSLShader(
        Identifier.of(Vsa.MOD_ID, "core/title_background"),
        VertexFormats.POSITION
    );
    private static final long START_NANOS = System.nanoTime();

    private ShaderManager() {
    }

    public static void renderTitleBackground(DrawContext context, int mouseX, int mouseY) {
        MinecraftClient client = MinecraftClient.getInstance();
        int framebufferWidth = client.getWindow().getFramebufferWidth();
        int framebufferHeight = client.getWindow().getFramebufferHeight();
        int scaledWidth = client.getWindow().getScaledWidth();
        int scaledHeight = client.getWindow().getScaledHeight();

        if (framebufferWidth <= 0 || framebufferHeight <= 0 || scaledWidth <= 0 || scaledHeight <= 0) {
            return;
        }

        float scaleX = (float) framebufferWidth / (float) scaledWidth;
        float scaleY = (float) framebufferHeight / (float) scaledHeight;
        float mouseXFb = mouseX * scaleX;
        float mouseYFb = mouseY * scaleY;

        float normMouseX = (mouseXFb / (float) framebufferWidth) - 0.5f;
        float normMouseY = 0.5f - (mouseYFb / (float) framebufferHeight);

        float timeSeconds = (System.nanoTime() - START_NANOS) / 1_000_000_000.0f;

        RenderSystem.disableDepthTest();
        RenderSystem.depthMask(false);
        RenderSystem.enableBlend();
        RenderSystem.defaultBlendFunc();
        RenderSystem.disableCull();

        ShaderProgram shader = TITLE_BACKGROUND.use();
        shader.getUniform("time").set(timeSeconds);
        shader.getUniform("resolution").set((float) framebufferWidth, (float) framebufferHeight);
        shader.getUniform("mouse").set(normMouseX, normMouseY);

        Matrix4f matrix = context.getMatrices().peek().getPositionMatrix();
        BufferBuilder builder = Tessellator.getInstance().begin(DrawMode.QUADS, VertexFormats.POSITION);
        builder.vertex(matrix, 0.0f, scaledHeight, 0.0f);
        builder.vertex(matrix, scaledWidth, scaledHeight, 0.0f);
        builder.vertex(matrix, scaledWidth, 0.0f, 0.0f);
        builder.vertex(matrix, 0.0f, 0.0f, 0.0f);
        BufferRenderer.drawWithGlobalProgram(builder.end());

        RenderSystem.enableCull();
        RenderSystem.disableBlend();
        RenderSystem.depthMask(true);
        RenderSystem.enableDepthTest();
    }
}


в чем собственно проблема? почему то кнопки исчезают (сс:
Пожалуйста, авторизуйтесь для просмотра ссылки.
(no add).
самое интересное если если каждую менюшку перечислять, то такой хуйни нету.
помогите пж
 
Назад
Сверху Снизу