从 directx 10 到 11 有哪些变化?我在directx 10中编写了一些代码,我想将其更改为directx 11。这只是质量问题,我可以通过更改头文件和dll文件或函数来做到这一点,并且编码方式已更改?ing。
问问题
447 次
1 回答
6
首先,我需要说,如果您只是将D3D10DoSomething()
函数更改为D3D11DoSomething()
. 他们会做同样的事情。没有被动增益。您必须明确使用新功能才能使您的应用程序更好。D3D10 不具备的那些特性:例如硬件曲面细分、计算着色器以及许多其他东西。要编码。
所以,主要问题是“你真的需要这个功能吗”?或者,也许,“您以后会需要这些功能”吗?当你看到你古老的 D3D10 代码时,你的编码伙伴会笑吗?
如果答案是肯定的:
DirectX 10 到 11 的移植非常简单。与 DirectX 9 到 10 的移植相比,这只是一个笑话。
以下是在将 D3D10 移植到 D3D11 时要做的事情的简短且非详尽的列表:
- 备份您的资源
- 获取文本查找替换工具(例如在 Visual Studio 或 grep 中),找到“D3D10”并替换为“D3D11”
- 替换
#include <d3d10*>
为#include <d3d11*>
- 在链接器选项中替换
d3d10*.lib
为d3d11*.lib
设备和上下文创建:
- 在 D3D11 设备接口中拆分为设备和上下文,因此设备现在负责创建功能(大多数方法是
Create*()
)和上下文负责状态更改功能(大多数方法是Set*()
/Get*()
)。 - 在您使用其中一种功能创建设备的地方
D3D10CreateDevice*
(现在它们已成为D3D11CreateDevice*
),添加其他ID3D11DeviceContext
参数并添加与D3D_FEATURE_LEVEL
. (更多关于功能级别的信息) device->ChangeState()
将呼叫更改为deviceContext->ChangeState()
其他的东西:
- 一些函数接受额外的参数。大多数时候,您只是可以
0
消磨时间,直到您不需要此功能为止。如果您遇到与参数数量或“无法转换参数..”相关的编译器错误,只需在DirectX 11 参考中找到此函数,看看是否必须添加额外的零参数 =)
着色器:
- 顶点、几何、像素着色器大部分未更改,因此您可以安全地使用旧的着色器。
- 如果你使用 Effect10 框架,事情可能会更复杂,但移植仍然需要一个小时左右的时间。如有问题,请参阅Microsoft 网站或 Google。
嗯,大部分都完成了!欢迎来到 D3D11 世界 =)
于 2013-08-26T02:51:27.790 回答