D3DImage Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Obiekt ImageSource , który wyświetla utworzoną przez użytkownika powierzchnię 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
- Dziedziczenie
Przykłady
W poniższym przykładzie kodu pokazano, jak zadeklarować element D3DImage w języku XAML. Należy zamapować System.Windows.Interop przestrzeń nazw, ponieważ nie jest ona uwzględniona w domyślnych przestrzeniach nazw XAML. Aby uzyskać więcej informacji, zobacz Przewodnik: hostowanie zawartości Direct3D9 w 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>
Uwagi
D3DImage Użyj klasy do hostowania zawartości Direct3D w aplikacji Windows Presentation Foundation (WPF).
Wywołaj metodę Lock , aby zmienić zawartość Direct3D wyświetlaną D3DImageprzez element . Wywołaj metodę , SetBackBuffer aby przypisać powierzchnię Direct3D do elementu D3DImage. Wywołaj metodę , AddDirtyRect aby śledzić aktualizacje powierzchni Direct3D. Wywołaj metodę , Unlock aby wyświetlić zmienione obszary.
Klasa D3DImage zarządza dwoma buforami wyświetlania, które nazywają się buforem wstecznym i buforem przednim . Bufor wsteczny to Twoja powierzchnia Direct3D. Zmiany w buforze wstecznym są kopiowane do buforu frontu podczas wywoływania metody Unlock, gdzie jest on wyświetlany na sprzęcie. Czasami bufor frontu staje się niedostępny. Ten brak dostępności może być spowodowany blokowaniem ekranu, ekskluzywnymi aplikacjami Direct3D pełnoekranowymi, przełączaniem użytkowników lub innymi działaniami systemowymi. W takim przypadku aplikacja WPF jest powiadamiana poprzez obsłużenie zdarzenia IsFrontBufferAvailableChanged. Sposób, w jaki aplikacja reaguje na to, że bufor przedni staje się niedostępny, zależy od tego, czy platforma WPF jest włączona, aby przełączyć się na renderowanie programowe. Metoda SetBackBuffer ma przeciążenie, które przyjmuje parametr określający, czy WPF powraca do renderowania oprogramowania.
Odpowiadanie na niedostępny bufor frontu, gdy WPF nie wraca do renderowania oprogramowania
Po wywołaniu przeciążenia SetBackBuffer(D3DResourceType, IntPtr) lub wywołaniu przeciążenia SetBackBuffer(D3DResourceType, IntPtr, Boolean) z parametrem enableSoftwareFallback ustawionym na false, system renderowania zwalnia odwołanie do buforu wstecznego, gdy bufor frontowy stanie się niedostępny i nic nie jest wyświetlane. Gdy przedni bufor jest ponownie dostępny, system renderowania generuje zdarzenie IsFrontBufferAvailableChanged, aby powiadomić aplikację WPF. Można utworzyć procedurę obsługi zdarzeń dla zdarzenia IsFrontBufferAvailableChanged, aby ponownie uruchomić renderowanie przy użyciu prawidłowej powierzchni Direct3D. Aby ponownie uruchomić renderowanie, należy wywołać metodę SetBackBuffer.
Odpowiadanie na niedostępny bufor frontu, gdy WPF powraca do renderowania oprogramowania
Po wywołaniu przeciążenia SetBackBuffer(D3DResourceType, IntPtr, Boolean) z parametrem enableSoftwareFallback ustawionym na truesystem renderowania zachowuje odwołanie do buforu wstecznego, gdy bufor frontu stanie się niedostępny, więc nie ma potrzeby wywoływania SetBackBuffer, gdy bufor frontu jest ponownie dostępny. Mogą wystąpić sytuacje, w których urządzenie użytkownika stanie się niedostępne. W takim przypadku wywołaj odwołanie SetBackBuffer WPF do buforu wstecznego. Jeśli musisz zresetować urządzenie, wywołaj SetBackBuffer przy użyciu parametru backBuffer ustawionego na null, a następnie ponownie wywołaj SetBackBuffer z backBuffer ustawionym na prawidłową powierzchnię Direct3D.
Note
Wydajność zależy znacznie od ustawień powierzchni Direct3D. Aby uzyskać więcej informacji, zobacz zagadnienia wydajności dotyczące współdziałania Direct3D9 i WPF.
Note
Klasa D3DImage nie wyświetla zawartości Direct3D, gdy WPF renderuje się w oprogramowaniu, na przykład za pośrednictwem połączenia pulpitu zdalnego, chyba że wywołasz SetBackBuffer(D3DResourceType, IntPtr, Boolean) i określisz trueenableSoftwareFallback parametr .
Konstruktory
| Nazwa | Opis |
|---|---|
| D3DImage() |
Inicjuje nowe wystąpienie klasy D3DImage. |
| D3DImage(Double, Double) |
Inicjuje nowe wystąpienie D3DImage klasy z określoną rozdzielczością wyświetlania. |
Pola
| Nazwa | Opis |
|---|---|
| IsFrontBufferAvailableProperty |
IsFrontBufferAvailable Identyfikuje właściwość zależności. |
Właściwości
| Nazwa | Opis |
|---|---|
| CanFreeze |
Pobiera wartość wskazującą, czy obiekt może być niezmodyfikowalny. (Odziedziczone po Freezable) |
| DependencyObjectType |
Pobiera klasę DependencyObjectType , która opakowuje typ CLR tego wystąpienia. (Odziedziczone po DependencyObject) |
| Dispatcher |
Pobiera elementDispatcher, z który DispatcherObject jest skojarzony. (Odziedziczone po DispatcherObject) |
| HasAnimatedProperties |
Pobiera wartość wskazującą, czy co najmniej jeden AnimationClock obiekt jest skojarzony z dowolnymi właściwościami zależności tego obiektu. (Odziedziczone po Animatable) |
| Height |
Pobiera wysokość obiektu D3DImage. |
| IsFrontBufferAvailable |
Pobiera wartość wskazującą, czy istnieje bufor frontu. |
| IsFrozen |
Pobiera wartość wskazującą, czy obiekt jest obecnie modyfikowalny. (Odziedziczone po Freezable) |
| IsSealed |
Pobiera wartość wskazującą, czy to wystąpienie jest obecnie zapieczętowane (tylko do odczytu). (Odziedziczone po DependencyObject) |
| Metadata |
Pobiera metadane skojarzone ze źródłem obrazu. |
| PixelHeight |
Pobiera wysokość D3DImageobiektu w pikselach. |
| PixelWidth |
Pobiera szerokość D3DImageobiektu w pikselach. |
| Width |
Pobiera szerokość obiektu D3DImage. |
Metody
| Nazwa | Opis |
|---|---|
| AddDirtyRect(Int32Rect) |
Określa obszar buforu wstecznego, który uległ zmianie. |
| ApplyAnimationClock(DependencyProperty, AnimationClock, HandoffBehavior) |
Stosuje element AnimationClock do określonego DependencyPropertyelementu . Jeśli właściwość jest już animowana, zostanie użyta określona HandoffBehavior wartość . (Odziedziczone po Animatable) |
| ApplyAnimationClock(DependencyProperty, AnimationClock) |
Stosuje element AnimationClock do określonego DependencyPropertyelementu . Jeśli właściwość jest już animowana, SnapshotAndReplace używane jest zachowanie przekazywania. (Odziedziczone po Animatable) |
| BeginAnimation(DependencyProperty, AnimationTimeline, HandoffBehavior) |
Stosuje animację do określonego DependencyPropertyelementu . Animacja jest uruchamiana po renderowaniu następnej ramki. Jeśli określona właściwość jest już animowana, zostanie użyta określona HandoffBehavior właściwość. (Odziedziczone po Animatable) |
| BeginAnimation(DependencyProperty, AnimationTimeline) |
Stosuje animację do określonego DependencyPropertyelementu . Animacja jest uruchamiana po renderowaniu następnej ramki. Jeśli określona właściwość jest już animowana, SnapshotAndReplace używane jest zachowanie przekazywania. (Odziedziczone po Animatable) |
| CheckAccess() |
Określa, czy wątek wywołujący ma dostęp do tego DispatcherObjectelementu . (Odziedziczone po DispatcherObject) |
| ClearValue(DependencyProperty) |
Czyści wartość lokalną właściwości. Właściwość do wyczyszczenia jest określana przez DependencyProperty identyfikator. (Odziedziczone po DependencyObject) |
| ClearValue(DependencyPropertyKey) |
Czyści wartość lokalną właściwości tylko do odczytu. Właściwość do wyczyszczenia jest określana przez DependencyPropertyKeyelement . (Odziedziczone po DependencyObject) |
| Clone() |
Tworzy modyfikowalny klon tego D3DImage obiektu, tworząc głębokie kopie wartości tego obiektu. Podczas kopiowania właściwości zależności ta metoda kopiuje odwołania do zasobów i powiązania danych (które mogą nie być już rozpoznawane), ale nie animacje ani ich bieżące wartości. |
| CloneCore(Freezable) |
Tworzy wystąpienie klona (kopii głębokiej) określonego Freezable przy użyciu wartości właściwości base (nie animowanych). |
| CloneCurrentValue() |
Tworzy modyfikowalny klon tego D3DImage obiektu, tworząc głębokie kopie bieżących wartości tego obiektu. Odwołania do zasobów, powiązania danych i animacje nie są kopiowane, ale ich bieżące wartości są kopiowane. |
| CloneCurrentValueCore(Freezable) |
Sprawia, że wystąpienie jest modyfikowalnym klonem (kopia głęboka) określonego Freezable przy użyciu bieżących wartości właściwości. |
| CoerceValue(DependencyProperty) |
Przekształca wartość określonej właściwości zależności. Jest to realizowane przez wywołanie dowolnej CoerceValueCallback funkcji określonej w metadanych właściwości dla właściwości zależności, ponieważ istnieje w wywołaniu DependencyObject. (Odziedziczone po DependencyObject) |
| CopyBackBuffer() |
Tworzy kopię oprogramowania .D3DImage |
| CreateInstance() |
Inicjuje nowe wystąpienie klasy Freezable. (Odziedziczone po Freezable) |
| CreateInstanceCore() |
Po zaimplementowaniu w klasie pochodnej tworzy nowe wystąpienie klasy pochodnej D3DImage . |
| Equals(Object) |
Określa, czy podany DependencyObject element jest odpowiednikiem bieżącego DependencyObjectelementu . (Odziedziczone po DependencyObject) |
| Finalize() |
Zwalnia zasoby i wykonuje inne operacje oczyszczania przed odzyskaniem D3DImage pamięci przez odzyskiwanie pamięci. |
| Freeze() |
Sprawia, że bieżący obiekt jest niezmodyfikowalny i ustawia jego IsFrozen właściwość na |
| FreezeCore(Boolean) |
Sprawia, D3DImage że niezmodyfikowalne lub określa, czy może być on niezmodyfikowalny. |
| GetAnimationBaseValue(DependencyProperty) |
Zwraca nie animowaną wartość określonego DependencyPropertyelementu . (Odziedziczone po Animatable) |
| GetAsFrozen() |
Tworzy zamrożoną kopię obiektu Freezableprzy użyciu wartości właściwości base (nie animowanych). Ponieważ kopia jest zamrożona, wszystkie zamrożone obiekty podrzędne są kopiowane przez odwołanie. (Odziedziczone po Freezable) |
| GetAsFrozenCore(Freezable) |
Powoduje, że wystąpienie jest zamrożonym klonem określonej Freezable wartości właściwości przy użyciu wartości właściwości base (nie animowanych). |
| GetCurrentValueAsFrozen() |
Tworzy zamrożoną kopię przy użyciu bieżących Freezable wartości właściwości. Ponieważ kopia jest zamrożona, wszystkie zamrożone obiekty podrzędne są kopiowane przez odwołanie. (Odziedziczone po Freezable) |
| GetCurrentValueAsFrozenCore(Freezable) |
Sprawia, że bieżące wystąpienie jest zamrożonym klonem określonego Freezableelementu . Jeśli obiekt ma animowane właściwości zależności, zostaną skopiowane ich bieżące animowane wartości. |
| GetHashCode() |
Pobiera kod skrótu dla tego elementu DependencyObject. (Odziedziczone po DependencyObject) |
| GetLocalValueEnumerator() |
Tworzy wyspecjalizowany moduł wyliczający do określania, które właściwości zależności mają lokalnie ustawione wartości na tym DependencyObjectobiekcie . (Odziedziczone po DependencyObject) |
| GetType() |
Pobiera Type bieżącego wystąpienia. (Odziedziczone po Object) |
| GetValue(DependencyProperty) |
Zwraca bieżącą obowiązującą wartość właściwości zależności dla tego wystąpienia klasy DependencyObject. (Odziedziczone po DependencyObject) |
| InvalidateProperty(DependencyProperty) |
Ponownie oblicza obowiązującą wartość dla określonej właściwości zależności. (Odziedziczone po DependencyObject) |
| Lock() |
Blokuje i D3DImage włącza operacje w buforze wstecznym. |
| MemberwiseClone() |
Tworzy płytkią kopię bieżącego Object. (Odziedziczone po Object) |
| OnChanged() |
Wywoływana po zmodyfikowaniu bieżącego Freezable obiektu. (Odziedziczone po Freezable) |
| OnFreezablePropertyChanged(DependencyObject, DependencyObject, DependencyProperty) |
Ten element członkowski obsługuje infrastrukturę programu Windows Presentation Foundation (WPF) i nie ma być używany bezpośrednio z kodu. (Odziedziczone po Freezable) |
| OnFreezablePropertyChanged(DependencyObject, DependencyObject) |
Zapewnia, że odpowiednie wskaźniki kontekstu są ustanawiane dla DependencyObjectType elementu członkowskiego danych, który został właśnie ustawiony. (Odziedziczone po Freezable) |
| OnPropertyChanged(DependencyPropertyChangedEventArgs) |
Zastępuje implementację DependencyObject metody OnPropertyChanged(DependencyPropertyChangedEventArgs) , aby również wywoływać wszelkie Changed procedury obsługi w odpowiedzi na zmieniającą właściwość zależności typu Freezable. (Odziedziczone po Freezable) |
| ReadLocalValue(DependencyProperty) |
Zwraca wartość lokalną właściwości zależności, jeśli istnieje. (Odziedziczone po DependencyObject) |
| ReadPreamble() |
Gwarantuje, że dostęp do obiektu Freezable jest uzyskiwany z prawidłowego wątku. Dziedziczy Freezable muszą wywoływać tę metodę na początku dowolnego interfejsu API, który odczytuje elementy członkowskie danych, które nie są właściwościami zależności. (Odziedziczone po Freezable) |
| SetBackBuffer(D3DResourceType, IntPtr, Boolean) |
Przypisuje powierzchnię Direct3D jako źródło buforu wstecznego. |
| SetBackBuffer(D3DResourceType, IntPtr) |
Przypisuje powierzchnię Direct3D jako źródło buforu wstecznego. |
| SetCurrentValue(DependencyProperty, Object) |
Ustawia wartość właściwości zależności bez zmieniania źródła wartości. (Odziedziczone po DependencyObject) |
| SetValue(DependencyProperty, Object) |
Ustawia wartość lokalną właściwości zależności określonej przez jej identyfikator właściwości zależności. (Odziedziczone po DependencyObject) |
| SetValue(DependencyPropertyKey, Object) |
Ustawia wartość lokalną właściwości zależności tylko do odczytu określonej przez DependencyPropertyKey identyfikator właściwości zależności. (Odziedziczone po DependencyObject) |
| ShouldSerializeProperty(DependencyProperty) |
Zwraca wartość wskazującą, czy procesy serializacji powinny serializować wartość podanej właściwości zależności. (Odziedziczone po DependencyObject) |
| ToString() |
Tworzy reprezentację ciągu tego obiektu na podstawie bieżącej kultury. (Odziedziczone po ImageSource) |
| ToString(IFormatProvider) |
Tworzy reprezentację ciągu tego obiektu na podstawie przekazanego IFormatProvider elementu. Jeśli dostawca to |
| TryLock(Duration) |
Próbuje zablokować element D3DImage i czeka na określony czas trwania. |
| Unlock() |
Dekrementuje liczbę blokad dla elementu D3DImage. |
| VerifyAccess() |
Wymusza, że wątek wywołujący ma dostęp do tego DispatcherObjectelementu . (Odziedziczone po DispatcherObject) |
| WritePostscript() |
Changed Wywołuje zdarzenie dla Freezable metody i wywołuje jej OnChanged() metodę. Klasy pochodzące z Freezable klasy powinny wywoływać tę metodę na końcu dowolnego interfejsu API, który modyfikuje składowe klasy, które nie są przechowywane jako właściwości zależności. (Odziedziczone po Freezable) |
| WritePreamble() |
Sprawdza, czy Freezable element nie jest zamrożony i czy jest uzyskiwany dostęp z prawidłowego kontekstu wątkowego. Freezable dziedziczy powinny wywoływać tę metodę na początku dowolnego interfejsu API, który zapisuje dane członkom, które nie są właściwościami zależności. (Odziedziczone po Freezable) |
Zdarzenia
| Nazwa | Opis |
|---|---|
| Changed |
Występuje, gdy Freezable obiekt lub, który zawiera, jest modyfikowany. (Odziedziczone po Freezable) |
| IsFrontBufferAvailableChanged |
Występuje, gdy IsFrontBufferAvailable właściwość ulegnie zmianie. |
Jawne implementacje interfejsu
| Nazwa | Opis |
|---|---|
| IFormattable.ToString(String, IFormatProvider) |
Formatuje wartość bieżącego wystąpienia przy użyciu określonego formatu. (Odziedziczone po ImageSource) |