lwjgl:必须在每个游戏循环中重新创建“True Type Font”,否则 Slick-Util 将无法呈现文本

lwjgl: Have to recreate `True Type Font` every game loop or Slick-Util will not render text

我用它来启动 openGL:

GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GL11.glOrtho(0, width, height, 0, -1, 1);
GL11.glViewport(0, 0, width, height);
GL11.glMatrixMode(GL11.GL_MODELVIEW);

我这样创建 True Type Font

Font awtFont = new Font(font, i, size);
return new TrueTypeFont(awtFont, false);

然而,绑定/取消绑定纹理会弄乱字体,每次我想绘制一些文本时都迫使我重新创建字体。我负担不起这样做,因为它会导致严重的滞后峰值。

这是我用来绘制纹理的方法:

public static void drawImage(image i, int x, int y) {
    i.bind();
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glBegin(7);
    {
        glTexCoord2f(0, 0);
        glVertex2f(x, y);

        glTexCoord2f(0, 1);
        glVertex2f(x, y + i.height);

        glTexCoord2f(1, 1);
        glVertex2f(x + i.width, y + i.height);

        glTexCoord2f(1, 0);
        glVertex2f(x + i.width, y);
    }
    glEnd();
    i.unBind();
}

当我删除 i.bind()i.unbind() 时,文本绘图开始正常工作,但后来我没有绘制纹理。那么如何绘制纹理和文字?

附言:

我启用了 alpha 混合:

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

不要禁用它,因为我要渲染的纹理需要它。

在每次调用渲染文本之前插入 TextureImpl.bindNone() 以解决问题。我仍然不确定问题出在哪里,因为我之前使用过 slick util text render 而没有使用 TextureImpl.bindNone() 没有问题。