artefatos de renderização DirectX Firefox Plugin
Pergunta
RESPOSTA RÁPIDA : Para aqueles de vocês que alcançar esta página através do Google procurando uma solução para o mesmo problema, tente esta solução rápida (sugerido por Goz) - Adicionar D3DCREATE_FPU_PRESERVE para o sinalizadores de comportamento em seu CreateDevice () ligar. Que limpou-lo para mim!
Estou criando um plugin NPAPI baseado em 9 DirectX. Parece estar funcionando bem no Chrome e Opera, mas no Firefox eu recebo problemas de renderização estranhos. Após a inicialização DirectX (sem renderização precisa ser feito para o artefato para aparecer) a totalidade ou partes da interface do usuário Firefox vai ficar preta. Redimensionar a janela (IE: Iniciando uma repaint) apura-se os artefatos eo plugin parece funcionar corretamente nesse ponto, mas isso não é, obviamente, um "recurso" desejável. Eu descobri que várias outras pessoas online têm mencionado esta questão, a maioria alegando que ele começou com o Firefox 3. Só um posto menciona qualquer ser solução encontrada, mas o autor não parece que desejam na divulgação como.
Tem alguém familiarizado com este problema e uma solução possível? Desde o pós ligada ao que parece estar relacionado com a forma como DX é inicializado, mas eu ainda tenho que encontrar uma combinação que impede a questão.
Este é o código DX Inicialização Eu estou usando (manipulação de erro removido para maior clareza):
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 );
Solução
A única coisa que eu posso pensar em cima da minha cabeça está definindo o "D3DCREATE_NOWINDOWCHANGES" bandeira comportamento na criação de dispositivo.
Edit1: Você pode tentar definir backbufferwidth e altura para 0 e deixá-lo herdar a informação a partir da janela.
Pode ser também vale a pena definindo o sinalizador D3DCREATE_FPU_PRESERVE e D3DCREATE_MULTITHREADED.
tentando