私は Java のハードウェア アクセラレーション機能を調べるのに時間を費やしてきましたが、オンラインで直接見つけたサイトのどれも、私が持っている質問のいくつかに明確に答えていないので、まだ少し混乱しています。Java でのハードウェア アクセラレーションに関する質問は次のとおりです。
1) Eclipse バージョン 3.6.0 では、Mac OS X 用の最新の Java アップデート (1.6u10 だと思います) では、ハードウェア アクセラレーションがデフォルトで有効になっていますか? どこかで読んだ
someCanvas.getGraphicsConfiguration().getBufferCapabilities().isPageFlipping()
ハードウェア アクセラレーションが有効になっているかどうかを示すはずで、私のプログラムは、メインの Canvas インスタンスで描画用に実行すると true を返します。現在、またはデフォルトでハードウェア アクセラレーションが有効になっていない場合、有効にするにはどうすればよいですか?
2) BufferedImage と VolatileImage の違いに関するいくつかの記事をあちこちで見てきました。主に、VolatileImage はハードウェア アクセラレーションされたイメージであり、高速なコピー操作のために VRAM に格納されていると述べています。ただし、BufferedImage もハードウェア アクセラレーションであると言われている例をいくつか見つけました。BufferedImage ハードウェアも私の環境で加速されますか? 両方のタイプがハードウェア アクセラレーションされている場合、VolatileImage を使用する利点は何ですか? 両方が高速化されている場合に VolatileImage を使用する利点についての私の主な仮定は、VolatileImage がその VRAM がいつダンプされたかを検出できるということです。しかし、BufferedImage もアクセラレーションをサポートしている場合、メモリがダンプされた場合に備えて、ユーザーから隠されているだけで、同じ種類の検出が組み込まれているのではないでしょうか?
3)使用する利点はありますか
someGraphicsConfiguration.getCompatibleImage/getCompatibleVolatileImage()
とは対照的に
ImageIO.read()
チュートリアルでは、レンダリングウィンドウを適切に設定することに関するいくつかの一般的な概念について読んでいます(チュートリアル)、BufferedImageを返すと思われるgetCompatibleImageメソッドを使用して、高速描画用の「ハードウェアアクセラレーション」画像を取得します。 2 ハードウェアアクセラレーションの有無について。
4) これはハードウェア アクセラレーションが少ないですが、私が興味を持っていることです: どのグラフィックスを描画するかを注文する必要がありますか? C/C++ 経由で OpenGL を使用する場合、現在のテクスチャを切り替える必要がある回数を減らすために、一度に描画する必要があるすべての場所に同じグラフィックを描画するのが最善であることを知っています。私が読んだ限りでは、Java がこれを処理し、物事が最適な方法で描画されるようにしているように見えますが、繰り返しになりますが、このようなことを明確に言ったことはありません。
5) どの AWT/Swing クラスがハードウェア アクセラレーションをサポートしていますか? また、どのクラスを使用する必要がありますか? 現在、JFrame を拡張してウィンドウを作成するクラスを使用しており、それに Canvas を追加して、そこから BufferStrategy を作成しています。これは良い習慣ですか、それともこれを実装する必要がある他のタイプの方法はありますか?
お時間を割いていただき、誠にありがとうございます。いくつかの質問にお答えいただけるよう、明確な質問と十分な情報を提供できれば幸いです。