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