1

我正在尝试在 OpenGL 应用程序中制作我的自定义 GUI。我想使用 TextRenderer 类为我呈现文本。但是当我使用它时,我注意到一个奇怪的行为。该应用程序平稳运行大约一两分钟,然后开始滞后并且实际上无法使用。我发现这只有在我将 TextRenderer 放置到位时才会发生。所以这一定是我使用TextRenderer的方式。我查看了我的代码,查看了它的代码,并没有发现任何明显的东西。

我的架构是这样的:

class BaseUIElement
{
    protected TextRenderer textRenderer;

    //something something

    public BaseUIElement ()
    {
        //something something

        this.textRenderer = new TextRenderer(new Font("SansSerif", Font.BOLD, 16) );
    }

    public final void Render( GL2 gl)
    {
        //setting ortho projection, binding textures for menu and stuff

        this.drawContent();

        //restoring OGL states to before
    }

    protected void drawContent()
    {
        //box itself drawing magics

        textRenderer.beginRendering(...);            

        this.textRenderer.setColor(...);

         for (String line : textLines) 
         {
             this.textRenderer.draw( ... );
         }

         this.textRenderer.endRendering();
    }

    public void destroy()
    {
        //free my stuff

        this.textRenderer.dispose();
    }
}

我还使用文本渲染器的属性来确定文本对齐框的大小和内容,但我认为这很相关。您最有可能指出的一件事是,我不应该在每次调用 OpenGL 显示循环时都构造 UIElemetn。但如果这是问题所在,我希望应用程序从一开始就运行缓慢。在完成每个 UI 对象之后,我确实调用了 destroy(),因此 TextRenderer 应该每次都释放资源。我没有看内存使用情况,并没有什么奇怪的。堆大小在整个过程中基本保持不变。任何线索我应该看看或可能是什么问题?我会做更多,但我不确定如何调试这种行为。我很乐意提供任何建议。:)

4

0 回答 0