Как нарисовать текст в iOS Swift с использованием Metal Framework - PullRequest
0 голосов
/ 01 октября 2019

Я работаю над приложением для мониторинга данных в реальном времени. Я успешно рисовал волны, используя металлический каркас, но у меня возникают проблемы при рисовании простого текста / строк. Например, как вывести «Hello» в MTKView. Здесь я обновляю вершины, используя таймер, а затем вызываю draw () для выполнения рисования. Требуется только рендеринг с помощью графического процессора.

func draw (в представлении: MTKView) {

    // print("calling")



    //  guard let drawablelayer = metalLayer!.nextDrawable(),
    guard //let mainDrawable = view.currentDrawable,
       // let _pipeLineState = self.pipelineState,
        let discriptor = view.currentRenderPassDescriptor else  {
            return
    }

    let commandBuffer = commandQue.makeCommandBuffer()
    let commandEncoder = commandBuffer?.makeRenderCommandEncoder(descriptor: discriptor)

    //commandEncoder?.setRenderPipelineState(_pipeLineState)





    viewPort = MTLViewport.init(originX: 0.0, originY: 0.0, width: 750, height: 1334, znear: 0.0, zfar: 0.0)
    commandEncoder?.setViewport(viewPort!)




    commandEncoder?.setVertexBuffer(layoutBuffer, offset: 0, index: 0)
    commandEncoder?.setRenderPipelineState(noninterleavedRenderPipeline)
    commandEncoder?.drawPrimitives(type: .triangle, vertexStart:0, vertexCount: verticesLayout.count)


    commandEncoder?.setVertexBuffer(vertexBuffer, offset: 0, index: 0)
    commandEncoder?.setRenderPipelineState(interleavedRenderPipeline)
    commandEncoder?.drawPrimitives(type: .line, vertexStart:0, vertexCount: vertices.count)


    commandEncoder?.setVertexBuffer(topBuffer, offset: 0, index: 0)
    commandEncoder?.setRenderPipelineState(topInterleavedRenderPipeline)
    commandEncoder?.drawPrimitives(type: .triangle, vertexStart:0, vertexCount: verticesRect.count)



    commandEncoder?.endEncoding()
   // commandBuffer?.present(mainDrawable)

    if let drawable = view.currentDrawable {
        commandBuffer?.present(drawable)
    }

    commandBuffer?.commit()


}
...