Oggetti Bitmap
Nota
Per le app in Windows 10, ti consigliamo di usare le API Windows.UI.Composition anziché DirectComposition. Per altre info, vedi Modernizzare l'app desktop usando il livello visivo.
Microsoft DirectComposition è un motore di composizione bitmap. Consente agli sviluppatori di applicazioni di combinare più bitmap e modificarle in vari modi per ottenere effetti visivi e animazioni interessanti in un'interfaccia utente dell'applicazione. In questo argomento vengono descritti i tipi di contenuto bitmap supportati da DirectComposition.
- contenuto bitmap
- argomenti correlati
Contenuto bitmap
Le applicazioni forniscono DirectComposition con il contenuto bitmap da comporre e animare creando oggetti visivi e quindi impostando la proprietà content di tali oggetti. DirectComposition non offre servizi di rasterizzazione. Un'applicazione deve usare altre librerie di rasterizzazione basate su software o con accelerazione hardware, ad esempio Direct2D o Direct3D per popolare le bitmap da comporre. Dopo la composizione, DirectComposition passa il contenuto bitmap composto a Desktop Window Manager (DWM) per il rendering sullo schermo.
Tipi supportati di contenuto bitmap Microsoft DirectComposition supporta i tipi di bitmap seguenti:
Bitmap di memoria video
Una bitmap di memoria video viene rasterizzata nell'hardware usando i metodi Microsoft DirectX (incluso il modello di interoperabilità DX-to-GDI). È supportato da superfici condivise tra processi visibili all'applicazione chiamante e a DirectComposition. Una bitmap di memoria video non è soggetta a strappi perché l'applicazione può leggere solo dalle superfici da cui proviene la trama DirectComposition.
Contenuto video
Le applicazioni possono usare DirectComposition per comporre fotogrammi video che usano catene di scambio senza finestre DirectX associate a una superficie DirectComposition. Concettualmente, DirectComposition considera il contenuto video come una sequenza di bitmap. DirectComposition non fornisce un mezzo per presentare fotogrammi video.
DirectComposition supporta catene di scambio senza finestre DirectX, ovvero catene di scambio non associate a una finestra specifica, e consente a due diverse applicazioni di condividere catene di scambio senza finestra attraverso i limiti del processo. La condivisione di catene di scambio senza finestra consente scenari video in cui la catena di scambio viene creata in un unico processo e viene usata con DirectComposition in un secondo processo. Le catene di scambio senza finestra vengono create usando il metodo IDXGIFactory2::CreateSwapChainForCompositionSurface.
Per altre informazioni sulle catene di scambio DirectX, vedere panoramica DXGI.
Contenuto stereo
Concettualmente, una catena di scambio stereo è costituita da superfici DXGI (Microsoft DirectX Graphics Infrastructure) che rappresentano i canali sinistro e destro per il contenuto stereo 3D. Quando una catena di scambio stereo viene usata come risorsa bitmap per un oggetto visivo, DirectComposition compone in stereo. Tutto il contenuto non stereo (contenuto mono) è considerato identico a quello del canale sinistro e destro; ovvero lo stesso contenuto bitmap viene usato per entrambi i canali. DirectComposition compone tutto il contenuto sinistro e tutto il contenuto destro separatamente. Se il dispositivo di visualizzazione non supporta lo stereo, DirectComposition considera il canale stereo sinistro o destro (a seconda dell'applicazione) come contenuto mono e compone solo i dati per la risorsa bitmap.
DirectComposition non supporta la creazione o la modifica del contenuto stereo e non può promuovere una catena di scambio mono a una coppia stereo. Un'applicazione deve eseguire queste attività prima di presentare contenuto stereo DirectX a DirectComposition. Inoltre, un'applicazione deve fornire gli offset del canale sinistro e destro per la percezione della profondità; DirectComposition non può regolare gli offset del canale sinistro e destro per modificare la profondità percepita del contenuto stereo DirectX.
Il contenuto stereo DirectX è composto e persistente in DWM quando è disponibile hardware con supporto stereo.
Bitmap della finestra
Una "bitmap finestra" non è una bitmap reale, ma è un segnaposto che DirectComposition sostituisce in tempo reale con rasterizzazioni di finestre di primo livello o figlio a più livelli. Una bitmap di finestra è simile a un'anteprima DWM, ad eccezione del fatto che un'anteprima può contenere contributi da molte finestre, ad esempio finestre non figlio di proprietà, mentre una bitmap della finestra DirectComposition è sempre una rappresentazione di una sola finestra e dei relativi elementi figlio.
Poiché DirectComposition ha accesso alle superfici di reindirizzamento di tutte le finestre e di tutti gli alberi visivi, può riutilizzare il contenuto da una finestra in più alberi visivi. La finestra deve essere sovrapposta perché una finestra non a più livelli non dispone di una superficie di reindirizzamento dedicata e pertanto la rasterizzazione non è sempre disponibile per DirectComposition.
Per usare una bitmap di finestra, un'applicazione associa un oggetto visivo a un handle di finestra (HWND). In seguito, DirectComposition ricompiole l'oggetto visivo ogni volta che il contenuto della finestra cambia, incluso quando il contenuto cambia in seguito alle modifiche apportate agli alberi visivi associati alla finestra. In altre parole, come le anteprime DWM, le bitmap della finestra DirectComposition sono "live".
Associazione di contenuto bitmap a un oggetto visivo
Per tutti e tre i tipi di bitmap, un'applicazione può associare la stessa bitmap a più oggetti visivi, il che significa che una singola allocazione di memoria può essere usata per visualizzare lo stesso contenuto più volte.
Canale alfa
Tutte le bitmap hanno un formato BPP (32 bit per pixel), che include otto bit per la trasparenza per pixel. Tuttavia, un'applicazione può specificare il modo in cui DirectComposition deve utilizzare il canale alfa. In particolare, DirectComposition può rispettare il canale alfa oppure può ignorare completamente alfa, nel qual caso la bitmap viene considerata completamente opaca.
Una modalità alfa aggiuntiva ignora il canale alfa, ma considera i valori rosso, verde e blu come valori alfa per canale anziché l'interpretazione normale di tali canali come intensità di colore. Questa modalità è utile per il rendering ClearType, che richiede informazioni sulla copertura dei sub pixel. Per usare la modalità alfa per canale, un'applicazione deve prima usare Direct2D e DirectWrite per scrivere dati di copertura dei sub pixel in una bitmap. Successivamente, l'applicazione deve impostare la modalità alfa corretta e specificare un colore di testo quando associa la bitmap a un oggetto visivo. DirectComposition fonde il colore del testo con i dati di copertura, che produce la fusione ClearType sullo sfondo.
In situazioni in cui l'algoritmo ClearType non è applicabile, ad esempio se la bitmap non è allineata a pixel e allineata all'asse o se deve essere disegnata in una superficie intermedia, DirectComposition può usare i dati di copertura subpixel nella bitmap per produrre invece una rasterizzazione in scala di grigi, automaticamente e senza costi aggiuntivi.
Per altre informazioni, vedere la descrizione del parametro alphaMode della funzione IDCompositionDevice::CreateSurface o IDCompositionDevice::CreateVirtualSurface.
Argomenti correlati