Повторение текстуры на жесте панорамирования в Metal Shading Language - PullRequest
0 голосов
/ 31 мая 2018

Я новичок в языке затенения металла. Так что ваше любезное руководство будет очень полезным.Я только что повторил текстуру, используя металл, как показано на изображении ниже (последовательность изображений). Но оно кажется не плавным. Как сделать так, чтобы оно выглядело как плавная линия, как это сделано в следующей ссылке для металлических точек. ( перекрывающиеся примитивы Metal Point и смешение )

В данный момент я занимаюсь выделением памяти для буфера вершин (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. Так что моя проблема заключается в том, что я не знаю, сколько текстур добавит на одну панораму на слое металла, как я могу выделить память дляFrame Buffer.

1 Ответ

0 голосов
/ 01 июня 2018

Вы без необходимости используете инстансинг.

Измените это:

renderEncoder.drawPrimitives(type: .triangle, vertexStart: 0, vertexCount: vertexCount, 
                             instanceCount: vertexCount / 3)

на это:

renderEncoder.drawPrimitives(type: .triangle, vertexStart: 0, vertexCount: vertexCount)
...