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