DirectX 11的初始化

總體來(lái)說(shuō)可以概括為以下幾個(gè)步驟:

  1. 創(chuàng)建Device和Context
  2. 創(chuàng)建SwapChain
  3. 為BackBuffer創(chuàng)建View
  4. 創(chuàng)建Depth/Stencil Buffer蜕衡,并為之創(chuàng)建View
  5. 將View綁定到Context中
  6. 設(shè)置Viewport

創(chuàng)建Device和Context

HRESULT D3D11CreateDevice(
  IDXGIAdapter            *pAdapter,
  D3D_DRIVER_TYPE         DriverType,
  HMODULE                 Software,
  UINT                    Flags,
  const D3D_FEATURE_LEVEL *pFeatureLevels,
  UINT                    FeatureLevels,
  UINT                    SDKVersion,
  ID3D11Device            **ppDevice,
  D3D_FEATURE_LEVEL       *pFeatureLevel,
  ID3D11DeviceContext     **ppImmediateContext
);

主要調(diào)用D3D11CreateDevice創(chuàng)建ID3D11Device和ID3D11DeviceContext。接口說(shuō)明可以查看API文檔赫舒。這里注意第四個(gè)參數(shù)Flags。在Windows10系統(tǒng)下嘹悼,如果要設(shè)置為D3D11_CREATE_DEVICE_DEBUG排苍,則必須安裝DirectX Graphics Tools。參見(jiàn)

創(chuàng)建SwapChain

HRESULT CreateSwapChain(
  IUnknown             *pDevice,
  DXGI_SWAP_CHAIN_DESC *pDesc,
  IDXGISwapChain       **ppSwapChain
);

主要調(diào)用IDXGIFactory::CreateSwapChain創(chuàng)建IDXGISwapChain袁铐。接口說(shuō)明可以查看API文檔揭蜒。我們通過(guò)上一步創(chuàng)建的ID3D11Device來(lái)獲得IDXGIFactory:參見(jiàn)

IDXGIDevice * pDXGIDevice = nullptr;
hr = g_pd3dDevice->QueryInterface(__uuidof(IDXGIDevice), (void **)&pDXGIDevice);

IDXGIAdapter * pDXGIAdapter = nullptr;
hr = pDXGIDevice->GetAdapter( &pDXGIAdapter );

IDXGIFactory * pIDXGIFactory = nullptr;
pDXGIAdapter->GetParent(__uuidof(IDXGIFactory), (void **)&pIDXGIFactory);

其實(shí),我們也可以直接調(diào)用D3D11CreateDeviceAndSwapChain同時(shí)創(chuàng)建Device和SwapChain剔桨,但是DXGI_SWAP_CHAIN_DESC結(jié)構(gòu)中包含Multisample相關(guān)字段屉更,而在Device創(chuàng)建之前,是無(wú)法通過(guò)ID3D11Device::CheckMultisampleQualityLevels獲取到正確值的洒缀。

為BackBuffer創(chuàng)建View

創(chuàng)建SwapChain的時(shí)候BackBuffer已經(jīng)自動(dòng)創(chuàng)建好了瑰谜,我們只需做的是為它創(chuàng)建一個(gè)View。

HRESULT CreateRenderTargetView(
  ID3D11Resource                      *pResource,
  const D3D11_RENDER_TARGET_VIEW_DESC *pDesc,
  ID3D11RenderTargetView              **ppRTView
);

View的用處其實(shí)就是用來(lái)指定的Buffer的用法树绩,這樣同一塊Buffer可以多次復(fù)用萨脑。一個(gè)Buffer可以對(duì)應(yīng)多個(gè)View。

創(chuàng)建Depth/Stencil Buffer葱峡,并為之創(chuàng)建View

HRESULT CreateTexture2D(
  const D3D11_TEXTURE2D_DESC   *pDesc,
  const D3D11_SUBRESOURCE_DATA *pInitialData,
  ID3D11Texture2D              **ppTexture2D
);
HRESULT CreateDepthStencilView(
  ID3D11Resource                      *pResource,
  const D3D11_DEPTH_STENCIL_VIEW_DESC *pDesc,
  ID3D11DepthStencilView              **ppDepthStencilView
);

首先通過(guò)ID3D11Device::CreateTexture2D創(chuàng)建出Buffer砚哗,然后調(diào)用ID3D11Device::CreateDepthStencilView創(chuàng)建View。值得注意的是砰奕,D3D11_TEXTURE2D_DESC結(jié)構(gòu)中的Usage字段:參見(jiàn)

Resource Usage Default Dynamic Immutable Staging
GPU-Read yes yes yes yes
GPU-Write yes yes
CPU-Read yes
CPU-Write yes yes

將View綁定到Context中

void OMSetRenderTargets(
  UINT                   NumViews,
  ID3D11RenderTargetView * const *ppRenderTargetViews,
  ID3D11DepthStencilView *pDepthStencilView
);

ID3D11DeviceContext負(fù)責(zé)綁定View蛛芥。

設(shè)置Viewport

void RSSetViewports(
  UINT                 NumViewports,
  const D3D11_VIEWPORT *pViewports
);

ID3D11DeviceContext負(fù)責(zé)設(shè)置Viewport提鸟。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市仅淑,隨后出現(xiàn)的幾起案子称勋,更是在濱河造成了極大的恐慌,老刑警劉巖涯竟,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赡鲜,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡庐船,警方通過(guò)查閱死者的電腦和手機(jī)银酬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)筐钟,“玉大人髓梅,你說(shuō)我怎么就攤上這事坯苹∽缬蓿” “怎么了瘪弓?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)壹将。 經(jīng)常有香客問(wèn)我嗤攻,道長(zhǎng),這世上最難降的妖魔是什么诽俯? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任妇菱,我火速辦了婚禮,結(jié)果婚禮上暴区,老公的妹妹穿的比我還像新娘恶耽。我一直安慰自己,他們只是感情好颜启,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著浪讳,像睡著了一般缰盏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上淹遵,一...
    開(kāi)封第一講書(shū)人閱讀 51,370評(píng)論 1 302
  • 那天口猜,我揣著相機(jī)與錄音,去河邊找鬼透揣。 笑死济炎,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的辐真。 我是一名探鬼主播须尚,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼崖堤,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了耐床?” 一聲冷哼從身側(cè)響起密幔,我...
    開(kāi)封第一講書(shū)人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎撩轰,沒(méi)想到半個(gè)月后胯甩,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡堪嫂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年偎箫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片皆串。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡淹办,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出愚战,到底是詐尸還是另有隱情娇唯,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布寂玲,位于F島的核電站塔插,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏拓哟。R本人自食惡果不足惜想许,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望断序。 院中可真熱鬧流纹,春花似錦、人聲如沸违诗。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)诸迟。三九已至茸炒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間阵苇,已是汗流浹背壁公。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留绅项,地道東北人紊册。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像快耿,于是被迫代替她去往敵國(guó)和親囊陡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子芳绩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom閱讀 2,696評(píng)論 0 3
  • 本篇文章是基于谷歌有關(guān)Graphic的一篇概覽文章的翻譯:http://source.android.com/de...
    lee_3do閱讀 7,123評(píng)論 2 21
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類(lèi)型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,101評(píng)論 1 32
  • 《灰犀攀纠ǎ》作者米歇爾·渥克×⌒螅“灰犀哦庀ィ”是指大概率且影響巨大的潛在危機(jī)。相對(duì)于黑天鵝事件的難以預(yù)見(jiàn)性和偶發(fā)性丁稀,灰犀牛...
    丘峻閱讀 718評(píng)論 0 0
  • 作為一個(gè)基本已實(shí)現(xiàn)經(jīng)濟(jì)獨(dú)立的大學(xué)狗(醫(yī)學(xué)生)來(lái)說(shuō),我仔細(xì)思考了才寫(xiě)下這篇文章授账,碼字不易枯跑,希望能幫助到你。 話不多說(shuō)...
    嶼_257c閱讀 954評(píng)論 1 4