Я новичок в Metal, но прилежно работаю над образцом проекта AVCamFilter от Apple. . Проект демонстрирует использование MTKView в качестве предварительного просмотра для AVCaptureSession.
Мне не удалось выяснить, как сделать мой MTKView рендерингом «в полноэкранном режиме» (особенно на iPhone X, XS и iPad Pro 3-го поколения). Хотя мои ограничения правильно установлены в раскадровке, предварительный просмотр моей камеры масштабируется до другого соотношения сторон, а не в полноэкранном режиме.
В качестве теста поставил;
self.clearColor = MTLClearColor(red: 1.0, green: 0.0, blue: 0.0, alpha: 1.0)
в моем MTKView init, подтверждающем, что MTKView имеет правильный размер (я вижу красный фон в проблемных областях, но предварительный просмотр моей камеры не растягивается, чтобы заполнить экран).
Я считаю, что моя проблема существует в этом расчете;
// Calculate scale.
if textureWidth > 0 && textureHeight > 0 {
switch textureRotation {
case .rotate0Degrees, .rotate180Degrees:
scaleX = Float(internalBounds.width / CGFloat(textureWidth))
scaleY = Float(internalBounds.height / CGFloat(textureHeight))
case .rotate90Degrees, .rotate270Degrees:
scaleX = Float(internalBounds.width / CGFloat(textureHeight))
scaleY = Float(internalBounds.height / CGFloat(textureWidth))
}
}
// Resize aspect ratio.
resizeAspect = min(scaleX, scaleY)
if scaleX < scaleY {
scaleY = scaleX / scaleY
scaleX = 1.0
} else {
scaleX = scaleY / scaleX
scaleY = 1.0
}
В моей тестовой среде размер моей текстуры составляет 2400x1800, а мои внутренние границы - 834x1194. Хотя я осознаю разницу в соотношении сторон, я пытаюсь вычислить правильную математику, чтобы текстура заполняла весь дисплей (даже если это означает, что она немного меньше масштабируется, и я теряю часть текстуры по бокам).
Может кто-нибудь посоветовать? Спасибо!
MTLRenderCommandEncoder
во время рендеринга. Это то, что влияет на размер визуализированного вывода. - person trojanfoe   schedule 22.02.2019draw()
, как я полагаю, - это то место, где будет установлено окно просмотра, хотя рабочий образец от Apple не имеет такой ссылки. - person ZbadhabitZ   schedule 22.02.2019MTKView
делегатаMTKView:drawableSizeWillChange:
. - person trojanfoe   schedule 22.02.2019MTKViewDelegate
в этом проекте. Я просмотрел весь образец и нигде не нашелdrawableSizeWillChange
метода. - person ZbadhabitZ   schedule 22.02.2019internalPixelBuffer
, размер которого равенself.bounds
, и поэтому он должен работать независимо от размера представления (как и следовало ожидать). Вы, вероятно, должны подозревать свою конфигурацию ограничений. Извините за потраченное время на предположения по поводу реализации, - person trojanfoe   schedule 23.02.2019MTKView
, пустые области будут правильно отображать цвет фона. Это наводит меня на мысль, что мои ограничения верны, но масштабирование предварительного просмотра камеры не принимает во внимание обновленные размеры экрана на новых устройствах. На самом деле я нашел еще один образец проекта Apple, в котором есть похожий предварительный просмотр Metal, но он работает так, как я ожидал, и я работаю над прочесыванием кода, чтобы найти разницу. Я обновлю вопрос, если смогу разобраться! - person ZbadhabitZ   schedule 23.02.2019