WPF Rendering 2(硬件加速、软件加速)

 第二天(11/16/2010)

step 2: abstract

1. RenderCapability 类:

 Enables WPF applications to query for the current rendering tier for their associated Dispatcher object and to register for notification of changes.
RenderCapability.Tier 属性Gets a value that indicates the rendering tier for the current thread

 

返回值

呈现层

说明

0x00000000

 0

没有图形硬件加速可用于设备中的应用程序。

0x00010000

 1

部分图形硬件加速在视频卡中可用。这对应于高于或等于 7.0 并且低于 9.0 的 DirectX 版本。

0x00020000

 2

呈现层的值为 2 意味着,如果必要的系统资源尚未耗尽,则 WPF 的大部分图形功能应使用硬件加速。这对应于高于或等于 9.0 的 DirectX 版本。

2. RenderOptions 类:

Provides options for controlling the rendering behavior of objects.
RenderOptions.ProcessRenderMode 属性Specifies the render mode preference for the current process.
 说明:

     请使用 ProcessRenderMode 属性来强制为当前进程进行软件呈现。如果改变软件呈现首选项,您可以避免很多在 WPF 应用程序中出现的并由外部问题引发的呈现问题。

在应用程序启动过程中,如果您的应用程序检测到呈现问题,如较慢的帧速率,您可以将呈现模式设置为仅软件。此外,您可能希望在应用程序运行时启用用户设置。

SoftwareOnly 的存在会覆盖 RenderMode 设置。软件呈现的优先顺序为:

  1. DisableHWAcceleration 注册表项
  2. ProcessRenderMode
  3. RenderMode(每个目标)
    ProcessRenderMode 指定一个首选项,且它不一定更改实际呈现模式。该系统的其他部分可能会重写此首选项,并强制系统使用软件呈现。

3. HwndTarget 类:

表示到支持可视化撰写的窗口句柄的绑定
HwndTarget.RenderMode 属性:获取或设置由此 HwndTarget 引用的窗口的呈现模式,RenderMode 值之一,用于指定当前的呈现模式。默认值为 RenderMode.Default

例:

HwndSource hwndSource = PresentationSource.FromVisual(visual) as System.Windows.Interop.HwndSource; 
HwndTarget hwndTarget = hwndSource.CompositionTarget; 
hwndTarget
.RenderMode = renderMode;

 
 总结:
  •  可以使用三种方式改变rendering方式,他们的顺序为
  1. DisableHWAcceleration 注册表项
    HKEY_CURRENT_USER\SOFTWARE\Microsoft\Avalon.Graphics\DisableHWAcceleration,0为启用硬件加速,1为禁止硬件加速
  2. ProcessRenderMode (静态属性,对应每个进程)
    RenderOptions.ProcessRenderMode = RenderMode.Default;
    RenderOptions.ProcessRenderMode = RenderMode.SoftwareOnly;
  3. RenderMode(非静态属性,对每个目标,窗口)
    HwndSource hwndSource = PresentationSource.FromVisual(visual) as System.Windows.Interop.HwndSource; 
    HwndTarget hwndTarget = hwndSource.CompositionTarget; 
    hwndTarget
    .RenderMode = renderMode;
  • RenderCapability.Tier只指示当前的机器具有多大的能力实现硬件加速,它在当前现实的内容改变显示器现实,或者从这个显示器拖动到另外一个显示器现实的时候会改变
    RenderCapability.TierChanged事件会在RenderCapability.Tier改变时触发

posted on 2010-11-16 15:28  I过T  阅读(2308)  评论(0编辑  收藏  举报

导航