不支持TrueTypeFont.drawString()

时间:2017-12-16 01:19:39

标签: java opengl fonts lwjgl slick

我正在尝试将2D文本渲染实现到我的LWJGL游戏中,并且已经到处搜索了一个可行的解决方案,但仍然遇到同样的错误。我目前正在尝试关注this tutorial。这是错误:

try
{
     string source = sr.ReadToEnd(); // read the source code
     MatchCollection m0 = Regex.Matches(source, "(err")(?<td_inner>.*?)(\">)", RegexOptions.Singleline); // scrap the data you want
     foreach (Match m in m0) // loop through that data 
     { 
         string data= m.Groups["td_inner"].Value; // getting the data value
         txt_box_message.Text = data; // showing the data into a textBox
     }
} catch(Exception ex) // catch any error
{
     MessageBox.Show(ex.Message); // show that error in message box
}

这是我的Gui课程:

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:893)
    at org.newdawn.slick.opengl.renderer.ImmediateModeOGLRenderer.glColor4f(ImmediateModeOGLRenderer.java:124)
    at org.newdawn.slick.Color.bind(Color.java:182)
    at org.newdawn.slick.TrueTypeFont.drawString(TrueTypeFont.java:363)
    at org.newdawn.slick.TrueTypeFont.drawString(TrueTypeFont.java:355)
    at guis.Gui.drawString(Gui.java:23)
    at engineTester.MainGameLoop.main(MainGameLoop.java:110)

为什么会导致此错误?

编辑:关于另一个问题的答案:https://stackoverflow.com/a/26319508/5838494我已经做了这个并且它不起作用。

2 个答案:

答案 0 :(得分:1)

您需要将opengl版本设置为低于3.0,因为TrueTypeFont使用的函数已在3.x中删除。 或者你可以看一下opengl 3.x / 4.x. Opengl3.3 如果你不必支持旧的opengl版本。

答案 1 :(得分:1)

这里的问题可能就是你做了像

这样的事情
    public Gui theGui = new Gui();
我猜你在主课堂上。现在,当你这样做时,会调用构造函数,当你在那里创建TrueTypeFont时,还没有OpenGL上下文,因为主类也刚刚被初始化,因此绘图失败,因为它没有OpenGL上下文。

您可以尝试将其更改为public Gui gui;之类的声明,然后在加载应用程序时,在创建GL上下文后,为该字段分配this.gui = new Gui();

但我只能在这里猜测,因为你的问题代码不多。此代码可能存在其他问题,例如Slick库的不兼容性(您是否拥有最新版本,或者更好的版本是否与您的OpenGL版本兼容?)或类似的。