首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数据添加到金属中MTLBuffer的现有内容中

将数据添加到金属中MTLBuffer的现有内容中
EN

Stack Overflow用户
提问于 2018-06-01 04:56:59
回答 1查看 831关注 0票数 0

如何将数据附加到MTLBuffer?

我有以下数据:

代码语言:javascript
复制
var verticesArray:Array<Vertex>  = [
                A,B,C ,D,E,F
            ]

我创建了一个vertexBuffer(MTLBuffer),它可以存储多个顶点数组。

代码语言:javascript
复制
var vertexData = Array<Float>()
    for vertex in vertices{
        vertexData += vertex.floatBuffer()
    }

    let dataSize = 1000*vertexData.count * MemoryLayout.size(ofValue: vertexData[0])
    vertexBuffer = device.makeBuffer(bytes: vertexData, length: dataSize, options: [])

我需要向vertexBuffer追加另一组顶点,如下所示。

代码语言:javascript
复制
var verticesArray2:Array<Vertex>  = [
                    G,H,I ,J,K,L
                ]

我怎样才能附加?需要帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-20 17:30:18

金属缓冲区不像Swift数组、Obj C NSMutableArray或C++ STL向量。缓冲区有固定的内存支持,因此不能调整其大小以添加/追加更多数据。

相反,您需要创建足够大的新缓冲区,以适应现有数组的数据和要追加的新元素,然后将它们复制到新的扩展缓冲区中。由于创建缓冲区和复制非常昂贵,所以最好在每次创建新缓冲区时创建额外的空间,这样您就可以“追加”多次,而无需创建新的缓冲区并每次复制。此外,如果数据位于另一个缓冲区中的GPU上,则应该使用MTLBlitCommandEncoder执行对扩展缓冲区的复制操作。

我想知道你最终想要用这个缓冲器完成什么,因为它可能不是金属的一个很好的用途。

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

https://stackoverflow.com/questions/50636335

复制
相关文章

相似问题

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