相关疑难解决方法(0)

如何知道图形卡是否为wpf提供硬件渲染

我必须在一个环境中运行一个wpf-app,该环境具有与intel gma 3000图形芯片(onbard,Q963/Q965)相同的dell-pc.该应用程序仅使用软件渲染进行渲染(由RenderCapability.Tier -property表示,并且Performance Toolkit的Perforator也显示出来.

在所有这些机器上,安装了DirectX 9c并且DXDiag在许多但不是所有这些机器上都有状态,Direct-3d和Direct-Draw加速被激活.我还检查了注册表是否这些机器的设置禁用了wpf-hw渲染,但事实并非如此.在一台机器上,我也更新了视频驱动程序和dx但没有成功.

如果我正确解释资源,那么在安装了DirectX 9c的PC上(并且D3D加速是活动的),也会发生wpf硬件渲染.但是在上面的机器上安装了DX9c,但是没有hw渲染.根据丹尼尔伯尔尼的帖子提供的规范,我也认为至少在第1层上的渲染必须是可行和活跃的.

我唯一不知道的是内存,因为图形系统动态分配系统内存并且没有自己的内存.如何确定特定的图形芯片是否必须支持wpf的硬件渲染.是否支持主动DirectX 9c还支持硬件渲染,还是还有其他任何必须满足的要求,这些要求是dx9c所要求的更高要求吗?第二个问题是,如果wpf通过dx渲染,则通过direct-3d或直接绘制来完成.关于这个主题有没有好的文档?


事实证明,在客户PC上,直接3D加速是活跃的(在DXDiag中),但是如果没有功能.测试直接3d的测试程序总是以错误结束.这使问题成为支持问题,我将在相关的公司支持部门打开一张票.

关于dx的哪个组件用于在硬件中呈现wpf的问题可以回答如下:通过媒体集成层(MIL)完成渲染.如果DirectX(适当版本)可用且可操作,则MIL将所有渲染命令直接写入D3D.另外,DirectShow(或其继承者)用于处理视频.媒体集成层是非托管代码,似乎只有很少的文档.

上述事实让我觉得,一个活跃的DirectX9c是一个明确的指标,即wpf的hw-rendering可以并且将要发生.因此,可以通过检查芯片是否支持dx9c(用于第2层渲染)来响应芯片支持hw渲染的问题.可在此处找到需求规范(感谢Daniel Bern).

UPDATE

d3d和硬件渲染在上述情况下不起作用的原因是注册镜像视频驱动程序以提供远程终端服务(例如网络会议)的应用程序(它是用于远程管理客户端PC的支持部门的软件) ).禁用此镜像驱动程序导致功能直接3d,因此WPF硬件渲染发生.但是渲染级别只是第1级(我认为是因为视频内存限制).

我希望这篇文章能够帮助其他有类似问题的人.

这里有一些链接可以进入主题:

WPF体系结构概述, WPF中的硬件加速, Direct2D简介, 高级WPF应用程序性能调优和分析,RenderCapability.Tier不返回渲染模式

.net wpf

5
推荐指数
1
解决办法
3260
查看次数

WPF多监视器问题 - WindowState

我一直试图让我的WPF应用程序跨越多个监视器一段时间,并且几乎让它工作.

当我设置以下行时,似乎出现了这个问题:

win1.WindowState = WindowState.Maximized
Run Code Online (Sandbox Code Playgroud)

这会导致应用程序仅跨越主屏幕.

我的代码如下:

public partial class App : Application
{
    private void Application_Startup(object sender, StartupEventArgs e)
    {
        Window1 win1 = new Window1();
        win1.WindowStartupLocation = WindowStartupLocation.Manual;
        win1.Width = 2560;
        win1.Height = 1024;
        win1.Left = 0;
        win1.Top = 0;
        win1.Topmost = true;
        win1.Background = new SolidColorBrush(Colors.Black);
        win1.WindowStyle = WindowStyle.None;
        win1.Show();
        win1.Focus();
    }
}
Run Code Online (Sandbox Code Playgroud)

在窗口1内:

public partial class Window1 : Window
{
    public Window1()
    {

    }

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        WindowState = WindowState.Maximized;
    }
}
Run Code Online (Sandbox Code Playgroud)

此示例有效,但窗口未最大化,应用程序边框仍然可见. …

wpf multiple-monitors

4
推荐指数
1
解决办法
1万
查看次数

标签 统计

wpf ×2

.net ×1

multiple-monitors ×1