Metro中的D3D11不支持D3DReflect? (为什么不?)

时间:2012-08-29 21:48:39

标签: reflection microsoft-metro shader hlsl direct3d11

Metro 中的

D3D11 不支持D3DReflect

为什么不呢?

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

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

  • 我想制作一个Art应用程序,让您动态生成需要着色器生成的复杂画笔。但这不起作用。

Windows(桌面) OSX Linux iOS Android 有这些着色器限制吗?

不,那么为什么地铁呢?

1 个答案:

答案 0 :(得分: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可能具有相同的限制(我不在这个平台上开发,所以我无法确认)。