gpt4 book ai didi

ios - 我可以从我的 Metal 着色器中获取缓冲区的大小吗?

转载 作者:可可西里 更新时间:2023-11-01 05:40:54 26 4
gpt4 key购买 nike

在我用 Swift 编写的 iOS 应用程序中,我生成了一个 Metal 缓冲区:

vertexBuffer = device.newBufferWithBytes(vertices, length: vertices.count * sizeofValue(vertices[0]), options: nil)

并将它绑定(bind)到我的着色器程序:

renderCommandEncoder.setVertexBuffer(vertexBuffer, offset: 0, atIndex: 1)

在用 Metal 着色语言编写的着色器程序中,我可以访问缓冲区的大小吗?我想访问缓冲区中的下一个顶点以进行一些差分计算。像这样的东西:

vertex float4 my_vertex(const device packed_float3* vertices [[buffer(1)]],
unsigned int vid[[vertex_id]]) {
float4 vertex = vertices[vid];
// Need to clamp this to not go beyond buffer,
// but how do I know the max value of vid?
float4 nextVertex = vertices[vid + 1];
float4 tangent = nextVertex - vertex;
// ...
}

我唯一的选择是将顶点数作为统一传递吗?

最佳答案

据我所知,不,你不能,因为顶点指向一个地址。就像 C++ 一样,必须有两件事才能知道数组的数量或大小:
1) 知道数组的数据类型(float 或一些结构)

2a) 数据类型的数组计数或
2b) 数组的总字节数。

所以是的,您需要将数组计数作为统一传递。

关于ios - 我可以从我的 Metal 着色器中获取缓冲区的大小吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26461063/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com