D3DImage.SetBackBuffer 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
分配 Direct3D 图面作为后台缓冲区的源。
重载
SetBackBuffer(D3DResourceType, IntPtr) |
分配 Direct3D 图面作为后台缓冲区的源。 |
SetBackBuffer(D3DResourceType, IntPtr, Boolean) |
分配 Direct3D 图面作为后台缓冲区的源。 |
SetBackBuffer(D3DResourceType, IntPtr)
分配 Direct3D 图面作为后台缓冲区的源。
public:
void SetBackBuffer(System::Windows::Interop::D3DResourceType backBufferType, IntPtr backBuffer);
[System.Security.SecurityCritical]
public void SetBackBuffer (System.Windows.Interop.D3DResourceType backBufferType, IntPtr backBuffer);
public void SetBackBuffer (System.Windows.Interop.D3DResourceType backBufferType, IntPtr backBuffer);
[<System.Security.SecurityCritical>]
member this.SetBackBuffer : System.Windows.Interop.D3DResourceType * nativeint -> unit
member this.SetBackBuffer : System.Windows.Interop.D3DResourceType * nativeint -> unit
Public Sub SetBackBuffer (backBufferType As D3DResourceType, backBuffer As IntPtr)
参数
- backBufferType
- D3DResourceType
Direct3D 图面的类型。 必须为有效的 D3DResourceType。
- backBuffer
-
IntPtr
nativeint
要作为后台缓冲区分配的 Direct3D 图面。
- 属性
例外
对 D3DImage 或 Lock() 方法的调用未锁定 TryLock(Duration)。
backBufferType
不是有效的 D3DResourceType。
backBuffer
的创建参数不符合 backBufferType
的要求或 backBuffer
设备无效。
示例
下面的代码示例演示如何调用 SetBackBuffer 方法来分配 Direct3D 图面。 有关详细信息,请参阅演练:在 WPF 中托管 Direct3D9 内容。
d3dimg.Lock();
// Repeatedly calling SetBackBuffer with the same IntPtr is
// a no-op. There is no performance penalty.
d3dimg.SetBackBuffer(D3DResourceType.IDirect3DSurface9, pSurface);
HRESULT.Check(Render());
d3dimg.AddDirtyRect(new Int32Rect(0, 0, d3dimg.PixelWidth, d3dimg.PixelHeight));
d3dimg.Unlock();
注解
调用 方法以 SetBackBuffer 将 Direct3D 图面分配给后台缓冲区。
注意
性能在很大程度上取决于 Direct3D 图面的设置。 有关详细信息,请参阅 Direct3D9 和 WPF 互操作性的性能考虑。
SetBackBuffer(D3DResourceType, IntPtr)调用重载与调用SetBackBuffer(D3DResourceType, IntPtr, Boolean)参数设置为 false
的enableSoftwareFallback
重载相同。 调用 SetBackBuffer(D3DResourceType, IntPtr) 或调用 SetBackBuffer(D3DResourceType, IntPtr, Boolean) 并将 enableSoftwareFallback
参数设置为 false
时,当前端缓冲区不可用且不显示任何内容时,呈现系统将释放对后台缓冲区的引用。 当前台缓冲区再次可用时,呈现系统会引发 IsFrontBufferAvailableChanged 事件以通知 WPF 应用程序。 你可以为 IsFrontBufferAvailableChanged 事件创建事件处理程序,以使用有效的 Direct3D 图面重新开始呈现。 若要重新开始呈现,必须调用 SetBackBuffer。
以下列表显示了类型所需的后台缓冲区设置 IDirect3DSurface9
。
D3DFMT_A8R8G8B8
或D3DFMT_X8R8G8B8
D3DUSAGE_RENDERTARGET
D3DPOOL_DEFAULT
仅允许在图面上进行 IDirect3DSurface9Ex
多重采样。
另请参阅
适用于
SetBackBuffer(D3DResourceType, IntPtr, Boolean)
分配 Direct3D 图面作为后台缓冲区的源。
public:
void SetBackBuffer(System::Windows::Interop::D3DResourceType backBufferType, IntPtr backBuffer, bool enableSoftwareFallback);
[System.Security.SecurityCritical]
public void SetBackBuffer (System.Windows.Interop.D3DResourceType backBufferType, IntPtr backBuffer, bool enableSoftwareFallback);
public void SetBackBuffer (System.Windows.Interop.D3DResourceType backBufferType, IntPtr backBuffer, bool enableSoftwareFallback);
[<System.Security.SecurityCritical>]
member this.SetBackBuffer : System.Windows.Interop.D3DResourceType * nativeint * bool -> unit
member this.SetBackBuffer : System.Windows.Interop.D3DResourceType * nativeint * bool -> unit
Public Sub SetBackBuffer (backBufferType As D3DResourceType, backBuffer As IntPtr, enableSoftwareFallback As Boolean)
参数
- backBufferType
- D3DResourceType
Direct3D 图面的类型。 必须为有效的 D3DResourceType。
- backBuffer
-
IntPtr
nativeint
要作为后台缓冲区分配的 Direct3D 图面。
- enableSoftwareFallback
- Boolean
退回软件呈现,则为 true
;否则为 false
。
- 属性
注解
调用 SetBackBuffer(D3DResourceType, IntPtr) 重载或调用 SetBackBuffer(D3DResourceType, IntPtr, Boolean) 重载并将 enableSoftwareFallback
参数设置为 false
时,呈现系统会在前台缓冲区不可用且不显示任何内容时释放其对后台缓冲区的引用。 当前台缓冲区再次可用时,呈现系统会引发 IsFrontBufferAvailableChanged 事件以通知 WPF 应用程序。 你可以为 IsFrontBufferAvailableChanged 事件创建事件处理程序,以使用有效的 Direct3D 图面重新开始呈现。 若要重新开始呈现,必须调用 SetBackBuffer。
当调用 SetBackBuffer(D3DResourceType, IntPtr, Boolean) 并将 参数设置为 true
时,呈现系统会在前缓冲区不可用时保留对后台缓冲区的引用,因此无需在前缓冲区再次可用时调用 SetBackBufferenableSoftwareFallback
。 在某些情况下,用户的设备可能变得不可用。 发生这种情况时,调用 SetBackBuffer 以释放 WPF 对后台缓冲区的引用。 如果需要重置设备,请调用 SetBackBuffer ,将 backBuffer
设置为 null
,然后在设置为有效的 Direct3D 图面的情况下backBuffer
再次调用 SetBackBuffer 。
以下列表显示了类型所需的后台缓冲区设置 IDirect3DSurface9
。
D3DFMT_A8R8G8B8
或D3DFMT_X8R8G8B8
D3DUSAGE_RENDERTARGET
D3DPOOL_DEFAULT
仅允许在图面上进行 IDirect3DSurface9Ex
多重采样。