1

クイック アンサー: Google 経由でこのページにアクセスして同じ問題の解決策を探している方は、このクイック フィックス (Goz が提案) を試してください - CreateDevice() 呼び出しの動作フラグにD3DCREATE_FPU_PRESERVEを追加します。それは私のためにそれを片付けました!

DirectX 9 ベースの NPAPI プラグインを作成しています。Chrome と Opera では問題なく動作しているようですが、Firefox では奇妙なレンダリング アーティファクトが発生します。DirectX を初期化すると (アーティファクトを表示するためにレンダリングを行う必要はありません)、Firefox UI のすべてまたは一部が黒くなります。ウィンドウのサイズを変更すると (IE: 再描画の開始)、アーティファクトがクリアされ、プラグインはその時点で適切に動作しているように見えますが、これは明らかに望ましい「機能」ではありません。他にもオンラインでこの問題に言及している人が何人かいることがわかりました。そのほとんどが Firefox 3 から始まったと主張しています。発見された解決策について言及している投稿は 1 つだけですが、著者は方法を明らかにすることに熱心ではないようです。

この問題と可能な解決策に精通している人はいますか? リンクされた投稿から、DXの初期化方法に関連しているように見えますが、問題を防ぐ組み合わせはまだ見つかりません.

これは私が使用しているDX初期化コードです(わかりやすくするためにエラー処理を削除しました):

RECT rc;
GetClientRect(pluginHwnd, &rc);

D3DPRESENT_PARAMETERS d3d9PresentParams;
ZeroMemory(&d3d9PresentParams, sizeof(D3DPRESENT_PARAMETERS));    

d3d9PresentParams.hDeviceWindow = pluginHwnd;
d3d9PresentParams.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3d9PresentParams.Flags = D3DPRESENTFLAG_DEVICECLIP; // Failed attempt to solve FF issue
d3d9PresentParams.EnableAutoDepthStencil = FALSE; // No depth testing
d3d9PresentParams.PresentationInterval = D3DPRESENT_INTERVAL_ONE; // Use Vsync

d3d9PresentParams.MultiSampleType = D3DMULTISAMPLE_NONE; // Don't care about Multisampling
d3d9PresentParams.MultiSampleQuality = 0;

d3d9PresentParams.BackBufferCount = 1; 
d3d9PresentParams.BackBufferWidth = rc.right - rc.left; 
d3d9PresentParams.BackBufferHeight = rc.bottom - rc.top;  
d3d9PresentParams.BackBufferFormat = D3DFMT_UNKNOWN; // Use the same color format as windows 

d3d9PresentParams.Windowed = TRUE; // Explicitly windowed
d3d9PresentParams.FullScreen_RefreshRateInHz = 0;

d3d9->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, pluginHwnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3d9PresentParams, &d3d9Device );
4

1 に答える 1

2

頭の中で思いつく唯一のことは、デバイスの作成時に「D3DCREATE_NOWINDOWCHANGES」動作フラグを設定することです。

Edit1: backbufferwidth と height を 0 に設定して、ウィンドウから情報を継承させることができます。

D3DCREATE_FPU_PRESERVE フラグと D3DCREATE_MULTITHREADED を設定してみる価値があるかもしれません。

于 2009-08-24T08:11:11.103 に答える