D3DImage Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Zobrazuje ImageSource uživatelem vytvořenou plochu Direct3D.
public ref class D3DImage : System::Windows::Media::ImageSource
public class D3DImage : System.Windows.Media.ImageSource
type D3DImage = class
inherit ImageSource
Public Class D3DImage
Inherits ImageSource
- Dědičnost
Příklady
Následující příklad kódu ukazuje, jak deklarovat D3DImage v XAML. Obor názvů musíte namapovat System.Windows.Interop , protože není součástí výchozích oborů názvů XAML. Další informace naleznete v tématu Návod: Hostování obsahu Direct3D9 v WPF.
<Window x:Class="D3DHost.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:i="clr-namespace:System.Windows.Interop;assembly=PresentationCore"
Title="MainWindow" Height="300" Width="300" Background="PaleGoldenrod">
<Grid>
<Image x:Name="imgelt">
<Image.Source>
<i:D3DImage x:Name="d3dimg" />
</Image.Source>
</Image>
</Grid>
</Window>
Poznámky
D3DImage Třída slouží k hostování obsahu Direct3D v aplikaci Windows Presentation Foundation (WPF).
Zavolejte metodu Lock , která změní obsah Direct3D zobrazený pomocí D3DImage. SetBackBuffer Voláním metody přiřaďte plochu Direct3D k objektu D3DImage. Zavolejte metodu AddDirtyRect pro sledování aktualizací na povrchu Direct3D. Unlock Voláním metody zobrazíte změněné oblasti.
Třída D3DImage spravuje dvě vyrovnávací paměti zobrazení, které se nazývají zadní vyrovnávací paměť a přední vyrovnávací paměť. Zadní buffer je vaše Direct3D plocha. Změny zadní vyrovnávací paměti se zkopírují do přední vyrovnávací paměti při zavolání metody Unlock, kde se zobrazí na hardwaru. Občas se přední buffer stane nedostupným. Příčinou tohoto nedostatku dostupnosti může být uzamčení obrazovky, exkluzivní aplikace Direct3D na celé obrazovce, přepínání uživatelů nebo jiné systémové aktivity. Pokud k tomu dojde, aplikace WPF bude upozorněna zpracováním IsFrontBufferAvailableChanged události. Způsob, jakým vaše aplikace reaguje na nedostupnou frontovou vyrovnávací paměť, závisí na tom, jestli je povoleno vrátit se do softwarového vykreslování. Metoda SetBackBuffer má přetížení, které přebírá parametr, který určuje, zda WPF spadá zpět do softwarového vykreslování.
Reagování na nedostupnou frontovou vyrovnávací paměť, když WPF nepřepadne zpět na vykreslování softwaru
Při volání SetBackBuffer(D3DResourceType, IntPtr) přetížení nebo volání SetBackBuffer(D3DResourceType, IntPtr, Boolean) přetížení s enableSoftwareFallback parametrem nastaveným na false, vykreslovací systém uvolní svůj odkaz na zadní vyrovnávací paměť, když se přední vyrovnávací paměť stane nedostupnou a nic se nezobrazí. Jakmile bude front buffer opět k dispozici, vyvolá vykreslovací systém IsFrontBufferAvailableChanged událost, která oznámí aplikaci WPF. Pro událost IsFrontBufferAvailableChanged můžete vytvořit obslužnou rutinu, která restartuje vykreslování s platným povrchem Direct3D. Chcete-li restartovat vykreslování, musíte volat SetBackBuffer.
Reagování na nedostupnou frontovou vyrovnávací paměť, když WPF vrátí zpět do softwarového vykreslování
**
Když zavoláte SetBackBuffer(D3DResourceType, IntPtr, Boolean) přetížení s parametrem enableSoftwareFallback nastaveným na true, systém vykreslování si zachová svůj odkaz na zadní vyrovnávací paměť, když není k dispozici přední vyrovnávací paměť, takže není nutné volat SetBackBuffer, když je přední vyrovnávací paměť opět k dispozici. V situacích, kdy zařízení uživatele přestane být dostupné. Pokud k tomu dojde, zavolejte odkaz SetBackBuffer WPF na zadní vyrovnávací paměť. Pokud potřebujete resetovat zařízení, zavolejte SetBackBuffer s parametrem backBuffer nastaveným na null, a pak znovu volejte SetBackBuffer, nastavte backBuffer na platný povrch Direct3D.
Note
Výkon závisí výrazně na nastavení povrchu Direct3D. Další informace naleznete v tématu Aspekty výkonu pro Direct3D9 a WPF Interoperability.
Note
Třída D3DImage nezobrazuje obsah Direct3D, pokud WPF vykresluje v softwaru, například přes připojení ke vzdálené ploše, pokud pro parametr nezavoláte SetBackBuffer(D3DResourceType, IntPtr, Boolean) a nezadáte trueenableSoftwareFallback .
Konstruktory
| Name | Description |
|---|---|
| D3DImage() |
Inicializuje novou instanci D3DImage třídy. |
| D3DImage(Double, Double) |
Inicializuje novou instanci D3DImage třídy se zadaným rozlišením zobrazení. |
Pole
| Name | Description |
|---|---|
| IsFrontBufferAvailableProperty |
Identifikuje IsFrontBufferAvailable vlastnost závislosti. |
Vlastnosti
| Name | Description |
|---|---|
| CanFreeze |
Získá hodnotu, která označuje, zda objekt lze vytvořit nemodifovatelný. (Zděděno od Freezable) |
| DependencyObjectType |
DependencyObjectType Získá ten, který zabalí typ CLR této instance. (Zděděno od DependencyObject) |
| Dispatcher |
Dispatcher Získá toto DispatcherObject je přidružené. (Zděděno od DispatcherObject) |
| HasAnimatedProperties |
Získá hodnotu, která určuje, zda jeden nebo více AnimationClock objektů je přidružen k některé z vlastností závislosti tohoto objektu. (Zděděno od Animatable) |
| Height |
Získá výšku D3DImage. |
| IsFrontBufferAvailable |
Získá hodnotu, která označuje, zda front vyrovnávací paměť existuje. |
| IsFrozen |
Získá hodnotu, která označuje, zda objekt je aktuálně upravitelný. (Zděděno od Freezable) |
| IsSealed |
Získá hodnotu, která označuje, zda je tato instance aktuálně zapečetěna (jen pro čtení). (Zděděno od DependencyObject) |
| Metadata |
Získá metadata přidružená ke zdroji image. |
| PixelHeight |
Získá výšku D3DImage, v pixelech. |
| PixelWidth |
Získá šířku D3DImage, v pixelech. |
| Width |
Získá šířku D3DImage. |
Metody
| Name | Description |
|---|---|
| AddDirtyRect(Int32Rect) |
Určuje oblast zadní vyrovnávací paměti, která se změnila. |
| ApplyAnimationClock(DependencyProperty, AnimationClock, HandoffBehavior) |
Použije pro AnimationClock zadaný DependencyPropertyparametr . Pokud je vlastnost již animovaná, použije se zadané HandoffBehavior . (Zděděno od Animatable) |
| ApplyAnimationClock(DependencyProperty, AnimationClock) |
Použije pro AnimationClock zadaný DependencyPropertyparametr . Pokud je vlastnost již animované, použije se SnapshotAndReplace chování předání. (Zděděno od Animatable) |
| BeginAnimation(DependencyProperty, AnimationTimeline, HandoffBehavior) |
Použije animaci na zadanou DependencyPropertypoložku . Animace se spustí při vykreslení dalšího snímku. Pokud je zadaná vlastnost již animované, použije se zadaná HandoffBehavior vlastnost. (Zděděno od Animatable) |
| BeginAnimation(DependencyProperty, AnimationTimeline) |
Použije animaci na zadanou DependencyPropertypoložku . Animace se spustí při vykreslení dalšího snímku. Pokud je zadaná vlastnost již animované, použije se SnapshotAndReplace chování předání. (Zděděno od Animatable) |
| CheckAccess() |
Určuje, zda volající vlákno má přístup k tomuto DispatcherObject. (Zděděno od DispatcherObject) |
| ClearValue(DependencyProperty) |
Vymaže místní hodnotu vlastnosti. Vlastnost, která se má vymazat, je určena identifikátorem DependencyProperty . (Zděděno od DependencyObject) |
| ClearValue(DependencyPropertyKey) |
Vymaže místní hodnotu vlastnosti jen pro čtení. Vlastnost, která má být vymazána, je určena parametrem DependencyPropertyKey. (Zděděno od DependencyObject) |
| Clone() |
Vytvoří upravitelný klon tohoto D3DImage objektu a vytvoří hluboké kopie hodnot tohoto objektu. Při kopírování vlastností závislostí tato metoda kopíruje odkazy na prostředky a datové vazby (které se už nemusí přeložit), ale ne animace nebo jejich aktuální hodnoty. |
| CloneCore(Freezable) |
Vytvoří instanci klonem (hloubkovou kopií) zadaného Freezable pomocí základních (ne animovaných) hodnot vlastností. |
| CloneCurrentValue() |
Vytvoří upravitelný klon tohoto D3DImage objektu a vytvoří hluboké kopie aktuálních hodnot tohoto objektu. Odkazy na prostředky, datové vazby a animace se nekopírují, ale jejich aktuální hodnoty se zkopírují. |
| CloneCurrentValueCore(Freezable) |
Vytvoří instanci upravitelný klon (hloubkovou kopii) zadaného Freezable pomocí aktuálních hodnot vlastností. |
| CoerceValue(DependencyProperty) |
Převede hodnotu zadané vlastnosti závislosti. Toho se dosahuje vyvoláním jakékoli CoerceValueCallback funkce zadané v metadatech vlastností pro vlastnost závislosti, protože existuje ve volání DependencyObject. (Zděděno od DependencyObject) |
| CopyBackBuffer() |
Vytvoří kopii D3DImagesoftwaru . |
| CreateInstance() |
Inicializuje novou instanci Freezable třídy. (Zděděno od Freezable) |
| CreateInstanceCore() |
Při implementaci v odvozené třídě vytvoří novou instanci odvozené D3DImage třídy. |
| Equals(Object) |
Určuje, zda je poskytnutá DependencyObject hodnota ekvivalentní aktuálnímu DependencyObject. (Zděděno od DependencyObject) |
| Finalize() |
Uvolní prostředky a provede další operace čištění před D3DImage uvolněním paměti. |
| Freeze() |
Nastaví aktuální objekt jako nemodifikovatelný a nastaví jeho IsFrozen vlastnost na |
| FreezeCore(Boolean) |
Znemožní úpravu D3DImage nebo určí, zda je možné ji upravit. |
| GetAnimationBaseValue(DependencyProperty) |
Vrátí ne animovanou hodnotu zadané DependencyPropertyhodnoty . (Zděděno od Animatable) |
| GetAsFrozen() |
Vytvoří zablokovanou kopii Freezablevlastnosti , pomocí základních (ne animovaných) hodnot vlastností. Vzhledem k tomu, že je kopie zablokovaná, všechny ukotvené dílčí objekty se zkopírují odkazem. (Zděděno od Freezable) |
| GetAsFrozenCore(Freezable) |
Vytvoří instanci ukotveným klonem zadaného Freezable pomocí základních (ne animovaných) hodnot vlastností. |
| GetCurrentValueAsFrozen() |
Vytvoří ukotvenou kopii s použitím aktuálních Freezable hodnot vlastností. Vzhledem k tomu, že je kopie zablokovaná, všechny ukotvené dílčí objekty se zkopírují odkazem. (Zděděno od Freezable) |
| GetCurrentValueAsFrozenCore(Freezable) |
Vytvoří aktuální instanci zmrazený klon zadaného Freezable. Pokud má objekt animované vlastnosti závislostí, jejich aktuální animované hodnoty se zkopírují. |
| GetHashCode() |
Získá hash kód pro tento DependencyObject. (Zděděno od DependencyObject) |
| GetLocalValueEnumerator() |
Vytvoří specializovaný enumerátor pro určení, které vlastnosti závislosti mají místně nastavené hodnoty na tomto DependencyObject. (Zděděno od DependencyObject) |
| GetType() |
Získá Type aktuální instance. (Zděděno od Object) |
| GetValue(DependencyProperty) |
Vrátí aktuální efektivní hodnotu vlastnosti závislosti na této instanci objektu DependencyObject. (Zděděno od DependencyObject) |
| InvalidateProperty(DependencyProperty) |
Znovu vyhodnotí efektivní hodnotu pro zadanou vlastnost závislosti. (Zděděno od DependencyObject) |
| Lock() |
Uzamkne D3DImage a povolí operace v zadní vyrovnávací paměti. |
| MemberwiseClone() |
Vytvoří mělkou kopii aktuálního Object. (Zděděno od Object) |
| OnChanged() |
Volá se při změně aktuálního Freezable objektu. (Zděděno od Freezable) |
| OnFreezablePropertyChanged(DependencyObject, DependencyObject, DependencyProperty) |
Tento člen podporuje infrastrukturu Windows Presentation Foundation (WPF) a není určená k použití přímo z vašeho kódu. (Zděděno od Freezable) |
| OnFreezablePropertyChanged(DependencyObject, DependencyObject) |
Zajišťuje, aby byly pro datový člen, který byl právě nastaven, vytvořeny DependencyObjectType příslušné kontextové ukazatele. (Zděděno od Freezable) |
| OnPropertyChanged(DependencyPropertyChangedEventArgs) |
Přepíše implementaci DependencyObjectOnPropertyChanged(DependencyPropertyChangedEventArgs) také vyvolat všechny Changed obslužné rutiny v reakci na měnící se závislost vlastnost typu Freezable. (Zděděno od Freezable) |
| ReadLocalValue(DependencyProperty) |
Vrátí místní hodnotu vlastnosti závislosti, pokud existuje. (Zděděno od DependencyObject) |
| ReadPreamble() |
Zajišťuje, že se k němu Freezable přistupuje z platného vlákna. Dědiče Freezable této metody musí volat tuto metodu na začátku jakéhokoli rozhraní API, které čte datové členy, které nejsou vlastnostmi závislosti. (Zděděno od Freezable) |
| SetBackBuffer(D3DResourceType, IntPtr, Boolean) |
Přiřadí plochu Direct3D jako zdroj zadní vyrovnávací paměti. |
| SetBackBuffer(D3DResourceType, IntPtr) |
Přiřadí plochu Direct3D jako zdroj zadní vyrovnávací paměti. |
| SetCurrentValue(DependencyProperty, Object) |
Nastaví hodnotu vlastnosti závislosti beze změny jejího zdroje hodnot. (Zděděno od DependencyObject) |
| SetValue(DependencyProperty, Object) |
Nastaví místní hodnotu vlastnosti závislosti určenou jeho identifikátorem vlastnosti závislosti. (Zděděno od DependencyObject) |
| SetValue(DependencyPropertyKey, Object) |
Nastaví místní hodnotu vlastnosti závislosti jen pro čtení určenou identifikátorem DependencyPropertyKey vlastnosti závislosti. (Zděděno od DependencyObject) |
| ShouldSerializeProperty(DependencyProperty) |
Vrátí hodnotu, která určuje, zda procesy serializace mají serializovat hodnotu pro zadanou vlastnost závislosti. (Zděděno od DependencyObject) |
| ToString() |
Vytvoří řetězcovou reprezentaci tohoto objektu na základě aktuální jazykové verze. (Zděděno od ImageSource) |
| ToString(IFormatProvider) |
Vytvoří řetězcovou reprezentaci tohoto objektu na základě předaného objektu IFormatProvider . Pokud je |
| TryLock(Duration) |
Pokusí se uzamknout D3DImage a čekat na zadanou dobu trvání. |
| Unlock() |
Dekrementuje počet zámků D3DImagepro . |
| VerifyAccess() |
Vynucuje, že volající vlákno má přístup k tomuto DispatcherObject. (Zděděno od DispatcherObject) |
| WritePostscript() |
Changed Vyvolá událost pro událost Freezable a vyvolá její OnChanged() metodu. Třídy odvozené z Freezable by měly volat tuto metodu na konci jakéhokoli rozhraní API, které upravuje členy třídy, které nejsou uloženy jako vlastnosti závislosti. (Zděděno od Freezable) |
| WritePreamble() |
Ověřuje, že Freezable není zablokovaný a že k němu přistupujete z platného kontextu podprocesu. Freezable dědiče by měly tuto metodu volat na začátku jakéhokoli rozhraní API, které zapisuje do datových členů, které nejsou vlastnostmi závislosti. (Zděděno od Freezable) |
Událost
| Name | Description |
|---|---|
| Changed |
Nastane, když Freezable je objekt, který obsahuje, změněn. (Zděděno od Freezable) |
| IsFrontBufferAvailableChanged |
Nastane, když se IsFrontBufferAvailable vlastnost změní. |
Explicitní implementace rozhraní
| Name | Description |
|---|---|
| IFormattable.ToString(String, IFormatProvider) |
Naformátuje hodnotu aktuální instance pomocí zadaného formátu. (Zděděno od ImageSource) |