glsl - Vulkan GLSL 中 block 名称有什么用?

标签 glsl vulkan

获取此 GLSL 示例代码:


layout(set = 0, binding = 0) uniform BlockName {
    mat4 someMtx;
} instanceName;

在此上下文中“BlockName”的用途是什么?

我知道您可以使用 block 名称来匹配管道阶段的输入/输出。但 Vulkan 中统一 block 的用途是什么?

最佳答案

目的是 GLSL 需要它

GLSL 是为 OpenGL 制作的。它可以与 Vulkan 一起使用,但 GLSL 的实际功能是为了满足 OpenGL 的需求而设计的。由于 Vulkan 是一个非常不同的 API,这意味着您有时会拥有残留的功能。

像这些。

在 OpenGL 中,资源是通过名称来识别和查询的。如果两个资源使用相同的名称,则它们是相同的资源(它们还必须与其他属性匹配或出现错误结果,但名称匹配是必需的)。因此, block 名称成为 GLSL interface blocks 语法的一部分。 。您不能将它们放在任何接口(interface) block 上(UBO 是接口(interface) block 的子集)。

Vulkan(和 SPIR-V)不关心名称。对于接口(interface)变量,该名称仍然有用,因为 GLSL 代码本身在想要访问该变量时使用该名称。但 block 名称​​仅由外部 API 使用; GLSL 代码本身从未使用过它们。

因此,当您使用仅接口(interface)名称的 GLSL 构造来提供不关心接口(interface)名称的 API 时,您会得到 block 名称:一个需要存在的名称,因为 GLSL需要它,但实际上并没有做 GLSL 期望的事情。

关于glsl - Vulkan GLSL 中 block 名称有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75338016/

相关文章:

c++ - OpenGL: Gamma 校正后的图像看起来不是线性的

c++ - 如何使用键盘和鼠标输入来导航图形

vulkan - Vulkan中的RenderPass和Pipeline是什么关系?

c++ - Vulkan 将视口(viewport)结果翻转为黑屏

nvidia - Vulkan API : max MSAA samples supported is VK_SAMPLE_COUNT_8_BIT

c++ - 如何修复不正确的 Blinn-Phong 光照

ios - 使用 OpenGL ES 2.0/cocos2d 2.0 绘制圆的最佳方法?

vulkan - 如何在多个 VkDevice 之间共享缓冲区(或图像)?

glsl - 如何在 GLSL 中复制数组?

java - glfwGetWindowSize 结果为 SIGSEGV (LWJGL)