OpenGLパイプラインは、Oracle Solaris、LinuxおよびWindowsで使用できます。この代替パイプラインでは、VolatileImage
、BufferStrategy
APIで作成されたバック・バッファ、および画面へのレンダリング時に、ハードウェア高速化されたクロス・プラットフォームのOpenGL APIが使用されます。
このパイプラインはデフォルト(X11またはGDI/DirectDraw)のパイプラインに比べ、特定のアプリケーションでパフォーマンス上の大きな利点を提供できます。アルファ合成、アンチエイリアス、変換などのレンダリング操作を大量に使用するアプリケーションでは、このパイプラインを有効にすることを検討してください。
OpenGLパイプラインで高速化されるJava 2D操作の完全な一覧については、記事「Behind the Graphics2D: The OpenGL-based Pipeline」を参照してください。
OpenGLパイプラインの問題のトラブルシューティングを行うユースケースを次に示します
現時点では、OpenGLパイプラインはデフォルトで無効になっています。OpenGLパイプラインの有効化を試みるには、次のオプションをJVMに指定します。
-Dsun.java2d.opengl=true
OpenGLパイプラインが特定のスクリーンに対して正常に初期化されたかどうかに関する、詳細なコンソール出力を受け取るには、オプションをTrueに設定します(大文字「T」に注意)。
ハードウェアまたはドライバが最小要件を満たしていなければ、OpenGLパイプラインは有効にされません。なんらかの理由で次の要件のいずれかが満たされない場合、Java 2Dはフォール・バックしてデフォルト・パイプライン(Oracle Solaris/LinuxではX11、WindowsではGDI/DirectDraw)を使用するため、アプリケーションは正しく動作し続けますが、OpenGLの高速化は失われます。
Oracle SolarisおよびLinuxオペレーティング・システムの最低要件を次に示します。
ハードウェア高速化のOpenGL/GLXライブラリがインストールされ、適切に構成されている
OpenGLのバージョンが1.2以降
GLXのバージョンが1.3以降
使用可能な深度バッファ付きの、少なくとも1つのトゥルーカラー・ビジュアル
Windows OSの最小要件は、次のとおりです。
拡張WGL_ARB_pbuffer
、WGL_ARB_render_texture
、およびWGL_ARB_pixel_format
をサポートするハードウェア高速化ドライバ
OpenGLのバージョンが1.2以降
使用可能な深度バッファ付きの、少なくとも1つのピクセル形式
前述したように、特定のマシン上でさまざまな理由でOpenGLパイプラインが有効にされない場合があります。たとえば、ドライバが正しくインストールされていない可能性や、報告されたバージョン番号が不十分である可能性があります。あるいは、マシンに搭載されている古いグラフィックス・カードがOpenGLの適切なバージョンや拡張をサポートしていない可能性もあります。
Java SE 6以降のリリースでは、例11-2および例11-3に示すように、J2D_TRACE_LEVEL
環境変数を使用してOpenGLベースのJava 2Dパイプラインの起動手順に関する詳細情報を取得できます。
例11-2 WindowsでのJ2D_TRACE_LEVEL環境変数の設定
# set J2D_TRACE_LEVEL=4 # java -Dsun.java2d.opengl=True YourApp
例11-3 SolarisおよびLinuxでのJ2D_TRACE_LEVEL環境変数の設定
# export J2D_TRACE_LEVEL=4 # java -Dsun.java2d.opengl=True YourApp
その出力は、プラットフォームや取り付けられたグラフィックス・ハードウェアに応じて異なりますが、OpenGLパイプラインがユーザーの構成で正常に有効にされない理由に関する何らかの洞察を提供してくれます。
注: この出力は特に、SunのJava 2Dチーム宛のバグ・レポートを提出する際に役立ちます(バグ・レポートについては後述)。 |
OpenGLパイプラインはベースとなるグラフィックス・ハードウェアやドライバに非常に強く依存しているため、レンダリングやパフォーマンスの問題の原因がJava 2D、OpenGLドライバのどちらなのかを判定しかねる場合があります。
Java SE 6リリースでのOpenGLパイプラインの新機能の1つは、VolatileImage
使用時のレンダリング・パフォーマンスの改善とVRAM消費量の低減を図るGL_EXT_framebuffer_object
拡張の使用です。この「FBO」コード・パスは、OpenGLパイプラインが有効なときにデフォルトで有効になりますが、それは、グラフィックス・ハードウェアとドライバがこのOpenGL拡張をサポートしている場合に限られます。この拡張は一般に、Nvidia GeForce/Quadro FXシリーズ以降およびATI Radeon 9500以降で使用できます。「FBO」コード・パスがアプリケーションの問題の原因となっている疑いがある場合、次のシステム・プロパティを設定してそれを無効にすることができます。
-Dsun.java2d.opengl.fbobject=false
このプロパティが設定されると、Java 2Dは古いpbuffer-based
コード・パスにフォール・バックします。
特定のJava 2D操作で得られる視覚的な結果が、OpenGLパイプラインを有効にしたときとしなかったときで異なる場合、それはおそらく、グラフィックス・ドライバのバグを示しています。同様に、OpenGLパイプラインを有効にしたときに、しなかった場合よりもJava 2Dレンダリングのパフォーマンスが大幅に悪化する場合、その原因はおそらくドライバまたはハードウェアの問題です。
どちらの場合も、通常のバグ報告チャネルを通じて詳細なバグ・レポートを提出してください。「バグ・レポートの提出」を参照してください。バグ・レポートの提出時にはできるだけ詳しく記述し、必ず次の情報を含めてください。
オペレーティング・システム(Ubuntu Linux 6.06、Windows XP SP2など)
グラフィックス・ハードウェアの製造元とデバイスの名前(Nvidia GeForce 2 MX 440など)
ドライバの正確なバージョン(ATI Catalyst 6.8、Nvidia 91.33など)
J2D_TRACE_LEVEL=4
をコマンド行に指定したときの出力(前のセクションで説明)
Oracle SolarisまたはLinuxの場合は、glxinfoコマンドの出力