Java 2D™ テクノロジのシステムプロパティー

このドキュメントでは、2D ペインティングシステムの動作方法をカスタマイズするために使用できる、サポートされていないいくつかのプロパティーについて説明します。これらのプロパティーは、パフォーマンスの向上、不適切なレンダリングの修正、または特定の構成下でのシステムクラッシュの回避を目的として使用されることもあります。たとえば、不良な DirectDraw または Direct3D ドライバを搭載した Microsoft Windows コンピュータの小規模なセットでハードウェア高速化レンダリングを使用すると、システムクラッシュが発生する可能性があります。このような場合、それらのコンピュータでは 2D プロパティーを使って指定し、Java 2D システムが DirectDraw または Direct3D を使用しないようにできます。


警告: これらのプロパティーを使用するときは注意が必要です。プロパティーの中には、実用的な理由でサポートされないものがいくつかあります。たとえば、ドライバが不安定なためにデフォルトでいくつかの動作が無効になっている場合、このような動作を有効にすると、一部の構成でシステムが不安定になることがあります。

これらのプロパティーは、実装に固有の動作を有効にしたり無効にしたりすることを唯一の目的としているため、通知なしに変更または廃止されることがあります。また、一部のプロパティーは、ドキュメントに記載された特定の製品リリースでしか動作しないこともあります。

2D プロパティーには、接頭辞 sun.java2d. が付きます。2D プロパティーを指定する場合は、コマンド行フラグを使用することも、_JAVA_OPTIONS 環境変数を使用することもできます。たとえば次のように、アプリケーションの実行時に 2D trace プロパティーを指定できます。

java -Dsun.java2d.trace=log SomeApp
あるいは次のように、アプリケーションの実行前に _JAVA_OPTIONS を設定してプロパティーを指定することもできます。
export _JAVA_OPTIONS='-Dsun.java2d.trace=log' (UNIX bash shell)
java SomeApp

一部のシステムプロパティーは、環境変数を使っても設定できます。たとえば、d3d プロパティーには同等の環境変数 J2D_D3D があります。プロパティーの説明では、同等の環境変数がある場合はそれも示します。


注: プロパティーの説明で使用される用語については、「High Performance Graphics」ホワイトペーパーを参照してください。

このドキュメントでは、次のプロパティーについて説明します。


すべてのプラットフォームに共通のシステムプロパティー

opengl

使用目的: OpenGL ベースのパイプラインを有効にして、ハードウェアの高速化を図ります。
導入されたシステム: J2SE 5.0 Beta 1 (Solaris/Linux)、J2SE 5.0 Beta 2 (Microsoft Windows)
デフォルト値: false
使用方法: OpenGL ベースのパイプラインを通知なしで有効にするには、このプロパティーを true に設定します。

-Dsun.java2d.opengl=true

OpenGL ベースのパイプラインが特定のスクリーンに対して正常に初期化されたかどうかに関する、コンソールへの詳細な出力を行うには、大文字の T を使用して、このプロパティーを True に設定します。

-Dsun.java2d.opengl=True 

Java 2D 用の OpenGL ベースのパイプラインは、Solaris/Linux プラットフォームの J2SE 5.0 Beta 1 と Microsoft Windows プラットフォームの J2SE 5.0 Beta 2 に導入されました。現時点では、このパイプラインはデフォルトで無効になっています。このパイプラインにより、テキスト、イメージ、ライン、塗りつぶしのプリミティブなどの単純なレンダリング操作だけでなく、複雑な変換、ペイント、合成およびクリッピングなどの操作にもハードウェアの高速化が適用されます。

関連情報: Java 2 Platform Standard Edition 5.0 の Java 2D の新機能OpenGL に関するセクション。


trace

使用目的: グラフィックスのパフォーマンスが期待よりも低下している原因を調べます。
導入されたシステム: 1.4
使用方法: アプリケーションのパフォーマンスが期待よりも低下している場合は、trace 実行時フラグを使用するとその問題の原因を調べることができます。このフラグは、オプションのリストを使用すると指定できます。

    -Dsun.java2d.trace=[log[,timestamp]],[count],[out:<filename>],[help],[verbose]

オプションは次のとおりです。

log
各プリミティブが実行されたときにその名前を出力する
timestamp
各ログエントリの前に currentTimeMillis() を付ける
count
終了時に、使用された各プリミティブの総数を出力する
out:<filename>
出力 (ロギングや総数) を指定されたファイルに送信する
help
使用方法に関する簡単な説明を出力する
verbose
この実行用に選択されたオプションのサマリーを出力する

log オプションを使用すると、Java 実行環境によって、実行されたプリミティブの名前がほとんどの場合は次の形式で出力されます。

    <classname>.<methodname>(<src>,<composite>,<dst>)

methodname は、Graphics メソッド呼び出しの実際のレンダリング作業に使用される基本的なグラフィックス操作を表します。これらのメソッド名が必ずしも Graphics オブジェクトのメソッドに直接マップされるとはかぎりません。同様に、Graphics オブジェクトに対して行われた呼び出しの数が、実行されたプリミティブの操作の数に直接マップされるとはかぎりません。

srcdst は、操作に関係する表面またはソースデータのタイプを表します。

composite 名は、AlphaComposite クラスに含まれる名前に接尾辞「NoEa」を付けたものとかなり正確に一致し、AlphaComposite インスタンスに「特別なアルファ」属性 1.0 が設定されていることを意味します。「SrcNoEa」タイプはもっともよく使われる合成タイプであり、混合を必要としないもっとも簡単なピクセルの転送方法を表します。不透明な色やイメージがレンダリングされるときは、デフォルトの合成が「SrcOver」であっても、内部では「SrcNoEa」が頻繁に使用されます。これは、不透明なソースピクセルの場合は、それらの 2 つの操作の見分けがつかないためです。

プラットフォームのレンダリングパイプラインは、X11、GDI、DirectDraw などのプラットフォームのレンダラがアクセスできる表面に対して不透明な操作を行うために使用されることがあります。現在のところ、それらの名前は、簡略化された名前付け形式に従って、プラットフォームのレンダラを表す接頭辞と操作の名称から構成され、クラス名やオペランドタイプのリストは含みません。たとえば、「X11DrawLine」、「GDIFillOval」、「DXFillRect」となります。今後は、これらの名前はほかのプリミティブの名前と非常によく似たものになる予定です。


awt.useSystemAAFontSettings

使用目的: アンチエイリアス設定が「デスクトップの設定」として認識されているテキストをオーバーライドします。
導入されたシステム: 1.6
デフォルト値: true。
使用方法: コマンド行または Web Start の jnlp ファイルに、次の指定の値のいずれかを設定し、Swing テキストが使用するレンダリングヒントを制御します。

厳密に言えば、このフラグが Java 2D を制御するわけではありませんが、これらの値が Java 2D テキストアンチエイリアス処理レンダリングヒントの値に直接マッピングされるため、ここではそのように説明しています。

フラグが実際に行うことは、JRE がユーザーのデスクトップ設定から読み取るものを、ユーザーのデスクトップアンチエイリアス処理テキストの設定内容としてオーバーライドすることです。Swing は、Java 2D に Swing テキストをレンダリングするよう指示し、その設定に合わせます。つまり、オーバーライドすることで、Swing テキストを制御できます。これは、Metal L&F (別名 Java L&F) やネイティブ (Windows、GTK) Swing L&F の標準 Swing コンポーネントに当てはまります (JTextArea、JButton)。また、カスタムコンポーネントや、同じプロパティーを取得する L&F にも当てはまります。

このオーバーライドするデスクトップ設定の詳細については、「AWT デスクトッププロパティー」を参照してください。

このプロパティーを指定するいくつかの理由として、次のものが挙げられます。

System Property Value   | java.awt.RenderingHint value
"off"|"false"|"default" : VALUE_TEXT_ANTIALIAS_DEFAULT
"on"                    : VALUE_TEXT_ANTIALIAS_ON
"gasp"                  : VALUE_TEXT_ANTIALIAS_GASP
"lcd"|"lcd_hrgb"        : VALUE_TEXT_ANTIALIAS_LCD_HRGB
"lcd_hbgr"              : VALUE_TEXT_ANTIALIAS_LCD_HBGR
"lcd_vrgb"              : VALUE_TEXT_ANTIALIAS_LCD_VRGB
"lcd_vbgr"              : VALUE_TEXT_ANTIALIAS_LCD_VBGR

Microsoft Windows プラットフォームのシステムプロパティー

accthreshold

廃止: Java SE 6 Update 10
使用目的: VRAM バージョンのイメージが自動的に作成される前に、管理されるイメージから行われるコピー数を指定します。
導入されたシステム: 1.4.1_02
デフォルト値: 1
使用方法: イメージの初期化中に高速化処理された表面を強制的に作成するには、次のように、この値を 0 に設定します。

-Dsun.java2d.accthreshold=0

このプロパティーを使用すると、最初にいくつかのコピーが行われたあとで、イメージが VRAM にコピーされているときに、レンダリングの初期遅延を解消できます。初期遅延は、事実上イメージ作成時間へシフトされます。

この動作は、アプリケーションがイメージ管理をうまく利用できること、つまり、開始早々速度の遅いコピー処理にわずらわされ、あとになってコピーのオーバーヘッドを負うのではなく、開始時にコピーのオーバーヘッドを片付けられることがわかっている場合には有効です。


d3d

使用目的: Java 2D システムによる Direct3D の使用をオフにします。
導入されたシステム: 1.4.1_02
同等の環境変数: J2D_D3D
使用方法: バグのある Direct3D ドライバを搭載した Windows 2000 システムの小規模なサブセットで Direct3D を使用すると、システムクラッシュが発生することがあります。Direct3D の使用をオフにするには、このプロパティーを false に設定します。
-Dsun.java2d.d3d=false
引き続き問題が発生している場合は、ddoffscreen プロパティーを false に設定してみてください。それでも問題が解決されない場合は、noddraw を true に設定してみてください。

d3dtexbpp

廃止: Java SE 6 Update 10
使用目的: 管理されるイメージまたは半透明のイメージの高速化処理された表面の形式を 16 ビット (4444) にすることを指定します。これにより、VRAM とシステムメモリーを節約できますが、品質は低下します。
導入されたシステム: 1.4.1_02
デフォルト値: 32
使用方法: 4444 形式をオンにするには、このプロパティーを 16 に設定します。

-Dsun.java2d.d3dtexbpp=16

注: OpenGL パイプラインを使用している場合、d3dtexbpp プロパティーは効果がありません。

このプロパティーを 16 に設定すると、管理されるイメージ (GraphicsConfiguration.createCompatibleImage(w,h, TRANSLUCENT) で作成されたイメージ) または Toolkit.getImage でロードされた半透明なイメージの高速化処理された表面の形式が強制的に 4444 になります。同様に、これらのイメージのシステムメモリー表面も 4444 形式になります。

このオプションは、多数のイメージを VRAM に保存する場合に有効です。ただし、品質は劣化します。

このオプションは、32 ビットのテクスチャーをサポートしていないビデオボード (3dfx Voodoo3 など) を搭載したコンピュータにも有効です。Java 2D システムが 32 ビットのテクスチャーを使用する場合 (デフォルトでそうなっているとき)、32 ビットのテクスチャーをサポートしていないカードを検出すると、高速化処理された半透明のイメージのサポートが無効になります。32 ビットのテクスチャーをサポートしないビデオボードで半透明のイメージの高速化処理を行う必要がある場合は、d3dtexbpp プロパティーを 16 に設定します。


ddforcevram

廃止: Java SE 6 Update 10
使用目的: VolatileImages を VRAM に保存しておくかどうかを指定します。
導入されたシステム: 1.4.1_02
デフォルト値: 1.4 では false。J2SE 5.0 Beta 1 以降は、translaccel が true の場合は true、それ以外は false
使用方法: 通常、2D システムが DirectDraw または Direct3D パイプラインを使用している場合、ビデオメモリー内のイメージがあまりにも頻繁に読み取られる (操作にかかる負荷が大きい) ときは、そのイメージをシステムメモリー表面にパントして、速く読み取れるようにします。あとになって、ユーザーがこの表面から高速化処理された表面にふたたびコピーしていることが検出された場合、システムはそのイメージをビデオメモリーにコピーするように促します。このプロパティーを true に設定すると、パントメカニズムが無効になり、常にイメージがビデオメモリーに保存されるようになります。


注: OpenGL パイプラインを使用している場合、ddforcevram プロパティーは効果がありません。

このプロパティーは translaccel プロパティーと組み合わせて使用されることがよくありますが、単独でも使用できます。このプロパティーを true に設定する場合、5.0 リリースでは translaccel も true に設定したり、このプロパティーを単独で設定したりしてください。

-Dsun.java2d.ddforcevram=true

ddoffscreen

廃止: Java SE 6 Update 10、これには D3D の新しい実装のサポートが含まれます。sun.java2d.ddoffscreen=false の設定は、sun.java2d.d3d=false によって、それを無効にした場合とまったく同じように解釈されるようになりました。
使用目的: Swing バックバッファーなどのオフスクリーン表面に対する Java 2D システムの DirectDraw と Direct3D の使用をオフにします。
導入されたシステム: 1.4
デフォルト値: true
使用方法: このフラグを false に設定すると、DirectDraw のオフスクリーン表面の高速化処理がオフになります。


ddscale

廃止: Java SE 6 Update 10
使用目的: DirectDraw または Direct3D パイプラインを使用しているときに、ハードウェア高速化処理されたスケーリングをオンにします。
導入されたシステム: 1.2
デフォルト値: false
使用方法: このフラグを true に設定すると、DirectDraw または Direct3D パイプラインを使用している場合にハードウェア高速化処理されたスケーリングが有効になります。DirectDraw または Direct3D のハードウェアスケーリングは、既存のアプリケーションのレンダリング機能に悪影響を及ぼさないようにデフォルトで無効になっています。このようなレンダリング機能への悪影響は、ソフトウェアのスケーリング操作で使用される (最近傍の) スケーリングメソッドと、ビデオカードが使用するさまざまなスケーリングメソッドとの不整合によって発生します。アプリケーションの実行中に発生するいくつかのイベントによって、拡大縮小されたイメージは部分的にハードウェアのスケーリング操作でレンダリングされたり、ソフトウェアのスケーリング操作でレンダリングされたりするため、表示の整合性が保たれないことがあります。現時点では、ddscale フラグを true に設定することにより、高速化処理を有効にできます。


注: OpenGL パイプラインを使用している場合、ddscale プロパティーは効果がありません。

関連情報: 「High Performance Graphics」ホワイトペーパー


noddraw

廃止: Java SE 6 Update 10、これには D3D の新しい実装のサポートが含まれます。sun.java2d.noddraw=true の設定は、sun.java2d.d3d=false によって、それを無効にした場合とまったく同じように解釈されるようになりました。
使用目的: Java 2D システムによる DirectDraw と Direct3D の使用を完全にオフにします。
導入されたシステム: 1.2
デフォルト値: false
使用方法: このフラグを true に設定すると、DirectDraw の使用がオフになり、Win32 のレンダリングに関する問題が解消されることがあります。


translaccel

廃止: Java SE 6 Update 10
使用目的: DirectDraw または Direct3D パイプラインを使用しているときに、半透明のイメージをハードウェア高速化処理するかどうかを指定します。
導入されたシステム: 1.4.1_02
デフォルト値: false
使用方法: DirectDraw または Direct3D パイプラインを使用しているときは、高速化処理される半透明のイメージに対して translaccelddforcevram を true に設定する必要があります。


注: OpenGL パイプラインを使用している場合、translaccel プロパティーは効果がありません。

1.4 と 5.0 で半透明のイメージの高速化処理をオンにする場合

-Dsun.java2d.translaccel=true
-Dsun.java2d.ddforcevram=true //unnecessary as of 1.5 Beta 1

これらのプロパティーがどちらも true である場合、Java 2D システムは半透明のイメージを VRAM に保存し、Direct3D を使ってそれらのイメージを画面または VolatileImage にレンダリング (合成) しようとします。平行移動変換のみがサポートされています (回転や拡大縮小などは行えません)。5.0 よりも前で高速化処理を行うには、次のどちらかの方法で半透明なイメージを作成する必要があります。

5.0 以降では、BufferedImage コンストラクタを使って作成された半透明なイメージも高速化処理できます。特定のデバイス上でイメージを高速化処理できるかどうかを調べるには、ImagegetCapabilities メソッド (5.0 で追加) を使って ImageCapabilities オブジェクトを取得し、isAccelerated メソッドを使ってそのオブジェクトを問い合わせることができます。管理されるイメージは、画面またはほかの高速化処理された表面に何部かコピーされたあとでのみ高速化処理されるので注意してください。

次のコードの抜粋は、高速化処理されたイメージの使用法を示しています。このコードでは、バックバッファーが VolatileImage であるものとします。さらに、BufferStrategy も使用できます。

Image translucentImage = gc.createCompatibleImage(w, h, Transparency.TRANSLUCENT);
//...
Graphics2D g2 = (Grahics2D)backBuffer.getGraphics();
g2.drawImage(translucentImage, x, y, null);

SRC_OVER 規則 (デフォルトの Graphics2D 合成規則) を持つ特別なアルファとの合成が高速化処理されるため、次のコードでは合成にハードウェアを使用できるようになります。コード:

Image translucentImage = gc.createCompatibleImage(w, h, Transparency.TRANSLUCENT);
// ...
float ea = 0.5;
Graphics2D g2 = (Grahics2D)backBuffer.getGraphics();
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, ea));
g2.drawImage(translucentImage, x, y, null);

Linux と Solaris プラットフォームのシステムプロパティー

NO_J2D_DGA

使用目的: Solaris Sparc での DGA サポートとハードウェアの高速化をオフにします。これによってレンダリング機能への悪影響が軽減することがあります。
導入されたシステム: 1.2
デフォルト値: (設定なし)
使用方法: このプロパティーは、環境変数としてのみ設定できます。つまり、同等のコマンド行フラグはありません。Solaris Sparc での DGA サポートとハードウェアの高速化をオフにするには、次の変数を定義します。
setenv NO_J2D_DGA

この変数が自動的に設定されると、ピックスマップが使用できるようになり、実質的に pmoffscreen が true に設定されます。ただし、逆の場合は当てはまりません。つまり、pmoffscreen を true に設定しても DGA は無効になりません。


J2D_PIXMAPS

使用目的: 頻繁に読み取られるイメージを保存するために 2D システムがローカル表示環境で共有メモリーピックスマップを使用するかどうかを指定します。
導入されたシステム: 1.4 Beta 3
デフォルト値: (設定なし)
使用方法: このプロパティーは、環境変数としてのみ設定できます。つまり、同等のコマンド行フラグはありません。1.4 Beta 3 以降、Java 2D はイメージの保存に標準のピックスマップを使用するようになりましたが、頻繁に読み取られるイメージの保存にはローカル表示環境の共有メモリーピックスマップを使用するように変更になりました。J2D_PIXMAPS 環境フラグを使用すると、このデフォルトの動作をオーバーライドして、強制的にどちらかのタイプのピックスマップのみが使用されるようにできます。
    setenv J2D_PIXMAPS=shared
setenv J2D_PIXMAPS=server

このフラグを shared に設定すると、ローカル表示環境で作業している場合にすべてのイメージが共有メモリーピックスマップに保存されます。これに対し、このフラグを server に設定すると、すべてのイメージが共有メモリーピックスマップではなく、標準のピックスマップに保存されます。標準のピックスマップは、デバイスドライバの指定に基づいて VRAM に保存できます。

関連情報: 「High Performance Graphics」ホワイトペーパー


xrender

使用目的: XRender ベースの Java 2D レンダリングパイプラインを最新の X11 ベースのデスクトップに対して有効にします。これによって、グラフィックスのパフォーマンスが向上します。
導入されたシステム: Java SE 7
デフォルト値: false
使用方法: パイプラインはデフォルトで無効にされていますが、コマンド行プロパティー -Dsun.java2d.xrender=true を設定して有効にできます。古い X11 構成では、XRender をサポートできないことがあります。詳細形式 -Dsun.java2d.xrender=True を使用すると、パイプラインが実際に有効にされているかどうかを示すメッセージを標準出力に出力できます。

pmoffscreen

使用目的: DGA が使用できないときに、Java 2D がデフォルトでピックスマップにイメージを保存するかどうかを指定します。
導入されたシステム: 1.4 Beta 3
デフォルト値: (設定なし)
使用方法: 1.4 Beta 3 以降、DGA が使用できないときは、ローカルまたはリモートのどちらの表示環境で作業していても、Java 2D はデフォルトでピックスマップにイメージを保存します。pmoffscreen フラグを使用すると、この動作をオーバーライドできます。

    -Dsun.java2d.pmoffscreen=true
-Dsun.java2d.pmoffscreen=false

このフラグを false に設定すると、オフスクリーンピックスマップのサポートが無効になり、レンダリングに関する問題が解決することがあります。このフラグを true に設定すると、DGA が使用できる場合でもオフスクリーンピックスマップのサポートが有効になります。

関連情報: 「High Performance Graphics」ホワイトペーパー


Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.