schnelle Antwort: Für diejenigen von Ihnen, die diese Seite über Google für eine Lösung für das gleiche Problem suchen erreichen, versuchen diese schnelle Lösung (von Goz vorgeschlagen) - D3DCREATE_FPU_PRESERVE hinzufügen zu den Verhaltensflags auf Ihrem CreateDevice() Aufruf. Das hat es für mich geklärt!DirectX Firefox Plugin Rendering-Artefakte
Ich erstelle ein DirectX 9-basiertes NPAPI-Plugin. Es scheint in Chrome und Opera gut zu funktionieren, aber in Firefox bekomme ich seltsame Rendering-Artefakte. Nach der Initialisierung von DirectX (es muss kein Rendering durchgeführt werden, damit das Artefakt angezeigt wird) werden alle oder Teile der Firefox-Benutzeroberfläche schwarz. Die Größenänderung des Fensters (IE: Repaint initiieren) löscht die Artefakte und das Plugin scheint zu diesem Zeitpunkt richtig zu funktionieren, aber das ist offensichtlich kein wünschenswertes "Feature". Ich habe festgestellt, dass mehrere andere online dieses Thema erwähnt haben, die meisten behaupten, dass es mit Firefox 3 begann. Nur one post erwähnt, dass irgendeine Lösung gefunden wird, aber der Autor scheint nicht daran interessiert zu sein, wie.
Kennt jemand dieses Problem und eine mögliche Lösung? Von dem verlinkten Post scheint es mit der Art und Weise, wie DX initialisiert wird, in Verbindung zu stehen, aber ich muss noch eine Kombination finden, die das Problem verhindert.
Dies ist der DX-Initialisierung Code Ich verwende (Fehler aus Gründen der Klarheit entfernt Abwicklung):
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);
Möchten Sie uns Ihren DX-Initialisierungscode zeigen? – Goz
Wunsch gewährt. Ich hätte das früher getan, aber ich wollte aufräumen und ein paar Dinge überprüfen. Hoffe das hilft! – Toji