Подведи собственные итоги года совместно с YOUGAME и забери ценные призы! Перейти

Вопрос В чем проблема fabric 1.21.4 (FrameBuffer)

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
23 Окт 2025
Сообщения
21
Реакции
3
FrameBufferHelper:
Expand Collapse Copy
public class FrameBufferHelper {
    public static Framebuffer entitiesFramebuffer;

    public static void ensureFramebuffer() {
        if (entitiesFramebuffer == null) {
            entitiesFramebuffer = new SimpleFramebuffer(mc.getWindow().getFramebufferWidth(), mc.getWindow().getFramebufferHeight(), true);
        }
        if (entitiesFramebuffer.textureWidth != mc.getWindow().getFramebufferWidth() || entitiesFramebuffer.textureHeight != mc.getWindow().getFramebufferHeight()) {
            entitiesFramebuffer.resize(mc.getWindow().getFramebufferWidth(), mc.getWindow().getFramebufferHeight());

        }
    }

    public static void clearFramebuffer() {
        ensureFramebuffer();
        GL11.glClearColor(0.0F, 0.0F, 0.0F, 0.0F);
        entitiesFramebuffer.clear();
        GL11.glClearColor(1.0F, 1.0F, 1.0F, 1.0F);
    }

    public static void drawFramebuffer() {
        if (entitiesFramebuffer == null) return;

        RenderSystem.enableBlend();
        RenderSystem.blendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA);

        RenderSystem.disableDepthTest();
        entitiesFramebuffer.draw(mc.getWindow().getFramebufferWidth(), mc.getWindow().getFramebufferHeight());
        RenderSystem.enableDepthTest();
        RenderSystem.defaultBlendFunc();
    }
}

EntityRenderDispatcherMixin:
Expand Collapse Copy
@Mixin(EntityRenderDispatcher.class)
public abstract class EntityRenderDispatcherMixin {

    @Shadow
    public abstract <E extends Entity, S extends EntityRenderState> void render(E entity, double x, double y, double z, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, EntityRenderer<? super E, S> renderer);

    @Unique
    private boolean isRenderingChams = false;
   
    @Unique
    private long lastPrintTime = 0;

    @Inject(method = "render(Lnet/minecraft/entity/Entity;DDDFLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;ILnet/minecraft/client/render/entity/EntityRenderer;)V",
            at = @At("HEAD"))
    private <E extends Entity, S extends EntityRenderState> void onRender(E entity, double x, double y, double z, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, EntityRenderer<? super E, S> renderer, CallbackInfo ci) {

        if (entity instanceof PlayerEntity && !isRenderingChams) {

            long now = System.currentTimeMillis();
            boolean doPrint = (now - lastPrintTime > 3000);

            if (doPrint) {
                System.out.println("========== [DEBUG START] ==========");
                System.out.println(" Entity: " + entity.getName().getString());
                lastPrintTime = now;
            }


            try {
                MinecraftClient mc = MinecraftClient.getInstance();
                Framebuffer mainFramebuffer = mc.getFramebuffer();
                if (mainFramebuffer == null) {
                    if (doPrint) System.out.println("ERROR:Framebuffer нулик ");
                    return;
                }

                FrameBufferHelper.ensureFramebuffer();

                if (FrameBufferHelper.entitiesFramebuffer == null) {
                    if (doPrint) System.out.println("ERROR фрейм бафер не тютю");
                    return;
                }

                if (doPrint) {
                    System.out.println("Main FBO ID: " + mainFramebuffer.fbo);
                    System.out.println("Chams FBO ID: " + FrameBufferHelper.entitiesFramebuffer.fbo);

                }

                FrameBufferHelper.entitiesFramebuffer.beginWrite(false);

                VertexConsumerProvider.Immediate immediate = mc.getBufferBuilders().getEntityVertexConsumers();

                isRenderingChams = true;

                this.render(entity, x, y, z, tickDelta, matrices, immediate, light, renderer);

                immediate.draw();

                isRenderingChams = false;


                FrameBufferHelper.entitiesFramebuffer.endWrite();
                mainFramebuffer.beginWrite(false);

                if (doPrint) {

                    System.out.println("========== [DEBUG END] ==========");
                }

            } catch (Exception e) {

                e.printStackTrace();


                isRenderingChams = false;
                if (MinecraftClient.getInstance().getFramebuffer() != null) {
                    MinecraftClient.getInstance().getFramebuffer().beginWrite(false);
                }
            }
        }
    }
}
весь экран просто белый пытался пофиксить через аишку но она тоже не знает вот как выглядит
1764693287088.png
 
Назад
Сверху Снизу