不支持TrueTypeFont.drawString()

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不支持TrueTypeFont.drawString()相关的知识,希望对你有一定的参考价值。

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

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)

这是我的Gui班:

package guis;

import java.awt.Font;

import org.newdawn.slick.TrueTypeFont;

public class Gui {

    private TrueTypeFont font;
    private Font awtFont;

    public Gui() {
        this.awtFont = new Font("Times New Roman", Font.BOLD, 24);
        this.font = new TrueTypeFont(awtFont, false);
    }

    public void drawString(int x, int y, String text) {
        font.drawString(x, y, text);
    }

}

为什么会出现此错误?

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

答案

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

另一答案

这里的问题可能是你做的事情

    public Gui theGui = new Gui();

在我的主要课堂上我猜。现在,当你这样做时,会调用构造函数,当你在那里创建TrueTypeFont时,还没有OpenGL上下文,因为主类也只是被初始化,因此绘图失败,因为它没有OpenGL上下文。

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

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

以上是关于不支持TrueTypeFont.drawString()的主要内容,如果未能解决你的问题,请参考以下文章

为啥我配置的PHP5不支持MySQL

为啥chrome还不支持断点续传

不支持的硬件是啥情况

不支持的 NSSortDescriptor(不支持比较器块)

javascript对象不支持的属性或方法

安装win11时遇到不支持处理器的情况?如何解决?