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' (Solaris, Linux, or Mac OS X bash shell)
java SomeApp

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


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

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


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

opengl

使用目的: OpenGLベースのパイプラインを有効にして、ハードウェアの高速化を図ります。
導入されたシステム: 1.5 Beta 1 (Solaris/Linux)、1.5 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 SDKのJava 2Dの新機能, v1.5OpenGLに関するセクション。


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
使用目的: VolatileImageをVRAMに保存しておくかどうかを指定します。
導入されたシステム: 1.4.1_02
デフォルト値: 1.4ではfalse。1.5 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メソッドを使用して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, 2020, Oracle and/or its affiliates. All rights reserved.