3

我有一系列着色器,通过合并一系列片段以编程方式生成。每个片段都可以有自己的纹理,它负责上传/绑定适当的值。

我在 Google 上找到的所有解决方案都可以使用纹理数组或指定寄存器(例如http://www.rastertek.com/dx11tut17.html)。这不会很好地组成。在 GL 中,这很容易,因为您可以按名称查找纹理。

这里有更好的方法吗?或者我是否必须跟踪每个片段用于通过寄存器寻址它们的纹理数量?

4

1 回答 1

1

在 OpenGL 中,您使用着色器程序自省。

DirectX 也有这样的能力:

ID3D11ShaderReflection

ID3D11ShaderReflectionConstantBuffer

ID3D11ShaderReflectionType

ID3D11ShaderReflectionVariable

定义于D3DCompiler_xx.dll

还有效果框架(教程参考),它是着色器反射的包装器,还允许像您所做的那样:“我通过合并一系列片段以编程方式生成的一系列着色器”。

只有一个问题是微软不允许部署包含这些功能的 Windows 应用商店应用程序。但是对于桌面应用程序来说没关系。

您可以在 DirectX SDK 中找到 Effect11 的完整源代码,因此您可以自己实现这样的东西。另请参阅此处了解 Win8SDK 更新版本。

快乐编码!

于 2013-08-24T03:28:37.853 回答