我用它来启动 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/