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()
没有问题。
我用它来启动 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()
没有问题。