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 );
Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top