我正在尝试在 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 应该每次都释放资源。我没有看内存使用情况,并没有什么奇怪的。堆大小在整个过程中基本保持不变。任何线索我应该看看或可能是什么问题?我会做更多,但我不确定如何调试这种行为。我很乐意提供任何建议。:)