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