Compartir a través de


Presentación

DirectX 8.0 formaliza el concepto de "presentación" (o hace que los resultados de la representación sean visibles para el usuario) en la API. Anteriormente, esto se lograba mediante el volteo de página en modo de pantalla completa o mediante la división en modo de ventana. Las aplicaciones usan la nueva API present para realizar la volteo de pantalla completa o el modo de recorte de ventanas. Sin embargo, este mecanismo aún no se expone en el nivel de DDI. El tiempo de ejecución simplemente asigna la API Present a los puntos de entrada DdFlip o DdBlt DDI según el modo de aplicación.

DirectX 8.0 ha agregado dos nuevas marcas blt de DirectDraw que se pasan al controlador como notificación de cuándo una operación blt forma parte realmente de un elemento Present y, por lo tanto, marca un límite de marco. Estas nuevas marcas se DDBLT_PRESENTATION y DDBLT_LAST_PRESENTATION. Se necesitan dos marcas porque el recorte puede dar lugar a una sola llamada Present que invoca varias operaciones blt en el controlador. En este caso, todos los blts que se invocan como resultado de la operación Present tienen establecida la marca DDBLT_PRESENTATION. Sin embargo, solo la blt final de la secuencia utilizada para realizar el objeto Present tiene el DDBLT_LAST_PRESENTATION bit establecido. Por lo tanto, si se usa blt para implementar una llamada Present , el controlador ve cero o más blts con el conjunto de bits de DDBLT_PRESENTATION seguido exactamente de una blt con los bits DDLT_PRESENTATION y DDBLT_LAST_PRESENTATION establecidos. La aplicación nunca establece estas marcas. Solo se permite que el tiempo de ejecución pase estas marcas a un blt. Además, estas marcas solo se pasan a los controladores que admiten la DDI de DirectX 8.0.

El controlador solo puede poner en cola un máximo de tres fotogramas. Si el controlador ve una llamada blt con DDBLT_PRESENTATION establecido y ya tiene tres DDBLT_LAST_PRESENTATION blts en cola, debe producir un error en la llamada con DDERR_WASSTILLDRAWING. El tiempo de ejecución reintenta hasta que la cola se haya purgado lo suficiente.

Si el controlador no puede determinar eficazmente cuándo se ha retirado una DDBLT_LAST_PRESENTATION blt de la cola, el controlador no debe poner en cola los fotogramas en absoluto. DDBLT_LAST_PRESENTATION debe hacer que estos controladores devuelvan DDERR_WASSTILLDRAWING hasta que el acelerador haya finalizado completamente, exactamente como si la aplicación hubiera llamado a Lock en la superficie de origen antes de llamar a Blt.

Por último, en el caso de varias aplicaciones en ventanas que se ejecutan simultáneamente, el controlador debe contar los blts de presentación en función del origen de cada blt, en lugar del principal, es decir, el controlador puede poner en cola tres fotogramas por ventana o destino de representación. Esto da como resultado un mejor rendimiento.