Помощь с Framebuffer

Версия Minecraft
1.20+
54
2
Читал данный гайд, но он как ни странно старый и под 1.12.2
Я же пишу мод на Fabric под 1.20.1, использую GeckoLib 4.4.4
Проблема в том, что я хочу скопировать свой SimpleFramebuffer на майновский MinecraftClient.getInstance.getFramebuffer(), но не знаю как называются методы в новой версии.

Java:
GL11.glBindTexture(GL11.GL_TEXTURE_2D, framebuffer.framebufferTexture);
GL11.glPushMatrix();
    GL11.glMatrixMode(GL_PROJECTION);
    GL11.glLoadIdentity();
    GL11.glMatrixMode(GL_MODELVIEW);
    GL11.glLoadIdentity();
    drawQuad();
GL11.glPopMatrix();

Java:
var framebuffer = LwitClient.getInstance().framebuffer;
MinecraftClient.getInstance().getFramebuffer().beginWrite(false);
//GL11.glBindTexture(GL11.GL_TEXTURE_2D, не могу найти как получить текстурку из фбо);
matrices.push();
{
    GL11.glMatrixMode(GL11.GL_PROJECTION); //стоит ли заменить другим?
    matrices.loadIdentity(); //стоит ли заменить другим?
    GL11.glMatrixMode(GL11.GL_MODELVIEW); //стоит ли заменить другим?
    matrices.loadIdentity(); //стоит ли заменить другим?
     //У меня стоит setClearColor(0, 0, 0, 0), могу ли я скопировать буфер таким образом? или над по-другому?
    framebuffer.draw();
}
matrices.pop();
 
54
2
Я почитал немного гайдов/доков/stackoverflow по OpenGL, и пришёл к этому:
Java:
var framebuffer = TemplateModClient.getInstance().framebuffer;
var mine = MinecraftClient.getInstance().getFramebuffer();
mine.beginWrite(false);
matrices.push();
{
    GlStateManager._glBindFramebuffer(GL30.GL_READ_FRAMEBUFFER, framebuffer.fbo);
    GlStateManager._glBindFramebuffer(GL30.GL_DRAW_FRAMEBUFFER, mine.fbo);
    GlStateManager._glBlitFrameBuffer(0, 0, framebuffer.textureWidth, framebuffer.textureHeight,
            0, 0, mine.textureWidth, mine.textureHeight, GL30.GL_COLOR_BUFFER_BIT,
            GL30.GL_LINEAR);
}
matrices.pop();
framebuffer.clear(false);

Возникло две проблемы:
1. На экран (майнкрафтовский фбо) рендерится и фон моего фбо (белый)
Снимок экрана 2024-04-18 в 01.38.18.png

2. Между объектами (энтити в моём случае) не работает depth test (в том числе и между частями модельки одной сущности)
Снимок экрана 2024-04-18 в 01.39.56.png

К сожалению я новичок в OpenGL, и сам вряд-ли скоро разберусь с этим, надеюсь на помощь

(Моя задача сделать, чтобы данный фбо рендерился поверх мира майнкрафта, но ПОД GUI.
Я пробовал копировать глубину с моего фбо на фбо майнкрафта (и наоборот при инициализации фбо), но тогда как я понял мой фбо рендерится точно также как и стандартный, то есть блоки которые находятся перед ним его перекрывают)
 
Последнее редактирование:
54
2
Поправил вторую проблему:
при инициализации фбо поставил useDepth = true;
depthTest у кастомного рендер типа поставил LEQUAL_DEPTH_TEST.

Но первый трабл пока не получается пофиксить, у меня стоит framebuffer.setClearColor(255, 255, 255, 0),
соответственно фон должен быть прозрачным (пробовал все нули), но при GlStateManager._glBlitFrameBuffer получается белый экран с моими отрендеренными энтити, то есть альфа канал просто игнорируется, не знаю куда смотреть
 
54
2
Возможно ты бленд не включил?
Насколько я понял бленд не работает с blitFramebuffer, поэтому нет толку включать его или выключать, но я пробовал делать через draw:

Java:
GlStateManager._glBindFramebuffer(GL30.GL_READ_FRAMEBUFFER, framebuffer.fbo);
GlStateManager._glBindFramebuffer(GL30.GL_DRAW_FRAMEBUFFER, mine.fbo);
RenderSystem.enableBlend();
RenderSystem.disableDepthTest();
RenderSystem.blendFuncSeparate(GlStateManager.SrcFactor.SRC_ALPHA, GlStateManager.DstFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SrcFactor.ZERO, GlStateManager.DstFactor.ONE);
framebuffer.draw(framebuffer.textureWidth, framebuffer.textureHeight);

Всё равно белый экран
 
54
2
В общем я поставил false, теперь все работает, но возникла другая проблема, я думаю её не особо сложно исправить, но я не знаю как :/

В общем у меня модель рендерится в vertexconsumer, и в мой framebuffer потом через vertexconsumer.draw с использованием кастомного render layer, и вот я заметил, что у меня текстура полностью яркая, нету освещения, соответственно тот элемент сущности который ко мне ближе никак не отличить от того, что дальше. Не подскажешь как это исправить? Может освещение нужно включить или шейдер какой?
 
Сверху