D3DImage 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
顯示使用者建立之 Direct3D 介面的 ImageSource。
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
- 繼承
範例
下列程式碼範例示範如何在 XAML 中宣告 D3DImage 。 您必須對應 System.Windows.Interop 命名空間,因為它不包含在預設 XAML 命名空間中。 如需詳細資訊,請參閱 逐步解說:在 WPF 中裝載 Direct3D9 內容。
<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>
備註
使用 類別 D3DImage 在 Windows Presentation Foundation (WPF) 應用程式中裝載 Direct3D 內容。
Lock呼叫 方法來變更 所 D3DImage 顯示的 Direct3D 內容。 SetBackBuffer呼叫 方法,將 Direct3D 表面指派給 D3DImage 。 AddDirtyRect呼叫 方法來追蹤 Direct3D 介面的更新。 Unlock呼叫 方法以顯示變更的區域。
類別 D3DImage 會管理兩個顯示緩衝區,稱為 後端緩衝區 和 前端緩衝區。 後端緩衝區是您 Direct3D 表面。 當您呼叫 Unlock 方法時,後端緩衝區的變更會向前複製到前端緩衝區,其會顯示在硬體上。 有時候,前端緩衝區會變成無法使用。 這種可用性不足的原因可能是螢幕鎖定、全螢幕獨佔 Direct3D 應用程式、使用者切換或其他系統活動所造成。 發生這種情況時,您的 WPF 應用程式會透過處理 IsFrontBufferAvailableChanged 事件來收到通知。 您的應用程式如何回應前端緩衝區變成無法使用,取決於 WPF 是否能夠回復至軟體轉譯。 方法 SetBackBuffer 具有多載,其會採用參數,指定 WPF 是否回復為軟體轉譯。
當 WPF 未回復至軟體轉譯時,回應無法使用的前端緩衝區
當您呼叫 SetBackBuffer(D3DResourceType, IntPtr) 多載或呼叫 SetBackBuffer(D3DResourceType, IntPtr, Boolean) 參數設定 false
為 的多載 enableSoftwareFallback
時,轉譯系統會在前端緩衝區變成無法使用且不會顯示任何內容時,釋放其後端緩衝區的參考。 當前端緩衝區再次可供使用時,轉譯系統會 IsFrontBufferAvailableChanged 引發 事件來通知 WPF 應用程式。 您可以為事件建立事件處理常式, IsFrontBufferAvailableChanged 以使用有效的 Direct3D 表面重新開機轉譯。 若要重新開機轉譯,您必須呼叫 SetBackBuffer 。
當 WPF 回復至軟體轉譯時,回應無法使用的前端緩衝區
當您使用 參數設定為 呼叫 SetBackBuffer(D3DResourceType, IntPtr, Boolean) 多載 enableSoftwareFallback
時,轉譯系統會在前端緩衝區變成無法使用時,保留其後端緩衝區的參考,因此當前端緩衝區再次可用時,就不需要呼叫 SetBackBuffer 。 true
在某些情況下,使用者裝置可能會變成無法使用。 發生此情況時,請呼叫 SetBackBuffer 以釋放對後端緩衝區的 WPF 參考。 如果您需要重設裝置,請呼叫 SetBackBufferbackBuffer
參數設為 null
,然後再次呼叫 SetBackBuffer , backBuffer
並將 設定為有效的 Direct3D 介面。
注意
效能取決於 Direct3D 介面的設定。 如需詳細資訊,請參閱 Direct3D9 和 WPF 互通性的效能考慮。
注意
D3DImage除非您呼叫 SetBackBuffer(D3DResourceType, IntPtr, Boolean) 並指定 true
enableSoftwareFallback
參數,否則當 WPF 在軟體中轉譯時,類別不會顯示 Direct3D 內容,例如透過遠端桌面連線。
建構函式
D3DImage() |
初始化 D3DImage 類別的新執行個體。 |
D3DImage(Double, Double) |
使用指定的顯示解析度,初始化 D3DImage 類別的新執行個體。 |
欄位
IsFrontBufferAvailableProperty |
識別 IsFrontBufferAvailable 相依性屬性。 |
屬性
CanFreeze |
取得值,指出是否可以將物件設為不可修改。 (繼承來源 Freezable) |
DependencyObjectType |
取得包裝 DependencyObjectType 這個實例 CLR 型別的 。 (繼承來源 DependencyObject) |
Dispatcher |
取得與這個 Dispatcher 關聯的 DispatcherObject。 (繼承來源 DispatcherObject) |
HasAnimatedProperties |
取得值,這個值表示是否有一個或多個 AnimationClock 物件與這個物件的任何一個相依性屬性相關聯。 (繼承來源 Animatable) |
Height |
取得 D3DImage 的高度。 |
IsFrontBufferAvailable |
取得指出前景緩衝區是否存在的值。 |
IsFrozen |
取得值,該值表示物件目前是否可修改。 (繼承來源 Freezable) |
IsSealed |
取得值,這個值表示此執行個體目前是否已密封 (唯讀)。 (繼承來源 DependencyObject) |
Metadata |
取得與影像來源關聯的中繼資料。 |
PixelHeight |
取得 D3DImage的高度,以像素為單位。 |
PixelWidth |
取得 D3DImage 的寬度,以像素為單位。 |
Width |
取得 D3DImage 的寬度。 |
方法
事件
Changed |
發生於 Freezable 或所含的物件遭到修改時。 (繼承來源 Freezable) |
IsFrontBufferAvailableChanged |
發生於 IsFrontBufferAvailable 屬性變更時。 |
明確介面實作
IFormattable.ToString(String, IFormatProvider) |
使用指定的格式,格式化目前執行個體的值。 (繼承來源 ImageSource) |