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

Часть функционала GLUtils 1.21.4 fabric

  • Автор темы Автор темы vmp
  • Дата начала Дата начала
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
13 Май 2025
Сообщения
186
Реакции
1
Выберите загрузчик игры
  1. Fabric
GlUtils:
Expand Collapse Copy
package wtf.reek.util.impl.render;

import com.mojang.blaze3d.systems.ProjectionType;
import com.mojang.blaze3d.systems.RenderSystem;

import net.minecraft.client.util.Window;

import org.joml.Matrix4f;
import org.lwjgl.opengl.GL11;
import wtf.reek.util.type.Wrapper;

public class GLUtils implements Wrapper {

    private static double savedScaleFactor = -1;
    private static Matrix4f savedProjectionMatrix = null;
    private static ProjectionType savedProjectionType = null;

    public static void setupOverlayRendering(int scale) {
        savedScaleFactor = sr.getScaleFactor();
        savedProjectionMatrix = new Matrix4f(RenderSystem.getProjectionMatrix());
        savedProjectionType = RenderSystem.getProjectionType();

        sr.setScaleFactor(scale);
        GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT);

        Matrix4f projectionMatrix = new Matrix4f();
        projectionMatrix.setOrtho(0.0f, (float) sr.getScaledWidth(), (float) sr.getScaledHeight(), 0.0f, 1000.0f, 3000.0f);

        RenderSystem.setProjectionMatrix(projectionMatrix, ProjectionType.ORTHOGRAPHIC);
        RenderSystem.getModelViewStack().pushMatrix();
        RenderSystem.getModelViewStack().identity();
        RenderSystem.getModelViewStack().translate(0.0f, 0.0f, -2000.0f);
    }

    public static void setupOverlayRendering() {
        int scale = sr.calculateScaleFactor(mc.options.getGuiScale().getValue(), mc.forcesUnicodeFont());
        setupOverlayRendering(scale);
    }

    public static void restoreRendering() {
        if (savedScaleFactor == -1) {
            return;
        }

        sr.setScaleFactor(savedScaleFactor);
        savedScaleFactor = -1;
        RenderSystem.getModelViewStack().popMatrix();

        if (savedProjectionMatrix != null && savedProjectionType != null) {
            RenderSystem.setProjectionMatrix(savedProjectionMatrix, savedProjectionType);
            savedProjectionMatrix = null;
            savedProjectionType = null;
        }
    }

    public static int getScaledWidth() {
        return sr.getScaledWidth();
    }

    public static int getScaledHeight() {
        return sr.getScaledHeight();
    }

    public static double getScaleFactor() {
        return sr.getScaleFactor();
    }

    public static Window getWindow() {
        return sr;
    }
}

пример как использовать

InGameHudMixin:
Expand Collapse Copy
package wtf.reek.mixin.client.gui.hud;

import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.hud.InGameHud;
import net.minecraft.client.render.RenderTickCounter;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import wtf.reek.Reek;
import wtf.reek.events.render.DrawEvent;
import wtf.reek.util.impl.render.GLUtils;
import wtf.reek.util.type.Wrapper;

@Mixin(InGameHud.class)
public class InGameHudMixin implements Wrapper {
    @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/LayeredDrawer;render(Lnet/minecraft/client/gui/DrawContext;Lnet/minecraft/client/render/RenderTickCounter;)V", shift = At.Shift.AFTER))
    public void onRender(DrawContext context, RenderTickCounter tickCounter, CallbackInfo ci) {
        GLUtils.setupOverlayRendering(2);
        DrawEvent event = new DrawEvent(context, tickCounter.getTickDelta(false));
        GLUtils.restoreRendering();
        Reek.getInstance().getEventBus().post(event);
    }
}
 
чтобы при изменении размера интерфейса, гуи, худ, не изменялся
пример
1768227367740.png

1768227380736.png
 
чтобы при изменении размера интерфейса, гуи, худ, не изменялся
У тебя скорее всего значение uniform'ов в шейдерах умножаются на guiScale, убери это и будет такой же результат
 
У тебя скорее всего значение uniform'ов в шейдерах умножаются на guiScale, убери это и будет такой же результат
это не так работает, Майнкрафт сам увеличивает размер рендера под гуи скейл
 
GlUtils:
Expand Collapse Copy
package wtf.reek.util.impl.render;

import com.mojang.blaze3d.systems.ProjectionType;
import com.mojang.blaze3d.systems.RenderSystem;

import net.minecraft.client.util.Window;

import org.joml.Matrix4f;
import org.lwjgl.opengl.GL11;
import wtf.reek.util.type.Wrapper;

public class GLUtils implements Wrapper {

    private static double savedScaleFactor = -1;
    private static Matrix4f savedProjectionMatrix = null;
    private static ProjectionType savedProjectionType = null;

    public static void setupOverlayRendering(int scale) {
        savedScaleFactor = sr.getScaleFactor();
        savedProjectionMatrix = new Matrix4f(RenderSystem.getProjectionMatrix());
        savedProjectionType = RenderSystem.getProjectionType();

        sr.setScaleFactor(scale);
        GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT);

        Matrix4f projectionMatrix = new Matrix4f();
        projectionMatrix.setOrtho(0.0f, (float) sr.getScaledWidth(), (float) sr.getScaledHeight(), 0.0f, 1000.0f, 3000.0f);

        RenderSystem.setProjectionMatrix(projectionMatrix, ProjectionType.ORTHOGRAPHIC);
        RenderSystem.getModelViewStack().pushMatrix();
        RenderSystem.getModelViewStack().identity();
        RenderSystem.getModelViewStack().translate(0.0f, 0.0f, -2000.0f);
    }

    public static void setupOverlayRendering() {
        int scale = sr.calculateScaleFactor(mc.options.getGuiScale().getValue(), mc.forcesUnicodeFont());
        setupOverlayRendering(scale);
    }

    public static void restoreRendering() {
        if (savedScaleFactor == -1) {
            return;
        }

        sr.setScaleFactor(savedScaleFactor);
        savedScaleFactor = -1;
        RenderSystem.getModelViewStack().popMatrix();

        if (savedProjectionMatrix != null && savedProjectionType != null) {
            RenderSystem.setProjectionMatrix(savedProjectionMatrix, savedProjectionType);
            savedProjectionMatrix = null;
            savedProjectionType = null;
        }
    }

    public static int getScaledWidth() {
        return sr.getScaledWidth();
    }

    public static int getScaledHeight() {
        return sr.getScaledHeight();
    }

    public static double getScaleFactor() {
        return sr.getScaleFactor();
    }

    public static Window getWindow() {
        return sr;
    }
}

пример как использовать

InGameHudMixin:
Expand Collapse Copy
package wtf.reek.mixin.client.gui.hud;

import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.hud.InGameHud;
import net.minecraft.client.render.RenderTickCounter;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import wtf.reek.Reek;
import wtf.reek.events.render.DrawEvent;
import wtf.reek.util.impl.render.GLUtils;
import wtf.reek.util.type.Wrapper;

@Mixin(InGameHud.class)
public class InGameHudMixin implements Wrapper {
    @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/LayeredDrawer;render(Lnet/minecraft/client/gui/DrawContext;Lnet/minecraft/client/render/RenderTickCounter;)V", shift = At.Shift.AFTER))
    public void onRender(DrawContext context, RenderTickCounter tickCounter, CallbackInfo ci) {
        GLUtils.setupOverlayRendering(2);
        DrawEvent event = new DrawEvent(context, tickCounter.getTickDelta(false));
        GLUtils.restoreRendering();
        Reek.getInstance().getEventBus().post(event);
    }
}
просто потрогай себя там)
 
Назад
Сверху Снизу