剛拿到DirectX?Dec2005?SDK,發現竟然有D3D10的文檔和例子,速研究了一下,以下只是個人的讀書筆記,僅作參考 1.去掉了固定管線
文檔里列出了用DX10特性模擬的一些固定管線的操作,MS那么大度把DX都開源了(^O^)。
2.去掉了以前版本DX的設備能力檢查(CAPS)
為DX10和Windows?Vista提供的顯示硬件必須滿足DX10的所有硬件特性。這樣對于開發者就比較可以放心的使用各種硬件特性了,很類似Console平臺
的開發。
3.狀態對象(State?Object)
"從100多個渲染狀態中解脫出來吧!"
D3D10對渲染狀態這個概念進行淡化,一方面使用全Shader化的架構使得狀態的前后設置和互相影響對渲染成功率降低到最少
另外對API架構也更為簡潔,另一方面對一些關鍵渲染狀態進行封裝和分類。主要分類有:
Input?Layout?Object?輸入層對象
這個東西很類似D3D9里的頂點聲明,也就是對用戶輸入數據進行整合和系統化
Rasterizer?Object?光柵化對象
這部分主要控制光柵器的行為:填充模式(FILL_MODE),剔除模式(CULL_MODE),多采樣,DepthBias等等
DepthStencil?Object?深度緩沖對象
主要控制深度緩沖的行為,像Z-buffer?Enable之類的
Blend?Object?混合對象
設置象素混合的方法,類似AlphaBlend?SrcAlpha?,DestAlpha等等
Sampler?Object?采樣器對象
設置紋理采樣狀態,包括過濾器和MipMap
4.新的資源訪問模式和資源視圖(View)概念
如果對比D3D9的Shader使用代碼和D3D10的類似代碼會發現一個不同。
D3D9?Shader需要對紋理進行操作時,需要將紋理設置到Shader就可以了,而D3D10里沒有那么簡單,設置前必須將
各種資源整合后為資源創建一個視圖,再提交給Shader訪問。這種操作在環境貼圖里是很有好處的。對于CubeMap的6張紋理
就可以采用一個視圖設置到設備,而自己要訪問每張貼圖只要輕松訪問視圖就可以了,也就是說把資源規整和集成化。
5.新的可編程圖形層(Stage)-幾何Shader(Geometry?Shader)
原來的VS和PS只是對逐個頂點或象素進行處理,而新的GS可以對每個頂點或象素的臨近頂點設置Shader。也就是可以對批量幾何進行處理
GS的用途有:
點精靈
動態粒子系統
皮毛系統
卷積陰影
單Pass渲染到球形貼圖
逐多邊形材質交換
逐多邊形材質設置
6.設備的創建要求對ViewPort進行設置
D3D9里無需對ViewPort進行設置就可以進行渲染,而且默認的RenderTarget就是后備緩沖
而在D3D10里,這個過程變得更為自主化。取出后備緩沖的格式,將RenderTarget設置為屏幕
這讓人感到D3D10設計更趨向于成熟的引擎設計。
7.流輸出層(Stream?Output?State)
這個層的功能是將VS和GS處理完成的數據輸出給用戶,由用戶進行處理后再反饋給管線繼續處理
8.多邊形拓撲結構從繪制代碼分離
現在可以單獨設置拓撲結構
g_pd3dDevice->IASetPrimitiveTopology(?D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST?);
和使用Draw函數繪制了,很類似OpenGL
9.嚴格的設備對象創建時間驗證
這里的設備對象就是從設備創建出來的資源。為了減少CPU占用,D3D10重新設計了硬件資源調用調度,所有的設備對象都用面向對象的方法被設備
管理。這種設計方法避免了在渲染期的資源創建操作。
10.去掉BeginScene和EndScene
這個對于圖形API確實多余
Dec2005?sdk里提供的文檔讓人很快想到這只是一個過渡版本
在DXUT的Mesh.Create函數中可以看到一個很有趣的現象:
創建D3D9對象,使用D3DX9里的載入X模型文件的函數載入X文件
將D3D9的模型數據轉成D3D10的類型。這樣做無非是在告訴我們一個
這樣的信息,D3D10很有可能提供一種新的模型格式來作為研究使用
。Vista的圖形系統Avalon從一些視頻上分析,使用了大量的XML,所以
新的模型格式很有可能使用XML,并且X格式的解析接口確實不方便。而
XML的分析器可以由第三方提供。使得更多的研究人員能更方便的使用
這種新格式。
順便提供一些縮寫對應的含義,這些在一些函數前綴會出現
IA-Input?Assembler?State
SO-Stream?Output?State
OM-Output?Merger?State
VS-Vertex?Shader
PS-Pixel?Shader
GS-Geometry?Shader
Powered?by?Davy.xu
msn:sunicdavy@sina.com