如何使用3.2或更高版本在LWJGL中显示文本

时间:2014-06-01 04:29:43

标签: java opengl lwjgl slick2d

我一直在使用lwjgl wiki来了解如何使用该库,并且我已经使用以下内容设置LWJGL(根据this tutorial):

PixelFormat pixelFormat = new PixelFormat();
ContextAttribs contextAttributes = new ContextAttribs(3, 2)
                                       .withForwardCompatible(true)
                                       .withProfileCore(true);
Display.setTitle("Title");
try
{
    Display.setFullscreen(true);
    Display.setVSyncEnabled(true);
    Display.create(pixelFormat, contextAttributes);
}
catch(LWJGLException e)
{
    e.printStackTrace();
}

glViewport(0, 0, sizeX, sizeY);
glClearColor(0, 0, 0, 1);

Another tutorial解释了如何绘制文字。但是,不推荐使用TrueTypeFont,因此我将其替换为现在标准的UnicodeFont。我初始化并像这样使用它:

UnicodeFont font = null;
try
{
    font = new UnicodeFont(Font.createFont(Font.TRUETYPE_FONT,
                              new File("path/to/font.ttf")).deriveFont(24)));
}
catch (FontFormatException | IOException e)
{
    e.printStackTrace();
}

while(true)
{
    glClear(GL_COLOR_BUFFER_BIT);
    font.drawString(50.0f, 50.0f, "Hi there.",
                           new Color(1.0f, 1.0f, 1.0f, 1.0f));
}

这会产生以下错误:

Exception in thread "main" java.lang.IllegalStateException: Function is not supported
at org.lwjgl.BufferChecks.checkFunctionAddress(BufferChecks.java:58)
at org.lwjgl.opengl.GL11.glColor4f(GL11.java:881)
at org.newdawn.slick.opengl.renderer.ImmediateModeOGLRenderer.glColor4f(ImmediateModeOGLRenderer.java:119)
at org.newdawn.slick.Color.bind(Color.java:180)
at org.newdawn.slick.TrueTypeFont.drawString(TrueTypeFont.java:367)
at org.newdawn.slick.TrueTypeFont.drawString(TrueTypeFont.java:359)

在调用drawString的行。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您正在创建一个OpenGL 3.2向前兼容的上下文,但显然字体渲染器正在使用立即模式渲染,该渲染从该版本的OpenGL中删除。创建兼容性上下文或切换到其他渲染字体的方法。