当前位置 : 主页 > 手机开发 > 其它 >

swift – Cocoa中的MTKView不会在Retina中绘制

来源:互联网 收集:自由互联 发布时间:2021-06-11
我在 Cocoa有一个MTKView. 我正在使用drawable.texture显示纹理 – 但纹理只显示超过四分之一的屏幕 – 非Retina. 我是否需要进行任何其他设置才能使其正常工作? class MyView : MTKView 以下代码无
我在 Cocoa有一个MTKView.

我正在使用drawable.texture显示纹理 – 但纹理只显示超过四分之一的屏幕 – 非Retina.

我是否需要进行任何其他设置才能使其正常工作?

class MyView : MTKView

以下代码无影响:

let scale = NSScreen.mainScreen()!.backingScaleFactor
var s = frame.size
s.width *= scale
s.height *= scale

metalLayer.contentsScale = scale
metalLayer.framebufferOnly = false
metalLayer.drawableSize = s

更新:

这是我从图像加载纹理的方法:

func textureFromImage(image: NSImage, inout tex:MTLTexture?) {


    let textureLoader = MTKTextureLoader(device: self.device!)
    do {
        tex = try textureLoader.newTextureWithCGImage(image.CGImage, options: nil)
    }
    catch {
        fatalError("Can't load texture")
    }
}

以及提供的代码:

let commandBuffer = commandQueue.commandBuffer()
    let commandEncoder = commandBuffer.computeCommandEncoder()
    commandEncoder.setComputePipelineState(pipelineState)
    commandEncoder.setTexture(originalTexture, atIndex: 0)
    commandEncoder.setTexture(drawable.texture, atIndex: 1)
    commandEncoder.dispatchThreadgroups(threadgroupsPerGrid, threadsPerThreadgroup: threadsPerThreadgroup)
    commandEncoder.endEncoding()
    commandBuffer.presentDrawable(drawable)
    commandBuffer.commit();

原始输入图像和纹理的所有大小都与视图的大小相同.

尝试将视图的contentScaleFactor更改为1.
网友评论