上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
=星之卡比= 稍嫌羞澀的路人
註冊時間: 2012-03-04 文章: 2
35.44 果凍幣
|
發表於: 2012-3-4, PM 4:12 星期日 文章主題: 請教關於Directx11的Render Target View |
|
|
ID3D11RenderTargetView *backbuffer; // global declaration
// this function initializes and prepares Direct3D for use
void InitD3D(HWND hWnd)
{
// Direct3D initialization
// ...
// get the address of the back buffer
ID3D11Texture2D *pBackBuffer;
swapchain->GetBuffer(0, __uuidof(ID3D11Texture2D), (LPVOID*)&pBackBuffer);
// use the back buffer address to create the render target
dev->CreateRenderTargetView(pBackBuffer, NULL, &backbuffer);
pBackBuffer->Release();
// set the render target as the back buffer
devcon->OMSetRenderTargets(1, &backbuffer, NULL);
}
但小弟這邊並不是看得很懂,小弟大致可理解Render Target View是要把渲染的Buffer綁到pipeline,但不是很能理解的是為何要把pBackBuffer釋放掉?因為已經把backbuffer指派給pipeline之後就沒有用了嗎?另外為何pBackbuffer是Texture2D?buffer和Texture的關係是?
抱歉問了一堆看起來挺蠢的問題,在網路上爬文都很少講到release這塊,感覺不是很了解@@ |
|
回頂端 |
|
|
crueleva1 稍嫌羞澀的路人
註冊時間: 2012-07-28 文章: 1
6.84 果凍幣
|
發表於: 2012-7-28, PM 11:51 星期六 文章主題: |
|
|
去了解一下COM(Component Object Module)應該可以理解吧~
我在猜或許只是跟系統要一塊2D Texture的backBuffer配置給TargetView之後再把該Module Release掉吧~ |
|
回頂端 |
|
|
=星之卡比= 稍嫌羞澀的路人
註冊時間: 2012-03-04 文章: 2
35.44 果凍幣
|
發表於: 2014-1-28, PM 5:22 星期二 文章主題: |
|
|
好久沒來,自己回答一下:
誠如網路上所說,這邊的Release相當於釋放的意思,因為指針在跨物件共享的時候,會有資源歸屬的問題,如果用的又是裸指針,根本就不知道誰是應該要負責刪除物件的。所以COM設計就是,當自己發現自己被引用成0的時候,就要自己幹掉自己......
而這邊,當把資源丟給管線的時候,管線會自己AddRef一次,換句話說,引用計數就是2,到時候管線關閉的時候,就會只剩下1,我們這邊拿到的資源就洩漏了,所以在我們要跟這資源說再見以前,要先釋放掉。(剛丟出來的那個GetBuffer已經幫忙AddRef了。)
而backbuffer也是一種Texture2D,因為他也可以儲存pixel,至於其他資訊,那就是stencil buffer和depth buffer的事情了ˊ_>ˋ |
|
回頂端 |
|
|
|