lwjgl:必须在每个游戏循环中重新创建“True Type Font”或Slick-Util不会渲染文本

时间:2015-01-02 21:07:35

标签: java opengl lwjgl

我用它来启动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()时,文本绘图开始完美运行,但之后我没有绘制纹理。那么如何才能绘制我的纹理和文字呢?

PS:

我启用了Alpha混合:

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

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

1 个答案:

答案 0 :(得分:1)

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