Использование фреймбуфера как посредника текстуры для модели

Версия Minecraft
1.12.2
API
Forge
7,099
324
1,510
У меня есть рендер предмета(TileEntityItemStackRenderer), который выглядит примерно так:
Java:
mc.getTextureManager().bindTexture(new ResourceLocation(<some texture>)); //бинд текстуры модели
GlStateManager.translate(0, 1, 1); //коррекция позиции модели
renderSome(); //рендер модели
Результат:
1606227547082.png
Я пытаюсь сделать следующее:
Перенести текстуру в свой фреймбуфер и использовать этот фреймбуфер вместо текстуры.
Попытка сделать это: github.com/EndersMagic/ItemBookRenderer.java#L177
Java:
int current = GL11.glGetInteger(GL11.GL_TEXTURE_BINDING_2D); // в 1.12 нужно сохранять текстур атлас

framebuffer().bindFramebuffer(true);//типо, рендер текстуры во фреймбуффер
{
    //pushInentityRendering();

    //GL11.glBindTexture(GL_TEXTURE_2D, 0); // для теста попробовал залить все зеленым - результат тот же
    //GL11.glColor4f(0f, 1f, 0f, 1f);
    mc.getTextureManager().bindTexture(new ResourceLocation(EM.ID, "textures/models/book/em_book.png"));
    Tessellator tessellator = Tessellator.getInstance();
    BufferBuilder buffer = tessellator.getBuffer();
    buffer.begin(GL_QUADS, DefaultVertexFormats.POSITION_TEX);
    //рисуем текстуру на весь фреймбуфер
    buffer.pos(0, 0, 0).tex(0, 0).endVertex();
    buffer.pos(0, framebuffer().framebufferHeight, 0).tex(0, 1).endVertex();
    buffer.pos(framebuffer().framebufferWidth, framebuffer().framebufferHeight, 0).tex(1, 1).endVertex();
    buffer.pos(framebuffer().framebufferWidth, 0, 0).tex(1, 0).endVertex();
    tessellator.draw();

    //popInentityRendering();

}
framebuffer().unbindFramebuffer();

mc.getFramebuffer().bindFramebuffer(true);
GlStateManager.pushMatrix();
{
    framebuffer().bindFramebufferTexture();//рендер модели и спользованием фреймбуфера вместо обычной текстуры
    GlStateManager.translate(0, 1, 1);
    render(0F, 0F, animationListing, animationOpening, 0F, 1F / 16F);
}
GlStateManager.popMatrix();

framebuffer().framebufferClear(); //очистка после кадра
mc.getFramebuffer().bindFramebuffer(true);
GL11.glBindTexture(GL_TEXTURE_2D, current);
Результат выглядит так:
Ожидается, что результата будет таким же как без фреймбуфера.
Что я делаю не так?
 
Последнее редактирование:
Сверху