Pregunta

RESPUESTA RÁPIDA:Para aquellos de ustedes que llegar a esta página a través de Google buscando una solución para el mismo problema, intente esta solución rápida (sugerido por Goz) - Agregar D3DCREATE_FPU_PRESERVE a la los indicadores de comportamiento en su CreateDevice() de la llamada.Eso lo aclaró para mí!

Estoy creando una DirectX 9 basada en NPAPI plugin.Parece estar funcionando bien en Chrome y Opera, pero en Firefox me extraños artefactos de representación.Después de la inicialización de DirectX (no de representación debe ser hecho por el artefacto a aparecer), la totalidad o partes de la interfaz de usuario de Firefox se vuelve negro.Cambiar el tamaño de la ventana (es decir:Iniciar un repintado) elimina los artefactos y el plugin parece funcionar correctamente en ese punto, pero esto obviamente no es deseable una "característica".He encontrado que varios otros en línea se han mencionado este tema, afirmando que comenzó con Firefox 3.Sólo un post menciona que se encontrara una solución, pero el autor no parece interesado en la divulgación de cómo.

Es cualquiera que esté familiarizado con este problema y una posible solución?Desde el post vinculado parece estar relacionado con la forma DX es inicializado, pero aún tengo que encontrar una combinación que evita el problema.

Este es el DX código de Inicialización que estoy usando (Manejo de Errores eliminados para mayor claridad):

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

Solución

La única cosa que puedo pensar en la parte superior de mi cabeza está marcando el "D3DCREATE_NOWINDOWCHANGES" bandera comportamiento en la creación de dispositivos.

Edit1: Usted podría intentar establecer backbufferwidth y altura a 0 y dejar que heredan la información de la ventana.

También podría ser vale la pena probar el establecimiento del indicador D3DCREATE_FPU_PRESERVE y D3DCREATE_MULTITHREADED.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top