1

OpenGL アプリケーション内でカスタム GUI を作成しようとしています。TextRenderer クラスを使用してテキストをレンダリングしたいと思います。しかし、使ってみると、奇妙な動作に気づきます。アプリケーションは約1〜2分間スムーズに実行され、その後遅れ始め、実際には使用できなくなります. これは、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();
    }
}

また、テキストレンダラーのプロパティを使用して、テキストの配置ボックスのサイズなどを決定しましたが、関連性のある点は薄いです。おそらく指摘されることの 1 つは、OpenGL 表示ループの呼び出しごとに UIElemetn を構築するべきではなかったということです。しかし、それが問題だった場合、最初からアプリの動作が遅くなると思います。そして、各 UI オブジェクトの処理が終わったら destroy() を呼び出します。そのため、TextRenderer は毎回リソースを解放する必要があります。私はメモリ使用量を見ていませんでしたが、それについて奇妙なことは何もありません。ヒープサイズは基本的にずっと同じままです。私が見なければならないもの、または何が問題なのか、手がかりはありますか? もっとやりたいのですが、この動作をデバッグする方法がわかりません。アドバイスをいただければ幸いです。:)

4

0 に答える 0