如何在版本之间进行迁移?

vir*_*uso 1 directx directx-11 directx-10

从directx 10到11有什么变化?我已经在directx 10中编写了一些代码,我想将其更改为directx 11.这仅仅是关于质量而我只能通过更改headrs和dll文件或函数以及编码方式来改变它吗?ING.

Iva*_*rop 6

首先,我需要说的是,如果你只是改变你的D3D10DoSomething()功能,什么都不会改变D3D11DoSomething().他们会做同样的事情.没有被动的收获.您必须明确使用新功能才能使您的应用更好.D3D10没有的那些功能:例如硬件镶嵌,计算着色器,许多其他东西.要编码.

所以,主要的问题是"你真的需要这个功能"吗?或者,也许,"你以后会需要这些功能吗?" 当您看到古老的D3D10代码时,您的编码是否会笑?

如果答案是肯定的:

DirectX 10到11移植非常简单.与DirectX 9到10移植相比,这只是一个笑话.

以下是将D3D10移植到D3D11时要做的简短而非详尽的清单:

  • 备份您的来源
  • 获取文本查找替换工具(如在Visual Studio或grep中),找到"D3D10"并替换为"D3D11"
  • 替换#include <d3d10*>#include <d3d11*>
  • 替换d3d10*.libd3d11*.lib链接器选项

设备和上下文创建:

  • 在D3D11设备接口分裂为设备和上下文,因此设备现在负责创建功能(大多数方法Create*())和上下文负责状态更改功能(大多数方法是Set*()/ Get*()).
  • 在使用其中一个D3D10CreateDevice*函数(现在已经成为D3D11CreateDevice*)创建设备的位置,添加其他ID3D11DeviceContext参数并添加与之相关的参数D3D_FEATURE_LEVEL.(更多关于这里的功能级别)
  • 更改device->ChangeState()来电deviceContext->ChangeState()

其他的东西:

  • 一些函数接受其他参数.大多数时候你只是可以通过0,直到你不需要这个功能.如果您遇到与参数数量相关的编译器错误或"无法转换参数..",只需在DirectX 11参考中找到此函数,看看是否必须添加额外的零参数=)

着色器:

  • 顶点,几何,像素着色器几乎不变,因此您可以安全地使用旧的.
  • 如果您使用Effect10框架,事情可能会更复杂,但仍然移植将花费一个小时左右的时间.如有疑问,请参阅Microsoft网站或Google.

以下是Microsoft的其他提示:链接,链接.

好吧,大部分都完成了 欢迎来到D3D11世界=)