簡體   English   中英

每個監視器DPI-Aware:使用NVIDIA Optimus的黑色窗口故障

[英]Per-monitor DPI-Aware: black window glitch with NVIDIA Optimus

我想制作一個Per-Monitor DPI-Aware Direct2D應用程序。 我已經擴展了Microsoft的“First Direct2D Program”示例來處理WM_DPICHANGEDKenny Kerr的MSDN文章中所述 當兩台顯示器都使用一塊顯卡時,這種方法很有效,但在使用我的筆記本電腦的NVIDIA Optimus設置時會出現故障。

我可以通過以下步驟運行Per-Monitor Aware WPF示例來重現相同的故障:

  • 每台顯示器上的DPI比例因子不同。
  • 支持Optimus(集成顯卡上的筆記本電腦顯示,Quadro顯卡上的外接顯示器)
  • 應用程序在主顯示屏上啟動 - 右側的外部顯示器。
  • 將其拖到左側,它可以正確處理DPI更改。
  • 將其拖回右側。 當它處理DPI更改時,右側監視器上的窗口部分變為黑色。 左側部分仍然正確繪制。

(見這個bug的視頻

我只是在上面的示例應用程序中看到了這個錯誤,當我嘗試將Kerr的WM_DPICHANGED處理程序添加到一個更簡單的示例時。 可疑的是,我已經看到其他應用程序(Chrome,Visual Studio本身)顯示類似的黑色窗口,但只是暫時的,如果我在顯示器之間拖動並且非常快速地最大化它們。

那么 - 是否有人熟悉這個故障? 是我的顯示驅動程序中的一些錯誤? 或者是否有其他應用程序要做的事情來糾正它,示例代碼沒有?

你說NVIDIA Optimus? 那些司機是犯罪的錯誤。 嘗試使用D2D1_PRESENT_OPTIONS_RETAIN_CONTENTS標志初始化渲染目標。

在2014年我完成Paint.NET 4.0時,這讓我永遠想起了,我仍然在代碼中發表評論警告我永遠不要把它關掉:

private PresentOptions hwndPresentOptions = 
    PresentOptions.Immediately | 
    PresentOptions.RetainContents; // If we don't use RetainContents, then we get awful
                                   // black flickering and mouse trails on some hardware
                                   // (e.g. NVIDIA Optimus)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM