MTKView в Какао не рисует в сетчатке

У меня есть MTKView в какао.

Я отображаю текстуру с drawable.texture - но текстура показывает только более четверти экрана - Non-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();

Все размеры исходного входного изображения и текстуры совпадают с размерами вида.

2 ответа

Попробуйте изменить contentScaleFactor для представления на 1.

Опоздал на вечеринку на 5 лет, но у меня возникла эта проблема, потому что я позвонил
renderEncoder.setViewport(MTLViewport(originX: 0, originY: 0, width: Double(viewport.x), height: Double(viewport.y), znear: -1.0, zfar: 1.0))с viewport.x/y в точках вместо пикселей.

Для правильной визуализации я умножил x/y на масштаб экрана (x2 для сетчатки).

Другие вопросы по тегам