快速回答:对于那些谁达到通过谷歌这个网页寻找 解决同样的问题,尝试 这种速战速决(由戈兹贝达建议) - 添加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