我提交了一个实际上是一堆问题的问题,所以我按照要求将它们分成了自己的单独问题。
只是一个关于direct3D 的一般性问题,如果我要使用hlsl 5.0 着色器完全在d3d11 中编写应用程序,这些是否仍仅与支持d3d10 或d3d9 的系统兼容,只是图形效果较差且d3d11 的效率较低?如果是这样,它的效率会降低多少?如果不是,除了使用 d3d9、d3d10 和 d3d11 之外,我是否真的需要制作完全相同的程序的 2 或 3 个不同版本?
我提交了一个实际上是一堆问题的问题,所以我按照要求将它们分成了自己的单独问题。
只是一个关于direct3D 的一般性问题,如果我要使用hlsl 5.0 着色器完全在d3d11 中编写应用程序,这些是否仍仅与支持d3d10 或d3d9 的系统兼容,只是图形效果较差且d3d11 的效率较低?如果是这样,它的效率会降低多少?如果不是,除了使用 d3d9、d3d10 和 d3d11 之外,我是否真的需要制作完全相同的程序的 2 或 3 个不同版本?
它在一定程度上向后兼容。但是,有几件事要记住:
总而言之,如果您的目标平台是 DX10.0+ 级硬件,则使用 DX11 在某种程度上是有意义的(因为除了硬件细分之外,差异是可以容忍的和/或缺少功能的解决方法)。如果您想支持 DX9 HW,我建议您坚持使用 DX9 SDK,因为这将允许您在 XP 上运行您的应用程序。
我不相信之前的评论是完全准确的。
您可能需要在目标机器上安装 DX11 运行时,但您应该能够在任何与 DX9+ 硬件兼容的卡上创建 D3D11Device。
但这并不能真正让您受益,因为您需要传入您支持的功能级别列表(或 NULL 表示列表),并且该函数有一个输出参数告诉您您获得了什么功能级别。因此,只有 DX9 的卡会返回 D3D_FEATURE_LEVEL_9_1(或 9_2/9_3)。
反过来,功能级别让您知道您可以使用哪些 d3d11 块以及它的行为方式(http://msdn.microsoft.com/en-us/library/windows/desktop/ff476150(v=vs.85) .aspx和http://msdn.microsoft.com/en-us/library/windows/desktop/ff476876(v=vs.85).aspx )
从这些图表中快速得出的结论是,DX11 可能适用于覆盖 DX10 和 DX11 设备。DX9 /取决于/如果你想要/需要这些功能也可以。
计算着色器主要在 DX10 硬件上工作 (http://msdn.microsoft.com/en-us/library/windows/desktop/ff476873(v=vs.85).aspx)
不,它不向后兼容。如果你想在更多平台上运行,支持directX11的显卡肯定支持directx9。所以要么在 DX9 中开发一次,要么在 DX11 和 DX9 中同时开发。