2019 5 31 SharpDx 進入全屏模式

2022-01-14 04:03:59 字數 1880 閱讀 9401

title

author

date

createtime

categories

sharpdx 進入全屏模式

lindexi

2019-5-31 9:5:36 +0800

2019-5-30 20:1:26 +0800

directx sharpdx 渲染

本文屬於 sharpdx 系列 部落格,建議從頭開始讀

在 sharpdx 裡面可以通過兩個方法進入全屏模式,乙個是視窗進入全屏,另乙個是交換鏈進入全屏

和普通的 wpf 視窗差不多,可以在 renderform 建立的時候設定進入全屏模式,全屏就是最大化的視窗同時去掉標題欄,隱藏工作列

在 windows 只要整個螢幕的所有畫素被填充,那麼工作列將會自動隱藏

在 renderform 有乙個屬性是 isfullscreen 如果單修改這個屬性是沒有用的,需要同時設定 allowuserresizing 屬性

_renderform

=new

renderform();

_renderform.windowstate

=formwindowstate.maximized;

_renderform.isfullscreen

=true;

_renderform.allowuserresizing

=false;

這樣就可以進入全屏,沒有標題欄和工作列

在視窗裡面可以通過 transparencykey 設定某個顏色作為透明顏色,然後通過 allowtransparency 設定支援透明

_renderform.transparencykey

=color.transparent;

_renderform.allowtransparency

=true;

這時畫出的透明的顏色就是讓視窗透明,透明的部分會命中到後面的元素

和 wpf 的全屏不相同的是,在 sharpdx 裡面不會占用螢幕透明的記憶體,也就是透明部分不需要使用程式程序的記憶體

如果開啟交換鏈的全屏,那麼視窗透明將無法使用,使用交換鏈透明,在 windows 的 dwm 將會整個螢幕的繪製交給程式,此時的程式繪製速度能更快

其他的應用有關渲染部分都不會執行,特別是其他的 dx 程式,這樣程式可以用到很多的計算。用交換鏈的全屏可以做到更高的效能,但是在進入的時候都會因為螢幕顯示切換出現黑色,現在很少有遊戲使用交換鏈全屏

private

void

initializedeviceresources()

;device.createwithswapchain(drivertype.hardware, devicecreationflags.none, swapchaindesc,

out_d3ddevice, out

_swapchain);

// 全屏

_swapchain.setfullscreenstate(new

rawbool(true), null);

// 忽略**

}

通過 setfullscreenstate 可以將交換鏈的渲染資訊輸出到螢幕,在windows vista或更高版本中其實 獨佔 模式不會讓整個程式用到所有的 gpu 資源,因為 gpu 是共享的,但是可以讓程式用到更多的資源。清真的程式在其他程式進去全屏的時候,渲染策略會和這個程式最小化一樣,不會做實際渲染

sharpdx 系列

sharpdx.dxgi.swapchain.setfullscreenstate(sharpdx.mathematics.interop.rawbool, sharpdx.dxgi.output) example

dxgi api sharpdx

2019 5 31 學習 分享會 總結???

啊啊啊有人可以幫忙補充嗎 1.初三 好像說得挺少的。2.初二 balabala收穫挺多。上課的話,課文貌似沒什麼好聽的?閱讀作文 zyc大佬 作文要假。xxy 冒出 什麼?zyc 最好提前想好材料,初二都是寫人的。爺爺奶奶外公外婆最好寫了 然後開頭,開門見山或環境渲染什麼的,可以借用一下其他句子。z...

sh 指令碼語法

介紹 1 開頭 程式必須以下面的行開始 必須方在檔案的第一行 bin sh 符號 用來告訴系統它後面的引數是用來執行該檔案的程式。在這個例子中我們使用 bin sh來執行程式。當編寫指令碼完成時,如果要執行該指令碼,還必須使其可執行。要使編寫指令碼可執行 編譯 chmod x filename 這樣...

日誌清理 sh

bin bash log dir var log root uid 0 lines 50 e xcd 66 e notroot 67 e wrongargs 65 if uid ne root uid then echo must be root to run this script.exit e ...