我有一系列着色器,我通过合并一系列片段以编程方式生成。每个片段都可以拥有自己的纹理,并负责上传/绑定适当的值。
我在Google上找到的所有解决方案都可以使用纹理数组或指定寄存器(例如http://www.rastertek.com/dx11tut17.html)。这不会很好。在GL中,这很容易,因为您按名称查找纹理。
这里有更好的方法吗?或者我是否必须通过寄存器跟踪每个片段用于解决它们的纹理数量?
答案 0 :(得分:1)
在OpenGL中,您使用着色器程序内省。
DirectX还具有以下功能:
ID3D11ShaderReflectionConstantBuffer
ID3D11ShaderReflectionVariable
在D3DCompiler_xx.dll
还有效果框架(tutorial,reference),这是一个围绕着色器反射的包装器,也允许你做过的事情:“我以编程方式生成的一系列着色器合并一系列片段“。
只有一个问题是Microsoft不允许部署包含这些功能的Windows应用商店应用。但桌面应用程序也没问题。
您可以在DirectX SDK中找到Effect11的完整源代码,因此您可以自己实现这样的功能。另请参阅here获取Win8SDK更新版本。
快乐的编码!