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_X8R8G8B8D3DUSAGE_RENDERTARGETD3DPOOL_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_X8R8G8B8D3DUSAGE_RENDERTARGETD3DPOOL_DEFAULT
仅允许在图面上进行 IDirect3DSurface9Ex 多重采样。