БЫСТРЫЙ ОТВЕТ : Для тех из вас, кто заходит на эту страницу через Google, ищет
решение той же проблемы, попробуйте
это быстрое решение (предложено Гозом) -
Добавьте D3DCREATE_FPU_PRESERVE к
флаги поведения на вашем CreateDevice ()
вызов. Это прояснило это для меня!
Я создаю подключаемый модуль NPAPI на основе DirectX 9. Похоже, что он хорошо работает в 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 );