Dela via


Metodtips för DirectComposition

Anteckning

För appar i Windows 10 rekommenderar vi att du använder API:er för Windows.UI.Composition i stället för DirectComposition. Mer information finns i Modernisera din skrivbordsapp med hjälp av visualiseringsskiktet.

I det här avsnittet beskrivs metodtips för att använda Microsoft DirectComposition.

Metodtips

I följande tabell visas de metoder som rekommenderas för att arbeta med visuella Microsoft DirectComposition-objekt.

Praktik Beskrivning
När du har skapat en DirectComposition-enhet anropar du metoden IDCompositionDevice::CheckDeviceState som svar på varje WM_PAINT meddelande för att säkerställa att enheten fortfarande är giltig.
Om enheten Microsoft DirectX Graphics Infrastructure (DXGI) går förlorad går även DirectComposition-enheten som är associerad med DXGI-enheten förlorad. När den identifierar en förlorad enhet skickar DirectComposition WM_PAINT-meddelandet till alla fönster. Genom att anropa CheckDeviceState som svar på varje WM_PAINT meddelande kan du avgöra om DirectComposition-enhetsobjektet fortfarande är giltigt och, om inte, vidta åtgärder för att återställa innehåll.
Mer information finns i Enhetsobjekt.
Skapa bara det antal visuella objekt som behövs för en komposition eller animering och förstör de visuella objekten omedelbart efter att DirectComposition har använt dem.
DirectComposition använder grafikprocessorn (GPU), en resurs som programmet delar med andra program och operativsystemet. Den här metoden säkerställer att alla program och operativsystemet får tillräckliga GPU-resurser.
Mer information finns i Visuals.
Dölj inte visuella objekt genom att ange opacitet till 0%; ta i stället bort visuella objekt från det visuella trädet.
Om du anger opacitet till 0% krävs fler systemresurser än att ta bort dem från det visuella trädet.
För mer information, se Opacitet och visuellt träd.
Dölj inte ett visuellt objekt genom att använda en tom (noll storlek) klipprektangel på ett visuellt objekt. Ta i stället bort det visuella objektet från det visuella trädet.
Om du tar bort ett visuellt objekt från det visuella trädet får du bättre prestanda än att använda en tom klipprektangel.
Mer information finns i Urklipp.
Använd inte en urklippsrektangel på ett visuellt objekt om urklippsrektangeln inte behövs, till exempel en urklippsrektangel som innehåller hela bitmappsinnehållet i det visuella objektet.
Onödiga klipprektanglar skadar systemets prestanda.
Mer information finns i Urklipp.
Om du behöver en stor bitmapp med en enda färg skapar du en mindre bitmappsyta och tillämpar sedan en skalningstransformering i stället för att skapa en fullstor yta.
Om du använder en skalningstransformering på en mindre yta används färre systemresurser än en fullstor yta.
Mer information finns i bitmapobjekt och transformeringar.
Undvik att använda 3D-transformeringar på flera nivåer i ett visuellt träd, till exempel för en förälder och dess avkomma(n).
Att använda 3D-transformeringar på flera nivåer av ett visuellt träd kan ge oavsiktliga resultat eftersom 3D-transformeringar inte multipliceras ut i trädet. Till exempel resulterar en 90 graders rotation runt y-axeln på ett barn och en 90 graders rotation runt y-axeln på en överordnad, i att båda visuella objekten roteras bort till ingenting.
Mer information finns i Effekter.

Säkerhetshänsyn

Följande artiklar innehåller vägledning för att skriva säker C++-kod.

Hur man använder DirectComposition