1、渲染狀態(tài)歸類封裝
DX9下的渲染狀態(tài)比較亂,不像DX11那樣把渲染狀態(tài)歸為幾類。按DX11的歸類,同樣也適應DX9的API。
2、VertexDeclaration從VertexBuffer里改成封裝在VertexShader里。
這里要說明一下,VertexDeclaration封裝在VertexBuffer里本來就是不太合理的,因為VertexBuffer就是一個Buffer,實際上和頂點格式關系不太大。而且,dx11中的inputlayout的創(chuàng)建還依賴于shader的創(chuàng)建代碼,因此,必須要把vertexdeclaration移到vertexshader里。而這種做法會引起DX9的一個問題,下面會說明到。
3、引擎所有渲染都用上shader,全面拋棄固定管線。
正如上面說到,如果vertexdecalaration的創(chuàng)建要依賴于shader,那么固定管線下就不能再自己創(chuàng)建vc(vertexdeclaration)了,而考慮到引擎要支持雙渲染器,所以有些操作要統(tǒng)一,就不保留固定管線了。
4、GPU參數(shù)設置的調整
之前GPU的參數(shù)更新封裝在一個類GPUParameter里,主要是負責GPU參數(shù)的值的設置,但隨著DX11的加入,這里問題就出來了。DX9下面,沒有constantbuffer的概念,只有一個一個參數(shù)設置到寄存器,而原來引擎的設計就是針對DX9的這套機制來實現(xiàn)的。所以,現(xiàn)在引擎作出調整,在dx9渲染系統(tǒng)下建一個類D3D9GPUParameters繼承自GPUParameter,DX9下如何設置參數(shù)在這個類下實現(xiàn)。
5、RenderTarget的接口改變
DX11下是把所有RenderTarget放到一個數(shù)組中然后設置進去的,而DX9是一個一個設置進去,所以當要實現(xiàn)multirendertarget的時候,如果引擎要適應兩種渲染器,那只能用DX11的設置方法了。