D3DImage.IsFrontBufferAvailable 属性

定义

获取一个值,该值指示前台缓冲区是否存在。

public:
 property bool IsFrontBufferAvailable { bool get(); };
public bool IsFrontBufferAvailable { get; }
member this.IsFrontBufferAvailable : bool
Public ReadOnly Property IsFrontBufferAvailable As Boolean

属性值

如果存在前台缓冲区,则为 true;否则为 false

示例

下面的代码示例演示如何在呈现组合目标时检查 IsFrontBufferAvailable 属性。 有关详细信息,请参阅演练:在 WPF 中托管 Direct3D9 内容

void CompositionTarget_Rendering(object sender, EventArgs e)
{
    RenderingEventArgs args = (RenderingEventArgs)e;

    // It's possible for Rendering to call back twice in the same frame 
    // so only render when we haven't already rendered in this frame.
    if (d3dimg.IsFrontBufferAvailable && _lastRender != args.RenderingTime)
    {
        IntPtr pSurface = IntPtr.Zero;
        HRESULT.Check(GetBackBufferNoRef(out pSurface));
        if (pSurface != IntPtr.Zero)
        {
            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();

            _lastRender = args.RenderingTime;
        }
    }
}

注解

有时,前台缓冲区会变得不可用。 导致其不可用的原因可能包括屏幕锁定、全屏独占 Direct3D 应用程序、用户切换或其他系统活动。 发生这种情况时,WPF 应用程序会通过处理 IsFrontBufferAvailableChanged 事件收到通知。 应用程序如何响应变得不可用的前台缓冲区取决于 WPF 是否能够回退到软件呈现。 SetBackBuffer 方法有一个重载,该重载使用的参数指定了 WPF 是否回退到软件呈现。 有关详细信息,请参阅 D3DImage 类中的注解部分。

依赖项属性信息

标识符字段 IsFrontBufferAvailableProperty
元数据属性设置为 true

适用于

另请参阅