Share via


D3DImage.SetBackBuffer 方法

定义

分配 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 图面。

属性

例外

D3DImageLock() 方法的调用未锁定 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)参数设置为 falseenableSoftwareFallback重载相同。 调用 SetBackBuffer(D3DResourceType, IntPtr) 或调用 SetBackBuffer(D3DResourceType, IntPtr, Boolean) 并将 enableSoftwareFallback 参数设置为 false时,当前端缓冲区不可用且不显示任何内容时,呈现系统将释放对后台缓冲区的引用。 当前台缓冲区再次可用时,呈现系统会引发 IsFrontBufferAvailableChanged 事件以通知 WPF 应用程序。 你可以为 IsFrontBufferAvailableChanged 事件创建事件处理程序,以使用有效的 Direct3D 图面重新开始呈现。 若要重新开始呈现,必须调用 SetBackBuffer

以下列表显示了类型所需的后台缓冲区设置 IDirect3DSurface9

  • D3DFMT_A8R8G8B8D3DFMT_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_A8R8G8B8D3DFMT_X8R8G8B8

  • D3DUSAGE_RENDERTARGET

  • D3DPOOL_DEFAULT

仅允许在图面上进行 IDirect3DSurface9Ex 多重采样。

适用于