unity-game-engine - C++ 代码和着色器代码之间的常量缓冲区变量如何匹配?

标签 unity-game-engine directx-11

我正在自学D3D11。我想知道c++中的变量如何与着色器中的变量匹配?

例如来自D3D11的教程:https://learn.microsoft.com/en-us/windows/win32/direct3d11/overviews-direct3d-11-resources-buffers-constant-how-to

C++中CBuffer的布局与shader中的布局完全相同。然而,在像Unity这样的一些游戏引擎中,着色器变量可以按任何顺序放置,只要我声明所有这些变量即可。这是如何实现的?

最佳答案

许多引擎(例如 Unity)都有着色器的动态绑定(bind)系统。这是 shader reflection 的某种组合和其他元数据。这是在旧 DirectX Effects system 中实现的也是如此。

最终,CPU 端内存缓冲区和着色器端常量缓冲区的布局仍然需要匹配,只是在运行时通过代码完成,而不是由开发人员完成。

关于unity-game-engine - C++ 代码和着色器代码之间的常量缓冲区变量如何匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69082080/

相关文章:

directx - 加载/存储到 XMFLOAT4 比使用 XMVECTOR 更快?

ios - 禁用 AVAudioSession 后 Unity 声音无法工作

ios - 使用 Vuforia 8.5.9 构建 Unity iOS 版本 2019.3.0f1 时出现此构建时间错误

c# - 以编程方式将相机置于 unity3d 中的对象上

c++ - 不能将 XMVECTOR 与 float 相乘

hlsl - 如何将几何着色器与输出流结合使用?

c++ - 沿前向 vector 移动和导入模型 - DirectX11 C++

unity-game-engine - #pragma except_renderers 是否会提高性能?

c# - 制作空心体素锥

c++ - 当 SampleDesc.Count > 1 时,Direct3D11 DEBUG MODE 在最​​终 COM 版本上崩溃