【发布时间】:2018-11-10 09:16:52
【问题描述】:
我是金属着色语言的新手。所以您的友好指导会很有帮助。 我只是使用金属重复纹理,如下图所示 (Image sequence). 但它似乎并不平滑。如何使它看起来像金属点的以下链接中所做的那样平滑线。(overlapping Metal Point primitives and blending)
目前我所做的是在手势的每个触摸点为顶点缓冲区 (MTLBuffer) 分配内存。
代码:
func allocateMemoryForVetexBuffer(vertices: Array<Vertex>){
var vertexData = Array<Float>()
for vertex in vertices{
vertexData += vertex.floatBuffer()
}
let dataSize = vertexData.count * MemoryLayout.size(ofValue: vertexData[0])
print("dataSize:\(dataSize)")
vertexBuffer = device.makeBuffer(bytes: vertexData, length: dataSize, options: [])
vertexCount = vertices.count
}
我在平移手势识别器中调用此方法。但它会导致 FPS 下降。所以我的问题是不知道在金属层上的单个平移上会添加多少纹理,我如何为帧缓冲区分配内存。
【问题讨论】:
-
您可能无法在每次收到触摸事件时都从 CPU 端更新缓冲区,但您可以分配一个足够大的缓冲区来容纳,例如 64四边形,然后在填充时将其长度加倍,仅绘制实际填充的缓冲区部分。
-
坦克warrenm。它有帮助。我只是分配内存并将新到达的数据复制到其中。但是当添加更多和更多纹理时,FPS 会下降。 FPS 下降的原因可能是什么?
-
量化:你画了多少点/四边形,你达到了什么 FPS?
-
FPS:60 & 一个纹理(图像)包含 6 个顶点。当触摸移动时,它会在每个触摸点绘制纹理。这意味着我的绘图中可能有数千个点。
-
我已添加工作项目供您参考。 github.com/kasunSithiraPalihakkara/metal-example
标签: swift textures metal metalkit