关于VertexDeclaration的设计改进。

关于VertexDeclaration的设计改进。

    vertexdeclaration在引擎中,原来是直接放在vertexbuffer里面,当设置这个vertexbuffer的时候再设这个declaration,在DX9中看似没问题,因为每个vertexbuffer都有自己的顶点格式。但在DX11中,vertexdeclaration实际上就是inputlayout,而且inputlayout的创建是要依赖vertexshader的代码内容的。因此,如果把顶点声明放到vertexbuffer里面,在DX11就无法创建了。
    实际上,无论是DX9还是DX11,vertexbuffer和vertexdeclaration都是无任何关系的,如果引擎要适应DX11和DX9两个渲染器,那么,vertexdeclaration就要依赖于vertexshader了。我可以通过一些配置文件达到每个VS具体要创建怎么样的vertexdeclaration,在设置vs的时候再把vertexdeclaration设置进去,看似问题解决了。但细想一下:DX9下有用到固定管线的,固定管线的话,意味着有些地方就是没有vertexdeclaration了,按引擎的设计标准,FVF也没有使用,那这样用了固定管线的物体就会出问题了。为了解决这个问题,现在想到唯一的解决办法是:即使是DX9下,所有的渲染都用shader,完全抛弃掉DX9的固定管线。
    引擎要做到适应DX9和DX11双渲染器还是有一定难度的……

你可能感兴趣的:(关于VertexDeclaration的设计改进。)