2

Metro中的D3D11不支持D3DReflect.

为什么不?

我的 API 使用它来动态获取着色器的常量缓冲区大小。 有没有其他方法可以在没有ID3D11ShaderReflection对象的情况下在 D3D11 中动态获得恒定的缓冲区大小?还是按名称获取常量变量?

  • 如果我想为 Metro 制作一个着色器编译工具怎么办?

  • 什么是我想要制作一个允许您动态生成需要着色器生成的复杂画笔的艺术应用程序。但这不起作用。

Windows(Desktop)OSXLinuxiOSAndroid是否有这些着色器限制?

不,那Metro到底为什么要这么做?

4

1 回答 1

1

有关它的一些讨论,请参阅http://social.msdn.microsoft.com/Forums/en-US/wingameswithdirectx/thread/9ae33f2c-791a-4a5f-b562-8700a4ab1926

没有官方立场解释他们为什么做出这样的限制,但它与 WinRT 上动态代码执行的整个限制非常相似。所以很遗憾你的应用场景是不可能的。

虽然,破解/修补 d3dcompiler_xx.dll 并重定向所有 dll 导入以调用另一个仅使用授权 API 的 DLL 是可行的,但这是相当多的工作,甚至不确定这是否合法(即使通过提取来自原始 d3dcompiler 的 dll 代码并重建一个新的 dll)。

您的场景的另一个选择是通过互联网将着色器发送到编译并返回字节码和反射信息的服务器......远非完美。

在您提到的平台中,可能iOS是可能具有相同限制的平台(我不在此平台上开发,因此无法确认)。

于 2012-08-30T06:44:55.740 回答