java - lwjgl:必须在每个游戏循环中重新创建 `True Type Font`,否则 Slick-Util 将不会渲染文本

标签 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 awtFont = new Font(font, i, size);
return new TrueTypeFont(awtFont, false);

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

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

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);

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

最佳答案

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

关于java - lwjgl:必须在每个游戏循环中重新创建 `True Type Font`,否则 Slick-Util 将不会渲染文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27748564/

相关文章:

java - 首先 .put() 出现 BufferOverFlowException

java - 游戏崩溃并回调失败,因为闭包实例已被垃圾收集

c# - 如何处理具有动态默认值的属性

c++ - OpenGL 错误 1282 与 glEndList()

java - 在这种情况下是否足够 volatile ?

objective-c - 在 OpenGL 中显示 YUV

OpenGL 从未绑定(bind)的纹理单元读取

java - Eclipse 无法加载 liblwjgl64.so

java - 正则表达式匹配文件版本模式

java - Retrofit 2 展开信封错误