0

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 が返されます。全画面排他モードで実行していませんが、実行しようとしましたが、問題は解決しませんでした。 戻ります(しかし、それは関係ないと思います)。BufferCapabilitiesisFullScreenRequired()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を参照してください)

4

2 に答える 2

0

問題は、Windows では oracle jdk を使用しており、Linux では open jdk を使用している可能性があると考えましたか?

見つけるのは簡単です。Linux マシンに oracle jdk をインストールし、oracle jre に対して実行します。

インストール方法の説明はこちら

インストールされている jre のバージョンを切り替える方法の詳細はこちら

于 2014-05-22T10:27:42.320 に答える
0

ディストリビューションによっては、多くの Linux システムが現在、デフォルトで 3D レンダリングされたデスクトップを出荷しています。オープンソース ドライバーで 3D アクセラレーションが不十分な (または不足している) グラフィックス カードの 1 つを使用している場合は、通常のデスクトップ使用の許容範囲内でデスクトップ レンダリングを取得するために、独自の 3D ドライバーをインストールする必要がある場合があります。

あなたのコードが他のプラットフォームで正しく見え、そこで見事に機能する場合は、覚えておいてください。オッズは、Linux上で正しいです。X の歴史と設計目標を考えると予想されるように、Linux にはより多くの「レンダリング アーキテクチャ」の差異があるというだけです。グラフィックス情報がタイムリーに送信されている可能性がありますが、構成パイプラインが追いつかない (そのため、少し落ちてティアリングが発生します)。

では具体的な質問へ

取得しているフリップ戦略が実際にページをめくっていないかどうかを判断するにはどうすればよいですか?

すでに呼び出したメソッドを呼び出す。

戦略がディスプレイの垂直リフレッシュと同期しているかどうかを確認するにはどうすればよいですか?

戦略の要点は、厄介な詳細を API ユーザーから隠すことなので、言うのは難しいです。私はこれらのカバーの下に飛び込むのに適した人物ではありません。しかし、私は X 側から物事をよく見ています。

あなたへの私の質問は、「この引き裂きは、あなた自身のアプリケーション以外のアプリケーションで見られますか?」

于 2011-09-20T19:27:16.883 に答える