亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

DirectX Graphics Infrastructure (DXGI) 全屏設置相關問題

2019-11-17 02:16:42
字體:
來源:轉載
供稿:網友

DirectX Graphics Infrastructure (DXGI) 全屏設置相關問題

原文地址:https://msdn.microsoft.com/en-us/library/windows/desktop/ee417025(v=vs.85).aspx

未完待續。。。

DXGI是在Windows Vista時被引入,封裝了Direct3D10,10.1,11和11.1所需的底層工作。從一個Direct3D 9圖形程序員的角度來看,DXGI封裝了大多數枚舉、交換鏈的創建等以前封裝在Direct3D 9 APIs中的代碼。當你移植一個應用程序到DXGI、Direct3D10.X和Direct3D 11.X時,你需要考慮一些注意事項以確保程序可以順利的運行。

全屏相關問題:

從Direct3D 9過度到DXGI和Direct3D 10.x或Direct3D 11.x時,當從窗口模式轉換到全屏模式所伴隨的問題通??赡軙屍痖_發者頭痛,主要的問題是Direct3D 9應用程序不像DXGI應用程序需要更深入的接近window styles和 window states。當切換模式的代碼在DXGI中運行時經常引起一些并非預期的效果。

通常,Direct3D 9應用程序通過設置前臺緩存的分辨率迫使設備進入全屏獨占模式,然后設置后臺緩存的分辨率相匹配。使用了一個單獨的途徑改變窗體的尺寸,因為程序不得不被window PRocess管理并且任何時候都將接收到一個WM_SIZE處理消息。

DXGI試圖通過合并這兩部分處理以簡化該操作。例如,當窗口模式下窗體的邊框被拖拽時,應用程序會接受到一個WM_SIZE處理消息,DXGI捕獲此消息并自動改變前臺緩存的大小。應用程序只需使用WM_SIZE傳遞的尺寸參數并調用IDXGISwapChain::ResizeBuffers重置后臺緩沖的尺寸。相似的,當窗體在全屏和窗口模式之間切換時,應用程序可簡單的調用 IDXGISwapChain::SetFullscreenState。DXGI重置前臺緩沖大小以匹配剛剛的全屏模式操作,并且發送一個WM_SIZE message到應用程序,應用程序再次調用ResizeBuffers函數,就像之前窗體的邊框被拖拽一樣。

SharpDX代碼實例:

//全屏切換觸發事件void renderForm_KeyDown(object sender, KeyEventArgs e)        {            if (SwapChain.IsFullScreen)            {                if (e.KeyCode == Keys.Escape)                {                    SwapChain.IsFullScreen = false;                }            }            else            {                if (e.Modifiers == Keys.Alt && e.KeyCode == Keys.Enter)                {                    SwapChain.IsFullScreen = true;                }            }        }//WM_SIZE事件 void renderForm_ClientSizeChanged(object sender, EventArgs e)        {            if (renderForm.ClientSize.Width != 0 && renderForm.ClientSize.Height != 0)//最小化時尺寸為0            {                backBufferWidth = renderForm.ClientSize.Width;                backBufferHeight = renderForm.ClientSize.Height;                Disposer.RemoveAndDispose(ref backBufferTexture);                Disposer.RemoveAndDispose(ref backBufferTargetView);                //                SwapChain.ResizeBuffers(1, backBufferWidth, backBufferHeight, Format.R8G8B8A8_UNorm, SwapChainFlags.None);                backBufferTexture = Texture2D.FromSwapChain<Texture2D>(SwapChain, 0);                backBufferTargetView = new RenderTargetView(device, backBufferTexture);                device.ImmediateContext.Rasterizer.SetViewport(new ViewportF(0, 0, backBufferWidth, backBufferHeight, 0.0f, 1.0f));      }}

之前論述的方法遵循一個非常特殊方式,DXGI通過設置默認的桌面分辨率作為全屏模式。然而許多應用程序切換一個預設的分辨率到全屏模式,這種情況下,DXGI提供 IDXGISwapChain::ResizeTarget函數。這個函數應在調用 SetFullscreenState之前調用。雖然這些方法可以通過相反的順序調用(先調用SetFullscreenState ,隨后調用 ResizeTarget),這樣做會導致一個額外的WM_SIZE處理消息在應用程序中觸發。(這樣做也會引起閃爍,因為DXGI可能會在兩個模式之間強制執行)。在調用SetFullscreenState后,再次通過被重置的DXGI_MODE_DESC的成員變量RefreshRate 調用ResizeTarget 是一個明智的操作。這意味著在DXGI中是一個無操作的命令,但是它可以避免接下來討論的刷新率問題。

在全屏模式中,窗口桌面管理(DWM)是無效的,DXGI會以更輕量的方式代替窗口模式下的區域傳輸呈現后臺緩沖區中的內容。這種性能的開銷得到釋放。然而,我們還沒有談到如何在確定條件下確保以輕量的方式代替區域的傳輸模式。這種情況下前臺緩沖和后臺緩沖必須尺寸相同。如果應用程序正確的處理了WM_SIZE處理消息,這顯然不是問題,同樣格式也必須完全相同。

對大部分應用程序來說問題是刷新率,在調用 ResizeTarget時所指定的刷新率必須是交換鏈使用的 IDXGIOutput的刷新率, DXGI_MODE_DESC被傳入ResizeTarget函數后其成員RefreshRate的值會被DXGI自動重置計算。不要假定確切刷新率值會被支持。通常,開發者選擇60HZ作為刷新率,并不了解顯示器的刷新率是大約60,000 / 1,001 Hz。如果刷新率不符合期望的60HZ,DXGI會強制進行區域傳輸代替全屏的輕量傳輸。

最后一個問題是開發者經常面對如何在全屏模式下改變分辨率。調用ResizeTargetSetFullscreenState有時會成功,但是全屏分辨率是桌面的分辨率,同樣,開發者可能會在全屏模式下創建指定的分辨率,我們發現DXGI會忽略我們傳入的指定分辨率。除非特別指出,全屏交換鏈會使用默認桌面的分辨率。當創建全屏分辨率的交換鏈,DXGI_SWAP_CHAIN_DESCFlags成員結構體必須設置為DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH覆蓋默認參數。這個flag同樣也需要被傳入到 ResizeTarget 中動態的開啟或者禁用。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产成人一区三区| 欧美疯狂xxxx大交乱88av| 精品欧美国产一区二区三区| xxxx欧美18另类的高清| 粗暴蹂躏中文一区二区三区| 亚洲精品电影网| 日韩激情av在线免费观看| 亚洲精品美女久久久久| 久久精品视频va| 亚洲成人精品av| 亚洲国产精彩中文乱码av| 久久久久久国产精品| 精品日韩美女的视频高清| 九色精品美女在线| 国产精品久久久久久久久粉嫩av| 国产亚洲欧美日韩美女| 69精品小视频| 一区二区欧美日韩视频| 精品视频—区二区三区免费| 午夜免费在线观看精品视频| 欧美激情一二区| 日韩欧美有码在线| 欧美性开放视频| 一本大道久久加勒比香蕉| 欧美日韩国产色视频| 国产精品一区二区三区成人| 亚洲精品按摩视频| 亚洲欧洲自拍偷拍| 91中文在线视频| 日韩欧美中文在线| 国产成人极品视频| 日韩电影网在线| 久久在线观看视频| 亚洲成人网在线观看| 日韩欧美中文免费| 欧美午夜www高清视频| 亚洲免费福利视频| 国产福利视频一区二区| 国产欧美精品va在线观看| 国产网站欧美日韩免费精品在线观看| 国产一区二区三区直播精品电影| 91久久国产综合久久91精品网站| 国内外成人免费激情在线视频网站| 成人h视频在线观看播放| 自拍偷拍免费精品| 中文字幕日韩有码| 亚洲97在线观看| 国产日本欧美一区二区三区| 亚洲无限乱码一二三四麻| 欧亚精品中文字幕| 欧美野外猛男的大粗鳮| 亚洲精品小视频在线观看| 国产精品成人久久久久| 国产一区二区三区毛片| 成人av资源在线播放| 日韩精品在线免费观看视频| 91精品久久久久久久久中文字幕| 中文字幕自拍vr一区二区三区| 亚洲国产成人精品久久| 97成人超碰免| 久久精品亚洲一区| 欧美激情区在线播放| 欧美日本在线视频中文字字幕| 欧美日韩免费一区| 亚洲最新av在线| 国产精品最新在线观看| 欧美福利在线观看| 亚洲日韩中文字幕在线播放| 91精品国产综合久久香蕉| 国产色婷婷国产综合在线理论片a| 国产精品一区二区三区久久久| 国产日本欧美一区二区三区在线| 国产欧美精品xxxx另类| 91免费福利视频| 国产亚洲成av人片在线观看桃| 亚洲的天堂在线中文字幕| 国产成人综合亚洲| 亚洲成人精品视频在线观看| 91po在线观看91精品国产性色| 欧美xxxx做受欧美.88| 精品久久国产精品| 国产综合香蕉五月婷在线| 日韩精品免费电影| 国产玖玖精品视频| 欧美国产中文字幕| 欧美电影免费观看| 色婷婷久久一区二区| 欧美国产视频日韩| 久久久综合免费视频| 亚洲片国产一区一级在线观看| 国产精品久久久亚洲| 久久精品色欧美aⅴ一区二区| 国外成人在线直播| 中文字幕亚洲综合久久筱田步美| 成人国产精品av| 欧美成人h版在线观看| 成人情趣片在线观看免费| 亚洲视频在线视频| 国产www精品| 国产亚洲精品久久久| 亚洲欧美日韩区| 国产精品手机播放| 日韩精品电影网| 久久手机精品视频| 国产精品一区二区久久久| 成人av.网址在线网站| 成人高h视频在线| 国产精品自拍网| 国产精品狼人色视频一区| 神马国产精品影院av| 色悠悠久久久久| 伊人久久综合97精品| 国产精品高潮呻吟久久av野狼| 岛国av一区二区| 欧美最顶级的aⅴ艳星| 亚洲无亚洲人成网站77777| 欧美精品情趣视频| 国产精品久久久久99| 亚洲第一视频网站| 一区二区亚洲精品国产| 国产精品免费久久久久影院| 国产精品高潮呻吟久久av无限| 久久国产精品网站| 色999日韩欧美国产| 久久亚洲电影天堂| 日韩精品中文字幕在线| 日韩在线观看免费av| 欧洲美女7788成人免费视频| 国产精品久久久久77777| 亚洲精品久久久久久下一站| 精品二区三区线观看| 国产精品久久久久av| 欧美理论电影网| 久久久www成人免费精品| 91久久久精品| 亚洲精品一区在线观看香蕉| 国产一区二区三区网站| 91精品国产色综合| 色综合91久久精品中文字幕| 成人观看高清在线观看免费| 欧美精品做受xxx性少妇| 国产suv精品一区二区| 亚洲精品国产精品自产a区红杏吧| 在线播放亚洲激情| 欧美精品在线播放| 久久久久国产精品免费| 亚洲色图校园春色| 九九热这里只有精品6| 亚洲精品丝袜日韩| 中文字幕在线观看日韩| 亚洲开心激情网| 久久精品人人做人人爽| 日韩美女中文字幕| 欧美成人剧情片在线观看| 日韩精品在线观看视频| 正在播放欧美视频| 最近2019中文字幕大全第二页| 久久精品视频在线| 亚洲欧美成人在线| 亚洲性视频网站| 在线精品视频视频中文字幕| 国产成人在线视频| 亚洲专区国产精品| 91精品综合久久久久久五月天|