組件對象模型(COM)

組件對象模型(Component Object Model,COM)是一種令DirectX不受編程語言束縛拴疤,并且使之向后兼容的技術簸州。我們通常將COM對象視為一種接口鹏秋,但考慮當前編程的目的究履,遂將它當做一個C++類來使用。用C++語言編寫DirectX時驹饺,COM幫我們隱藏大量的細節(jié)钳枕。我們只需知道:要獲取指向某COM接口的指針,需借助特定函數或另一個COM接口的方法--而不是用C++語言中的關鍵字new去創(chuàng)建一個COM接口赏壹。另外鱼炒,COM對象會統計其引用次數;因此蝌借,在使用完某接口時昔瞧,我們便應調用它的Release方法(COM接口的所有功能提供是從IUnknow這個COM接口繼承而來俐巴,包括Release方法在內),而不是用delete來刪除---當COM對象的引用計數為0時硬爆,它將自行釋放做自己所占用的內存。
為了輔助用戶管理COM對象的生命周期擎鸠,Windows運行時庫(Windows Runtime Library, WRL)專門為此提供了Microsoft::WRL::ComPtr類(#include<wrl.h>),我們可以幫它當作是COM對象的智能指針缀磕。當一個ComPtr實例超出作用域范圍時,它便會自動調用COM對象的Release方法劣光,繼而省掉了我們手動調用的麻煩袜蚕。常用的3個ComPtr方法如下:

1.Get:返回一個指向此底層COM接口的指針。此方法常用于把原始的COM接口指針作為參數傳給函數绢涡。例如:

#include <wrl.h>
ComPtr<ID3D12RootSignature>mRootSignature;
...
//SetGraphicsRootSignature需要獲取ID3D12RootSignature*類型參數
mCommandList->SetGraphicsRootSignature(mRootSignature.Get());

2.GetAddressof:返回指向此底層COM接口指針地址牲剃。憑此方法即可利用函數返回COM接口指針。例如:

#include <wrl.h>
ComPtr<ID3D12RootSignature>mDirectCmdListAlloc;
...
ThrowIfFailed(md3dDevice->CreateCommandAllocator(
    D3D12_COMMAND_LIST_TYPE_DIRECT,        
    mDirectCmdListAlloc.GetAddressof()));

3.Reset:將此ComPtr實例設置為nullptr釋放與之相關的所有引用(同時減少其底層COM接口的引用計數)雄可。此方法的功能與將ComPtr目標實例賦值為nullptr的效果相同凿傅。
當然,與COM有關的知識不止于此数苫,但是對有效地使用DirectX來說足矣聪舒。

注意:
COM的接口都以“I”作為開頭。例如虐急,表示命令列表的COM接口為ID3D12GraphicsCommandList箱残。

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市止吁,隨后出現的幾起案子被辑,更是在濱河造成了極大的恐慌,老刑警劉巖敬惦,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盼理,死亡現場離奇詭異,居然都是意外死亡俄删,警方通過查閱死者的電腦和手機榜揖,發(fā)現死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抗蠢,“玉大人举哟,你說我怎么就攤上這事⊙该” “怎么了妨猩?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長秽褒。 經常有香客問我壶硅,道長威兜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任庐椒,我火速辦了婚禮椒舵,結果婚禮上,老公的妹妹穿的比我還像新娘约谈。我一直安慰自己笔宿,他們只是感情好,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布棱诱。 她就那樣靜靜地躺著泼橘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪迈勋。 梳的紋絲不亂的頭發(fā)上炬灭,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天,我揣著相機與錄音靡菇,去河邊找鬼重归。 笑死,一個胖子當著我的面吹牛厦凤,可吹牛的內容都是我干的提前。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼泳唠,長吁一口氣:“原來是場噩夢啊……” “哼狈网!你這毒婦竟也來了?” 一聲冷哼從身側響起笨腥,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤拓哺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后脖母,有當地人在樹林里發(fā)現了一具尸體士鸥,經...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年谆级,在試婚紗的時候發(fā)現自己被綠了烤礁。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡肥照,死狀恐怖脚仔,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情舆绎,我是刑警寧澤鲤脏,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響猎醇,放射性物質發(fā)生泄漏窥突。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一硫嘶、第九天 我趴在偏房一處隱蔽的房頂上張望阻问。 院中可真熱鬧,春花似錦沦疾、人聲如沸称近。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至斥铺,卻和暖如春彻桃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背晾蜘。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工邻眷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人剔交。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓肆饶,卻偏偏與公主長得像,于是被迫代替她去往敵國和親岖常。 傳聞我的和親對象是個殘疾皇子驯镊,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內容