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 для сетчатки).