快速回答:對於那些誰達到通過谷歌這個網頁尋找 解決同樣的問題,嘗試 這種速戰速決(由戈茲貝達建議) - 添加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);
你想給我們看你的DX初始化代碼嗎? – Goz 2009-08-24 07:46:35
希望授予。我早就這麼做了,但我想清理並仔細檢查一些事情。希望這可以幫助! – Toji 2009-08-24 13:31:23