(二) Direct3D上下文管理(上)(微軟官方文檔DXVA翻譯)

 Direct3D 上下文管理(上)

原文鏈接:https://msdn.microsoft.com/en-us/library/windows/hardware/ff552845(v=vs.85).aspx


1.總結:
一個上下文包含應用程序創建的Direct3D硬件抽象層的狀態信息,也就是說,上下文描述了驅動應該如何繪製。其中狀態信息包括被繪製的surface,深度surface, 着色器信息和文理信息。
一個Direct3D驅動負責創建和管理其自身的渲染上下文。
2.創建與銷燬一個context
  (1)驅動必須創建並廚師互一個設備指定的context,該context包含了執行渲染需要的狀態信息。狀態在contexts之間是不能共享的,所以驅動必須針對每一個創建的context處理全部的狀態信息。
    (2)創建一個context時,必須做如下工作
 i:申請設備指定的上下文並初始化爲0.
 ii:當創建Direct3D HAL設備時,調用D3dContextCreate回調函數完成額外的操作。
    驅動必須能夠引用所有在一個context內通過D3dCreateSurfaceEx函數創建的紋理的句柄。
   當應用程序要求Direct3D HAL被銷燬時,調用D3dContextDestroy銷燬context.
3.在一個context內維護狀態
當D3dDrawPrimitives2回調函數被調用時,驅動更新在context內的內部狀態。這一回調函數同時將更新後的狀態返回給Direct3D.

4.Direct3D  surface 句柄
(1)所有的suface通過handle引用被嵌入命令流中。高頻率的操作surface時,驅動可以通過hanlde來查找對應的surface,而不需要通過其他的輔助函數進行加鎖重新存儲等操作。
(2)對於句柄的管理是由D3dCreateSurfaceEx來完成的。當DdCanCreateSurface和DdCreateSurface被調用後立即調用該函數。在調用該函數的時候,驅動將所有DirectDraw運行時的surface有關的信息拷貝倒屬於自己的描述Surface的結構體中。

(3)針對每一個設備和每一個進程,句柄是由運行時保證唯一的。對於每一個context,句柄並不能保證唯一性。一些衝突詳細的在Driver-Side Surface結構體中詳細處理。



注: 由於筆者水平有限,難免有誤,有不足之處望海涵批評指正。

發佈了29 篇原創文章 · 獲贊 6 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章