首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >常量缓冲变量是如何在C++代码和着色代码之间匹配的?

常量缓冲变量是如何在C++代码和着色代码之间匹配的?
EN

Stack Overflow用户
提问于 2021-09-07 03:23:00
回答 2查看 222关注 0票数 2

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

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-11 23:57:05

许多引擎,如团结,有动态绑定系统的着色器。这是阴影反射和其他元数据的某种组合。这也是在旧的DirectX 效应体系中实现的。

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

票数 2
EN

Stack Overflow用户

发布于 2021-09-08 03:12:14

我还没有深入了解渲染引擎如何自动将着色器变量绑定到图形管道的布局中。但这是我的猜测。

  • 当游戏引擎编译着色器代码时,它将编写一些着色器头信息,包括着色器变体的布局。

这可以通过诸如glslang这样的工具来实现。这种工具可以将着色器源代码转换为抽象语法树( ast ),这意味着将着色代码解析为输入属性和输出变量等多种类型的ast节点。此时,它可以将显式布局分配给输入着色器变量,并将布局保存在着色器标题中。

  • 在初始化图形管道时,可以根据着色器标头创建管道布局。

以上只是我对可能的实现的猜测。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69082080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档