Tengo una aplicación D3D11 y quiero agregar soporte de pantalla completa adecuado. Ahora puedo dejar que DXGI cambie mi ventana a pantalla completa por mí, y tengo la impresión de que DXGI se encargará de todo lo necesario para hacer que la cadena de intercambio se voltee hacia adelante y hacia atrás en lugar de bloquearlos.
Sin embargo, dejar que DXGI realice el cambio parece poco confiable con una configuración de monitores múltiples: las pantallas secundarias permanecen completamente en negro después del cambio la mayor parte del tiempo, sin razón aparente o patrón.
Puede tomar varias veces cambiar de un lado a otro antes de que aparezca la ventana de pantalla completa y que el resto del escritorio se muestre en las otras pantallas.
Aparentemente no estoy solo con esto, Battlefield 3 y WoW parecen tener problemas similares para mucha gente.
Ahora, la pregunta real: supongo que dado que incluso esas compañías de desarrollo de juegos AAA no pueden hacer que esto funcione, mi mayor esperanza sería realizar el cambio a pantalla completa yo mismo.
¿Hay algo que pueda hacer para elevar mi ventana / cadena de intercambio a un modo de pantalla completa adecuado para voltear el búfer?
Respuestas:
Que yo sepa, lo único que funciona es:
al inicio de su solicitud y:
antes de dejar de fumar Para las transiciones, proceda como de costumbre. Lo intenté
InvalidateRect(NULL, NULL, true)
justo después de cambiar a pantalla completa en vano. Espero que esto ayude.fuente
De hecho, no eres el único que enfrenta este problema . Lo primero que debe verificar: asegúrese de estar utilizando los últimos controladores / beta / de primera clase para la tarjeta de video que está utilizando.
Ahora, diría que solo hay una pequeña posibilidad de que pueda hacer que esto funcione mejor que la implementación automática de DXGI. Este tipo de problema depende en gran medida del proveedor del adaptador, la versión del controlador y la configuración del monitor. Entonces, al arreglarlo en una máquina, puede terminar rompiéndolo en más.
Aconsejo no volver a la edad oscura de DirectX 9, donde tenía que hacer todo a mano. Una mejor idea sería intentar arreglar el cambio automático. Algunos senderos a seguir:
Lea la (escasa) documentación cuidadosamente.
Si aún no lo está haciendo, intente responder al
WM_SIZE
evento que recibe al cambiar de / a pantalla completa, como se describe aquí . Si lo hace, asegúrese de liberar todas las referencias al búfer de respaldo antes de llamarResizeBuffers
, como se describe allí . De lo contrario, podría causar este tipo de semi-problemas extraños.Intente comenzar directamente en pantalla completa y cree su cadena de intercambio con uno de los modos de visualización enumerados . Si esto funciona todo el tiempo, esto podría significar que no está utilizando uno de los modos de visualización enumerados al manejar
WM_SIZE
(o no del todo, cosas como la frecuencia de actualización puede ser importante).Intenta jugar con el efecto de intercambio y el conteo del búfer de la descripción de tu cadena de intercambio . Probablemente deberías estar usando
DXGI_SWAP_EFFECT_SEQUENTIAL
y aBufferCount
> = 2. Quizás tu controlador tenga poca compatibilidad para opciones más "exóticas".fuente