1

从 directx 10 到 11 有哪些变化?我在directx 10中编写了一些代码,我想将其更改为directx 11。这只是质量问题,我可以通过更改头文件和dll文件或函数来做到这一点,并且编码方式已更改?ing。

4

1 回答 1

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 世界 =)

于 2013-08-26T02:51:27.790 回答