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

时间:2013-08-25 16:46:20

标签: directx directx-11 directx-10

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

1 个答案:

答案 0 :(得分:6)

首先,我要说的是,如果您只是将D3D10DoSomething()功能更改为D3D11DoSomething(),则不会发生任何变化。他们会做同样的事情。没有被动的收获。您必须使用明确新功能才能使您的应用更好。 D3D10没有的功能:例如硬件镶嵌,计算着色器,many many other stuff.进行编码。

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

如果答案是肯定的:

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

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

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

设备和上下文创建:

  • 在D3D11设备界面中分割为设备和上下文,因此device现在负责创建功能(大多数方法为Create*())和context负责状态更改功能(大多数方法为{ {1}} / Set*())。
  • 如果您使用其中一个Get*()函数创建设备(现在它们已成为D3D11CreateDevice*),请添加其他ID3D11DeviceContext参数,并添加与D3D_FEATURE_LEVEL相关的参数。 (更多关于功能级别here
  • D3D10CreateDevice*来电更改为device->ChangeState()

其他东西:

  • 某些函数接受其他参数。大多数情况下,您可以暂时通过deviceContext->ChangeState(),直到您不需要此功能。如果您遇到与参数数量相关的编译器错误或“无法转换参数..”,只需在DirectX 11 reference中找到此函数,看看是否必须添加额外的零参数=)

着色器:

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

以下是Microsoft的其他提示:linklink

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