“VkVertexInputBindingDescription”中“绑定”的目的是什么?

2024-01-04

https://www.khronos.org/registry/vulkan/specs/1.0/man/html/VkVertexInputBindingDescription.html https://www.khronos.org/registry/vulkan/specs/1.0/man/html/VkVertexInputBindingDescription.html

  • 绑定是该结构描述的绑定号。

我不确定这意味着什么,例如https://github.com/SaschaWillems/Vulkan/blob/master/triangle/triangle.cpp https://github.com/SaschaWillems/Vulkan/blob/master/triangle/triangle.cpp

    #define VERTEX_BUFFER_BIND_ID 0
    ....
    vertices.inputAttributes[0].binding = VERTEX_BUFFER_BIND_ID;
    vertices.inputAttributes[0].location = 0;
    vertices.inputAttributes[0].format = VK_FORMAT_R32G32B32_SFLOAT;
    vertices.inputAttributes[0].offset = offsetof(Vertex, position);
    // Attribute location 1: Color
    vertices.inputAttributes[1].binding = VERTEX_BUFFER_BIND_ID;
    vertices.inputAttributes[1].location = 1;
    vertices.inputAttributes[1].format = VK_FORMAT_R32G32B32_SFLOAT;
    vertices.inputAttributes[1].offset = offsetof(Vertex, color);

顶点着色器看起来像这样

#version 450

#extension GL_ARB_separate_shader_objects : enable
#extension GL_ARB_shading_language_420pack : enable

layout (location = 0) in vec3 inPos;
layout (location = 1) in vec3 inColor;

layout (binding = 0) uniform UBO 
{
    mat4 projectionMatrix;
    mat4 modelMatrix;
    mat4 viewMatrix;
} ubo;

layout (location = 0) out vec3 outColor;

out gl_PerVertex 
{
    vec4 gl_Position;   
};


void main() 
{
    outColor = inColor;
    gl_Position = ubo.projectionMatrix * ubo.viewMatrix * ubo.modelMatrix * vec4(inPos.xyz, 1.0);
}

为什么是binding0?什么时候它的值会不同于 0?目的是什么binding?

我的第一个想法是它可能是 glsl 中的一个特殊限定符https://www.opengl.org/wiki/Layout_Qualifier_(GLSL)#Binding_points https://www.opengl.org/wiki/Layout_Qualifier_(GLSL)#Binding_points .

但这似乎不适用于顶点输入限定符。

Update:

我想我已经明白绑定的目的是什么了

void vkCmdBindVertexBuffers(
    VkCommandBuffer                             commandBuffer,
    uint32_t                                    firstBinding,
    uint32_t                                    bindingCount,
    const VkBuffer*                             pBuffers,
    const VkDeviceSize*                         pOffsets);

我假设您可以拥有具有某些支持状态的管道,但它仍然可以更改顶点输入布局,以便每个管道可以有不同的着色器。

然后是binding只是“动态”更改顶点布局的唯一标识符。


我想我已经明白绑定的目的是什么了

不,你还没有,但你已经很接近了。

缓冲区绑定的含义与使用时相同单独的属性格式 https://www.opengl.org/wiki/Vertex_Specification#Separate_attribute_format在OpenGL中。有属性位置和缓冲区绑定索引。每个属性位置都有一个格式和偏移量,用于定义如何解释其数据。但它还必须有一种方法来说明它使用哪个缓冲区。

在 Vulkan 中,属性及其格式是不可变的对于特定的管道。管道的属性格式是在创建时建立的,无法更改。但是,那buffers从中提取的属性是可变状态。它们在管道创建时并未固定。

binding是一个索引pBuffers数组由vkCmdBindVertexBuffers。每个顶点属性都有一个binding这说明属性从哪个缓冲区绑定索引获取数据。但缓冲itself创建时未指定。您可以动态设置它vkCmdBindVertexBuffers.

So the binding属性的值为相当于binding您提供的价值glVertexAttribBinding. https://stackoverflow.com/a/37972230/734069

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“VkVertexInputBindingDescription”中“绑定”的目的是什么? 的相关文章

随机推荐

  • 像工具一样的行为:自定义视图中的文本?

    我有一个自定义视图 布局中有两个文本视图 我们来叫一个key和另一个value 所以你知道怎么做TextView有这个吗
  • 如何从 Minecraft 编辑 .mca 文件?

    介绍 我想将我的各个 Minecraft 世界合并成一个世界 这似乎是一个相对容易的壮举 但随着我的研究 它演变成需要制作一个自定义程序 奋斗 我首先移动区域文件并将它们合并到一个区域文件夹中 这似乎是显而易见的解决方案 而且几乎有效 注意
  • 如何在Plone 5上自定义folder_contents?

    我在 Plone 5 上 我想修改默认显示的列数 folder contents 如果我没记错的话 整个table是一种在相应标签上使用相当大的 JSON data xxx 参数进行初始化的模式 那么 我应该深入研究 JSON 还是将注意力
  • 使用 jQuery 绘制动画线条

    我想使用 jQuery 来创建就像用隐形笔绘制线条图的效果 有点像这样 http d2fhka9tf2vaj2 cloudfront net tuts 152 QTiPad Milestones JavaScriptWebsite html
  • 如何修复 facebook Messenger-checkbox 的 CSP 问题

    我正在努力使Facebook Messenger 复选框 https developers facebook com docs messenger platform plugin reference checkbox plugin工作 我已
  • SKLabelNode没有透明背景

    您好 我在 SKLabelNode 上使用自定义字体 我可以设置字体颜色 但是还可以 但是文本的内部部分是透明的 例如 有什么方法可以将这种颜色设置为白色吗 到目前为止我的代码 scoreLabel fontColor SKColor co
  • 发布集合和 ModelState

    我的 MVC 应用程序中有一个问题 我不确定如何解决 或者我是否以错误的方式解决它 我有一个控制器 视图 它在带有复选框的网格中显示项目列表 当这些项目发布到我的控制器时 我想根据传入的 id 从数据库中删除行 该视图看起来像这样 for
  • 强制 IE9 使用浏览器模式而不是兼容模式

    我在用 in head标签 但是 当我在 IE9 上运行我的应用程序时 它使用浏览器模式 IE 9 紧凑视图 我希望我的应用程序仅使用浏览器模式 IE9 not 兼容视图 我意识到我在这方面有点晚了 但这是我使用过的并且它对我有用 确保这是
  • html5画布中的“擦除”

    我在 html5 canvas 中有一个涂鸦应用程序 我正在尝试找出实现橡皮擦控件的最佳方法 第一个冲动只是让橡皮擦绘制背景颜色 白色 但这是有问题的 因为如果用户将图像或另一层移动到他们之前擦除的位置 他们会在擦除的位置看到白色绘图 理想
  • FetchXml 中的左连接?

    如何使用 FetchXml 进行左连接 考虑一个简单的 SQL 查询 如下所示 select person name address city from person left join address on person addressi
  • QToolTip 中包含的变量不会自动更新

    我在 QLineEdit 上有一个 QToolTip 并且工具提示包含文本中的变量 工具提示代码包含在 init h 文件中 问题是工具提示中的变量值在程序运行中发生更改时不会自动更新 例如 我将鼠标悬停在行编辑上 值会显示在工具提示中 我
  • 在 JavaScript 中为属性添加别名

    我认为这很简单 有没有一种简单的方法来添加属性的辅助名称 我认为这是特定于字符串的 我不确定 即 c length this line pseudo code hello world length returns 11 hello worl
  • Scala Slick 2 加入多个字段?

    如何在多个字段上进行连接 如下例所示 val ownerId 1 val contactType 1 val contact for t c lt ContactTypes leftJoin Contacts on id typeId ow
  • XCode 4 与 Git/Github 无法提交图像

    源代码文件已提交 但图像未提交 错误信息 错误 pathscpec 与 git 已知的任何文件都不匹配 XCode 发行说明提到现在提交二进制文件存在问题 他们建议 在收到该错误后 您应该转到命令行并执行 git commit
  • JavaScript同步执行

    我是 javascript 新手 正在尝试使用滑块 我的问题类似于以下问题jquery attr 带回调 https stackoverflow com questions 4040712 jquery attr with callback
  • 在 Azure SQL DB 中启用和配置 FILESTREAM

    如何在 AZURE SQL DB 中存储 PDF 文件 上述要求我在 Azure SQL DB 上启用和配置 FILESTREAM 目前 当我运行创建表查询时出现此错误 Msg 40517 Level 16 State 1 Line 28
  • 数据列表分页?

    我有一个包含动态内容的数据列表 我需要启用对此数据列表的分页 我在 Visual Studion 2010 下使用 asp net c 请向我发送如何启用对数据列表分页的代码 这是数据列表的代码
  • 第一次偶然异常发生在 XMLSerializer 的构造函数中[重复]

    这个问题在这里已经有答案了 可能的重复 XmlSerializer 在构造函数中给出 FileNotFoundException https stackoverflow com questions 1127431 xmlserializer
  • Github - 分叉一个私人仓库

    我已被添加到一个拥有一些私有存储库的组织 我需要向他们发送包含一些更改的拉取请求 但我不知道是否可以 我在 GitHub 上没有付费帐户 那么如何分叉该私有存储库来修改和发送拉取请求 正如 如果我将其他人的私人 Github 存储库分叉到我
  • “VkVertexInputBindingDescription”中“绑定”的目的是什么?

    https www khronos org registry vulkan specs 1 0 man html VkVertexInputBindingDescription html https www khronos org regi