1、渲染状态归类封装
DX9下的渲染状态比较乱,不像DX11那样把渲染状态归为几类。按DX11的归类,同样也适应DX9的API。
2、VertexDeclaration从VertexBuffer里改成封装在VertexShader里。
这里要说明一下,VertexDeclaration封装在VertexBuffer里本来就是不太合理的,因为VertexBuffer就是一个Buffer,实际上和顶点格式关系不太大。而且,dx11中的inputlayout的创建还依赖于shader的创建代码,因此,必须要把vertexdeclaration移到vertexshader里。而这种做法会引起DX9的一个问题,下面会说明到。
3、引擎所有渲染都用上shader,全面抛弃固定管线。
正如上面说到,如果vertexdecalaration的创建要依赖于shader,那么固定管线下就不能再自己创建vc(vertexdeclaration)了,而考虑到引擎要支持双渲染器,所以有些操作要统一,就不保留固定管线了。
4、GPU参数设置的调整
之前GPU的参数更新封装在一个类GPUParameter里,主要是负责GPU参数的值的设置,但随着DX11的加入,这里问题就出来了。DX9下面,没有constantbuffer的概念,只有一个一个参数设置到寄存器,而原来引擎的设计就是针对DX9的这套机制来实现的。所以,现在引擎作出调整,在dx9渲染系统下建一个类D3D9GPUParameters继承自GPUParameter,DX9下如何设置参数在这个类下实现。
5、RenderTarget的接口改变
DX11下是把所有RenderTarget放到一个数组中然后设置进去的,而DX9是一个一个设置进去,所以当要实现multirendertarget的时候,如果引擎要适应两种渲染器,那只能用DX11的设置方法了。