Пропадает текстуры HUD'a

Версия Minecraft
1.11.2
1,015
9
102
Сделал я себе HUD в RenderGameOverlayEvent.Post. Всё рендриться, но когда я беру вещь в руки, то внизу, как всегда, появляется его название, и в этот момент HUD не рендрится. Как это исправить? И еще вопрос, вот я по включал всё нужное в openGL перед рендером HUD'a:
Код:
       GlStateManager.enableAlpha();
        GlStateManager.enableBlend();
        GlStateManager.alphaFunc(GL_GREATER, 0.1f);
        GlStateManager.color(1,1,1,0.75f);
        GlStateManager.blendFunc(GL_DST_COLOR, GL_ONE_MINUS_SRC_COLOR);
И из-за этого другие элементы в игре рисуются не как раньше. Есть ли простой способ вернуть состояние openGL до включение всего этого? Я ж не знаю как до этого всё стояло
 
5,018
47
783
Скорее всего это как то так происходит - ты рендеришь тем же эвентом, что и название на экране, и в момент срабатывания ванильного, он как бы забивает на твой худ. Для упрощения, я бы скопипастил ванильный и типо сделав свой, рендерил на экране.
 
1,015
9
102
Event Handler:
Код:
   
    final Minecraft mc = Minecraft.getMinecraft();
    final FontRenderer font = Minecraft.getMinecraft().fontRendererObj;
    final ImplantsHUD implantsHUD = new ImplantsHUD();

    @SubscribeEvent
    public void renderHUD(RenderGameOverlayEvent.Post e){
        int x = (e.getResolution().getScaledWidth()-109)/7;
        int y = (e.getResolution().getScaledHeight()-290)/2;
        GlStateManager.translate(x, y, 0);
        implantsHUD.draw(mc, font, 0);
        GlStateManager.translate(-x, -y, 0);
    }

GUI class:
Код:
public class ImplantsHUD extends Gui{

    public void draw(Minecraft mc, FontRenderer font, int voltage){
       GlStateManager.pushMatrix();
        GlStateManager.enableAlpha();
        GlStateManager.enableBlend();
        GlStateManager.alphaFunc(GL_GREATER, 0.05f);
        GlStateManager.color(1,1,1,0.75f);
        GlStateManager.blendFunc(GL_DST_COLOR, GL_ONE_MINUS_SRC_COLOR);

        mc.getTextureManager().bindTexture(new ResourceLocation("meem:textures/gui/implantshud/energybackground.png"));
        drawModalRectWithCustomSizedTexture(0, 0, 0,0,109,290,109,290);

        font.drawString("Energy", 30, -20, 1606345);
        font.drawString(voltage == 0 ? "Not charging" : voltage + " Volt", 10, 300, voltage == 0 ? 13107200 : 51200);
       GlStateManager.popMatrix();
    }
}


push и pop matrix, похоже, не работают. У меня хотбар не рендрится (независимо от текста)
293297d21db0ed18c6f72ea85b64f6c2-full.png
 
1,015
9
102
Ivasik написал(а):
Обернул в пуш и поп?

Да, вот так
Код:
    @SubscribeEvent
    public void renderHUD(RenderGameOverlayEvent e){
            GlStateManager.pushMatrix();
            int x = (e.getResolution().getScaledWidth() - 109) / 7;
            int y = (e.getResolution().getScaledHeight() - 290) / 2;
            GlStateManager.translate(x, y, 0);
            implantsHUD.draw(mc, font, 0);
            GlStateManager.popMatrix();
    }


Может с TickEvent.RenderTickEvent свой рендер можно как-нибудь замутить?
 
1,015
9
102
Dahaka написал(а):
Хотя бы посмотрел, когда вылетает RenderGameOverlayEvent. Ты рендеришь свой худ овер 10 раз за кадр. А без post - x2

Ну вот сделал так. Теперь должно 1 раз вызываться. Так и происходит, но в игре HUD вообще не рендрится
Код:
    @SubscribeEvent
    public void renderHUD(RenderGameOverlayEvent.Post e){
        if (e.getType() == RenderGameOverlayEvent.ElementType.HOTBAR) {
            GlStateManager.pushMatrix();
            int x = (e.getResolution().getScaledWidth() - 109) / 7;
            int y = (e.getResolution().getScaledHeight() - 290) / 2;
            GlStateManager.translate(x, y, 0);
            implantsHUD.draw(mc, font, 0);
            GlStateManager.popMatrix();
        }
    }
 
1,015
9
102
Тааак, мой рандомизатор кода в голове написал вот это:
Код:
   @SubscribeEvent(priority= EventPriority.NORMAL)
    public void renderHUD(RenderGameOverlayEvent.Post e){

        GlStateManager.pushMatrix();
        GlStateManager.pushAttrib();
        int x = (e.getResolution().getScaledWidth() - 109) / 7;
        int y = (e.getResolution().getScaledHeight() - 290) / 2;
        GlStateManager.translate(x, y, 0);
        GlStateManager.enableAlpha();
        GlStateManager.enableBlend();
        GlStateManager.alphaFunc(GL_GREATER, 0.05f);
        GlStateManager.color(1,1,1,0.75f);
        GlStateManager.blendFunc(GL_DST_COLOR, GL_ONE_MINUS_SRC_COLOR);

        mc.getTextureManager().bindTexture(new ResourceLocation("meem:textures/gui/implantshud/energybackground.png"));
        drawModalRectWithCustomSizedTexture(0, 0, 0,0,109,290,109,290);

        font.drawString("Energy", 30, -20, 1606345);
        font.drawString("Not charging", 10, 300, 13107200);
        
        GlStateManager.popAttrib();
        GlStateManager.popMatrix();
    }

И теперь HUD не исчезает при выводе имени предмета над хотбаром. Но зато у HUD'a и курсора нет прозрачности и хотбар не отрисовывается


Кароч я сделал свой рендер с помощью TickEvent.RenderTickEvent:s
 
Сверху