D3DImage.IsFrontBufferAvailable 属性
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获取一个值,该值指示前台缓冲区是否存在。
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 |
无 |