快速解答:对于那些谁通过谷歌寻找访问此页   同样的问题的解决方案,尝试   这种快速修复(按戈兹贝达建议) -   添加的 D3DCREATE_FPU_PRESERVE 以所述   您CreateDevice的行为的标志()   呼叫。这清除它适合我!

我创建一个基于9-的DirectX NPAPI插件。这似乎在Chrome和Opera运作良好,但在Firefox中得到奇怪的渲染技术。在初始化的DirectX(没有呈现需要做的神器出现),Firefox的用户界面的全部或部分将变成黑色。调整窗口(IE:启动重绘)清除了文物和插件似乎在这一点上正常工作,但这显然不是一个理想的“功能”。我发现,其他几个人在网上提到这个问题,大多数声称它开始与Firefox 3只的一个帖子提到的任何解决方案被发现,但作者似乎并不热衷于泄露如何。

是任何人都熟悉这个问题,一个可能的解决方案?从链接后它似乎是相关的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 );
有帮助吗?

解决方案

我能想到把我的头顶部的唯一的事情就是设置“D3DCREATE_NOWINDOWCHANGES”的行为标志的设备创建。

<强> EDIT1: 你可以尝试设置backbufferwidth和高度为0,让它继承的窗口中的信息。

也可能是值得尝试设置D3DCREATE_FPU_PRESERVE标志和D3DCREATE_MULTITHREADED。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top