D3DImage.SetBackBuffer Method
Definition
Important
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
Assigns a Direct3D surface as the source of the back buffer.
Overloads
SetBackBuffer(D3DResourceType, IntPtr) |
Assigns a Direct3D surface as the source of the back buffer. |
SetBackBuffer(D3DResourceType, IntPtr, Boolean) |
Assigns a Direct3D surface as the source of the back buffer. |
SetBackBuffer(D3DResourceType, IntPtr)
Assigns a Direct3D surface as the source of the back buffer.
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)
Parameters
- backBufferType
- D3DResourceType
The type of Direct3D surface. Must be a valid D3DResourceType.
- backBuffer
-
IntPtr
nativeint
The Direct3D surface to assign as the back buffer.
- Attributes
Exceptions
The D3DImage has not been locked by a call to the Lock() or TryLock(Duration) methods.
backBufferType
is not a valid D3DResourceType.
The creation parameters for backBuffer
do not meet the requirements for the backBufferType
-or-The backBuffer
device is not valid.
Examples
The following code example shows how to call the SetBackBuffer method to assign a Direct3D surface. For more information, see Walkthrough: Hosting Direct3D9 Content in WPF.
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();
Remarks
Call the SetBackBuffer method to assign a Direct3D surface to the back buffer.
Note
Performance depends greatly on the settings of the Direct3D surface. For more information, see Performance Considerations for Direct3D9 and WPF Interoperability.
Calling the SetBackBuffer(D3DResourceType, IntPtr) overload is identical to calling the SetBackBuffer(D3DResourceType, IntPtr, Boolean) overload with the enableSoftwareFallback
parameter set to false
. When you call SetBackBuffer(D3DResourceType, IntPtr) or call SetBackBuffer(D3DResourceType, IntPtr, Boolean) with the enableSoftwareFallback
parameter set to false
, the rendering system releases its reference to the back buffer when front buffer becomes unavailable and nothing is displayed. When the front buffer is available again, the rendering system raises the IsFrontBufferAvailableChanged event to notify your WPF application. You can create an event handler for the IsFrontBufferAvailableChanged event to restart rendering again with a valid Direct3D surface. To restart rendering, you must call SetBackBuffer.
The following list shows the required back buffer settings for the IDirect3DSurface9
type.
D3DFMT_A8R8G8B8
orD3DFMT_X8R8G8B8
D3DUSAGE_RENDERTARGET
D3DPOOL_DEFAULT
Multisampling is allowed on IDirect3DSurface9Ex
surfaces only.
See also
Applies to
SetBackBuffer(D3DResourceType, IntPtr, Boolean)
Assigns a Direct3D surface as the source of the back buffer.
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)
Parameters
- backBufferType
- D3DResourceType
The type of Direct3D surface. Must be a valid D3DResourceType.
- backBuffer
-
IntPtr
nativeint
The Direct3D surface to assign as the back buffer.
- enableSoftwareFallback
- Boolean
true
to fall back on software rendering; otherwise, false
.
- Attributes
Remarks
When you call the SetBackBuffer(D3DResourceType, IntPtr) overload or call the SetBackBuffer(D3DResourceType, IntPtr, Boolean) overload with the enableSoftwareFallback
parameter set to false
, the rendering system releases its reference to the back buffer when the front buffer becomes unavailable and nothing is displayed. When the front buffer is available again, the rendering system raises the IsFrontBufferAvailableChanged event to notify your WPF application. You can create an event handler for the IsFrontBufferAvailableChanged event to restart rendering again with a valid Direct3D surface. To restart rendering, you must call SetBackBuffer.
When you call SetBackBuffer(D3DResourceType, IntPtr, Boolean) with the enableSoftwareFallback
parameter set to true
, the rendering system retains its reference to the back buffer when the front buffer becomes unavailable, so there is no need to call SetBackBuffer when the front buffer is available again. There may be situations where the user's device becomes unavailable. When that occurs, call SetBackBuffer to release WPF's reference to the back buffer. If you need to reset your device, call SetBackBuffer with backBuffer
set to null
, and then call SetBackBuffer again with backBuffer
set to a valid Direct3D surface.
The following list shows the required back buffer settings for the IDirect3DSurface9
type.
D3DFMT_A8R8G8B8
orD3DFMT_X8R8G8B8
D3DUSAGE_RENDERTARGET
D3DPOOL_DEFAULT
Multisampling is allowed on IDirect3DSurface9Ex
surfaces only.