Oggetti bitmap
Nota
Per le app in Windows 10, è consigliabile 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
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 alcun servizio di rasterizzazione. Un'applicazione deve usare un'altra libreria di rasterizzazione basata su software o con accelerazione hardware, ad esempio Direct2D o Direct3D , per popolare le bitmap da comporre. Dopo la composizione, DirectComposition passa 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 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 consente di presentare fotogrammi video.
DirectComposition supporta catene di scambio senza finestre DirectX, ovvero catene di scambio che non sono associate a una finestra specifica, e consente a due applicazioni diverse di condividere catene di scambio senza finestra tra i limiti del processo. La condivisione delle 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 di DXGI.
Contenuto stereo
Concettualmente, una catena di scambio stereo è costituita da superfici DXGI (DirectX Graphics Infrastructure) microsoft 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 avere contenuti identici a sinistra e destra; ovvero lo stesso contenuto bitmap viene usato per entrambi i canali. DirectComposition compone tutto il contenuto sinistro e tutto il contenuto corretto separatamente. Se il dispositivo di visualizzazione non è in grado di supportare stereo, DirectComposition considera il canale stereo sinistro o destro (a seconda dell'applicazione) come contenuto mono e compone utilizzando 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ò modificare gli offset del canale sinistro e destro per modificare la profondità percepita del contenuto stereo DirectX.
Il contenuto stereo DirectX è composto e reso persistente in DWM quando è disponibile hardware con supporto stereo.
Bitmap delle finestre
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 sovrapposte. Una bitmap della finestra è simile a un'anteprima DWM, ad eccezione del fatto che un'anteprima può contenere contributi da molte finestre, ad esempio le 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 della finestra, un'applicazione associa un oggetto visivo a un handle di finestra (HWND). Successivamente, 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 "attive".
Associazione del 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 più volte lo stesso contenuto.
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é la normale interpretazione di tali canali come intensità di colore. Questa modalità è utile per il rendering ClearType, che richiede informazioni di copertura dei sub-pixel. Per usare la modalità alfa per canale, un'applicazione deve prima usare Direct2D e DirectWrite per scrivere dati di copertura di 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 combina il colore del testo con i dati di copertura, che produce la fusione di 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 dei 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