2009-08-21 60 views
1

快速回答:對於那些誰達到通過谷歌這個網頁尋找 解決同樣的問題,嘗試 這種速戰速決(由戈茲貝達建議) - 添加D3DCREATE_FPU_PRESERVE到您的CreateDevice() 調用中的 行爲標誌。這清理了我!DirectX的Firefox插件渲染的人工

我創建了一個基於DirectX 9的NPAPI插件。它似乎在Chrome和Opera中運行良好,但在Firefox中我得到了奇怪的渲染工件。在初始化DirectX時(不需要渲染工件就可以完成渲染),所有或部分Firefox用戶界面將變黑。調整窗口大小(IE:啓動重繪)清除了工件,並且插件似乎在該點上正常工作,但這顯然不是一個理想的「特徵」。我發現網上有幾個人提到了這個問題,大多數人聲稱它是從Firefox 3開始的。只有one post提到了任何解決方案,但作者似乎並不熱衷於透露如何。

是否有人熟悉這個問題和可能的解決方案?從鏈接的帖子看來,它似乎與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); 
+0

你想給我們看你的DX初始化代碼嗎? – Goz 2009-08-24 07:46:35

+0

希望授予。我早就這麼做了,但我想清理並仔細檢查一些事情。希望這可以幫助! – Toji 2009-08-24 13:31:23

回答

2

我能想到把我的頭頂部設置「D3DCREATE_NOWINDOWCHANGES」唯一標誌行爲在設備上創建。

編輯1: 您可以嘗試將backbufferwidth和height設置爲0,並讓它從窗口繼承信息。

也可能值得嘗試設置D3DCREATE_FPU_PRESERVE標誌和D3DCREATE_MULTITHREADED。

+0

不錯的猜測,但這似乎沒有任何區別。恥辱,我希望它會! ( – Toji 2009-08-24 13:21:47

+0

)令人吃驚的是,D3DCREATE_FPU_PRESERVE做到了!哇!這實際上表明Firefox中存在一個問題,但至少這提供了一個解決方法,謝謝謝謝謝謝,謝謝!我從來沒有想過要自己嘗試! – Toji 2009-08-24 14:57:16

+0

It我突然意識到,Firefox可能期待某個FPU prceision,並且D3D在FPU精度下玩得相當詭異 很高興你被排序:) – Goz 2009-08-24 15:05:12