D3DImage 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
一个 ImageSource,它显示用户创建的 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
- 继承
示例
下面的代码示例演示如何在 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调用 方法以更改 显示的 D3DImageDirect3D 内容。 调用 方法以 SetBackBuffer 将 Direct3D 图面分配给 D3DImage。 AddDirtyRect调用 方法以跟踪 Direct3D 图面的更新。 Unlock调用 方法以显示更改的区域。
D3DImage 类管理两个显示缓冲区,称为后台缓冲区和前台缓冲区。 后台缓冲区是 Direct3D 图面。 调用 Unlock 方法时,对后台缓冲区的更改会向前复制到前台缓冲区,并在硬件上显示。 有时,前台缓冲区会变得不可用。 导致其不可用的原因可能包括屏幕锁定、全屏独占 Direct3D 应用程序、用户切换或其他系统活动。 发生这种情况时,WPF 应用程序会通过处理 IsFrontBufferAvailableChanged 事件收到通知。 应用程序如何响应变得不可用的前台缓冲区取决于 WPF 是否能够回退到软件呈现。 SetBackBuffer 方法有一个重载,该重载使用的参数指定了 WPF 是否回退到软件呈现。
当 WPF 不回退到软件呈现时响应不可用的前端缓冲区
调用 SetBackBuffer(D3DResourceType, IntPtr) 重载或调用 SetBackBuffer(D3DResourceType, IntPtr, Boolean) 重载并将 enableSoftwareFallback
参数设置为 false
时,呈现系统会在前台缓冲区不可用且不显示任何内容时释放其对后台缓冲区的引用。 当前台缓冲区再次可用时,呈现系统会引发 IsFrontBufferAvailableChanged 事件以通知 WPF 应用程序。 你可以为 IsFrontBufferAvailableChanged 事件创建事件处理程序,以使用有效的 Direct3D 图面重新开始呈现。 若要重新开始呈现,必须调用 SetBackBuffer。
当 WPF 回退到软件呈现时响应不可用的前端缓冲区
调用 SetBackBuffer(D3DResourceType, IntPtr, Boolean) 重载并将 enableSoftwareFallback
参数设置为 true
时,呈现系统会在前台缓冲区不可用时保留其对后台缓冲区的引用,因此当前台缓冲区再次可用时无需调用 SetBackBuffer。 在某些情况下,用户的设备可能不可用。 发生这种情况时,调用 SetBackBuffer 以释放 WPF 对后台缓冲区的引用。 如果需要重置设备,请调用 SetBackBuffer 并将 backBuffer
参数设置为 null
,然后再次调用 SetBackBuffer 并将 backBuffer
设置为有效的 Direct3D 图面。
注意
性能在很大程度上取决于 Direct3D 图面的设置。 有关详细信息,请参阅 Direct3D9 和 WPF 互操作性的性能考虑。
注意
D3DImage当 WPF 在软件(例如通过远程桌面连接)中呈现时,类不显示 Direct3D 内容,除非你调用 SetBackBuffer(D3DResourceType, IntPtr, Boolean) 并指定 true
enableSoftwareFallback
参数。
构造函数
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) |