WPF全屏窗口,3D渲染性能

时间:2017-10-31 19:16:47

标签: c# wpf windows direct3d

我正在开发一个使用WPF 4.6.2和Direct3D 11的CAD应用程序,它们通过D3DImage互操作。当在4K 3840x2160显示器上最大化窗口时,应用程序渲染3D内容非常慢,我得到大约1 FPS。我认为“嗯,屏幕上有太多的像素,这可能是正常的”。

然而,如果我调整窗口大小以使其不再最大化但只比最大化的小几个像素,则3D渲染工作正常,我得到大约20 FPS。相同的场景,相同的渲染设置,相同的一切,唯一的区别是全屏与窗口。

我的窗口使用自定义镶边,即 @Override protected void onDraw(Canvas c) { CanvasWidth = c.getWidth(); CanvasHeight = c.getHeight(); Paint myPaint = new Paint(); myPaint.setStyle(Paint.Style.FILL); myPaint.setColor(getResources().getColor(R.color.colorTeal1)); myPaint.setStrokeWidth(10); c.drawRect(160, 60, 800, 110, myPaint); c.drawRect(160, 160, 250, 210, myPaint); c.drawRect(160, 260, 400, 310, myPaint); brush.reset(); brush.setColor(getResources().getColor(R.color.colorTeal1)); brush.setTextSize(36); brush.setTypeface(Typeface.DEFAULT_BOLD); c.drawText("1 Day:", 20, 100, brush); c.drawText("2 Days:", 20, 200, brush); c.drawText("3 Days:", 20, 300, brush); brush.setColor(getResources().getColor(R.color.colorTeal3)); c.drawText("5", 167, 99, brush); c.drawText("15", 167, 198, brush); c.drawText("25", 167, 298, brush); } 和自定义标题栏&系统按钮。我已将问题缩小到WindowChrome XAML的事情。

我认为问题是本机Win32窗口在这种状态下太大,甚至大于4K,需要剪切到屏幕上。 Spy ++为我的最大化窗口显示了以下矩形:<WindowChrome CornerRadius="0" GlassFrameThickness="0" UseAeroCaptionButtons="False" />

为什么(-11,-11)-(3851,2111), 3862x2122 (Maximized) API会对我的窗口执行此操作?有没有办法让它尊重我的屏幕尺寸并停止调整窗口大小?

更新:好的,正如评论中所提到的,最大化的窗口大小比屏幕更大是正常的,我确认它仍然是没有自定义chrome的情况。

然而,不正常的是窗口客户端矩形大于屏幕。

在杀死Direct3D性能的错误状态下,该窗口的客户端矩形为SystemCommands.MaximizeWindow()

处于良好状态(但系统提供了chrome),客户端矩形为(-5,-6)-(3857,2166), 3862x2122

0 个答案:

没有答案
相关问题