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