【问题标题】:D3D11 in Metro doesn't support D3DReflect? (Why Not?)Metro 中的 D3D11 不支持 D3DReflect? (为什么不?)
【发布时间】:2012-08-29 21:48:38
【问题描述】:
Metro 中的

D3D11 不支持D3DReflect

为什么不呢?

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

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

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

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

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

【问题讨论】:

  • 嘘,我们不应该再叫它地铁了。 :)
  • 那么我应该称它为 WinRT 并像 WPF 层一样引用 Metro 吗?

标签: reflection microsoft-metro shader hlsl direct3d11


【解决方案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是可能有相同限制的平台(我不是在这个平台上开发的,所以我无法确认)。

【讨论】:

  • iOS 没有这个限制。我已经在所有平台上开发。除 Metro 外,所有平台都可以动态编译着色器代码。虽然我很喜欢你的解决方案想法,但我不想围绕它们设计我的 API。 MS 似乎试图强迫人们围绕有效代码的构成狭隘观点进行开发。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-12
  • 2011-03-17
  • 2018-07-21
  • 2013-01-04
  • 2017-10-07
  • 2018-08-24
  • 2011-09-16
相关资源
最近更新 更多