Java 2D アプリケーションを Linux で実行すると、画面のティアリングが発生します。Windows での実行時にティアリングは発生しません。コードの分析にかなりの時間を費やしましたが、まだ原因が見つかりません。私は決して自分のコードに問題があるとは断言できませんが、問題が Linux 上の Java 2D レンダリング パイプラインにある可能性も楽しみにしています。ところで、Java 6 と Java 7 の両方でティアリングが見られることに注意してください。Java 7 で実行すると、XRender パイプラインを有効にするかどうかに関係なく、ティアリングが見られます。
もちろん、 によるダブルバッファリングを使用していBufferStrategy
ます。呼び出したときに取得するBufferStrategy
実装Frame.createBufferStrategy(2)
はjava.awt.Component$FlipSubRegionBufferStrategy
. さらに、 を呼び出すisPageFlipping()
とtrue がBufferStrategy
返され、機能を呼び出すと false が返されます。全画面排他モードで実行していませんが、実行しようとしましたが、問題は解決しませんでした。 戻ります(しかし、それは関係ないと思います)。BufferCapabilities
isFullScreenRequired()
BufferCapabilities.getFlipContents()
FlipContents.UNDEFINED
ページ フリッピングはおそらくサポートされており、BufferStrategy
(ブリッティング戦略ではなく) ページ フリッピングを取得しているため、レンダリング パイプラインがテアリングを引き起こしているとは思いません。しかし、2006 年に Chet Haase によって書かれたメーリング リスト メッセージを見つけました。これは、画面のティアリングの問題に対処するもので、次のように述べています。リフレッシュ アーティファクトにぶつかる BltBufferStrategy です。」
取得しているフリップ戦略が実際にページをめくっていないかどうかを判断するにはどうすればよいですか?
Chet はまた、「BufferStrategy を使用してフルスクリーンを実行することは、これを回避する適切な方法です。プラットフォームと状況に応じて、通常はディスプレイの垂直方向の更新と同期するフリップ戦略を提供します。引き裂かないようにしてください。」
戦略がディスプレイの垂直リフレッシュと同期しているかどうかを確認するにはどうすればよいですか?
(上記で参照した Chet Haase からの完全なメッセージについては、http://www.mail-archive.com/java2d-interest@capra.eng.sun.com/msg03743.htmlを参照してください)