Reflection 地铁中的D3D11不';你不支持D3DReflect吗?(为什么不呢?)

Reflection 地铁中的D3D11不';你不支持D3DReflect吗?(为什么不呢?),reflection,microsoft-metro,shader,hlsl,direct3d11,Reflection,Microsoft Metro,Shader,Hlsl,Direct3d11,Metro中的D3D11不支持D3DReflect 为什么不呢? 我的API使用它动态获取着色器的恒定缓冲区大小。 是否有其他方法可以在D3D11中动态获取常量缓冲区大小,而无需ID3D11ShaderReflection对象?或按名称获取常量变量 如果我想为Metro制作一个着色器编译器工具呢 我想要做的是一个艺术应用程序,它允许您动态生成需要着色器生成的复杂笔刷。但这不起作用 Windows(桌面)、OSX、Linux、iOS或Android是否有这些着色器限制 不,那么到底为什么要使用

Metro中的D3D11不支持
D3DReflect

为什么不呢?

我的API使用它动态获取着色器的恒定缓冲区大小。 是否有其他方法可以在D3D11中动态获取常量缓冲区大小,而无需
ID3D11ShaderReflection
对象?
或按名称获取常量变量

  • 如果我想为Metro制作一个着色器编译器工具呢

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

Windows(桌面)OSXLinuxiOSAndroid是否有这些着色器限制

不,那么到底为什么要使用Metro呢?

有关它的一些讨论,请参阅

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

尽管可以对d3dcompiler_xx.dll进行黑客攻击/修补,并将所有dll导入重定向到调用另一个仅使用授权API的dll,但这是相当多的工作,甚至不能确定这是否合法(即使从原始d3dcompiler中提取dll代码并重建新的dll)

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


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

Shhh,我们不应该再称之为Metro了。:)那么,我应该称之为WinRT,并像WPF层那样引用Metro吗?iOS没有这个限制。我已经在所有平台上开发了。除Metro外,所有平台都可以动态编译着色器代码。虽然我非常喜欢你的解决方案,但我不想围绕它们设计API。微软似乎在试图迫使人们从狭隘的角度来理解什么是有效代码。