MTKView - Изменение размера текстуры, чтобы заполнить вид - PullRequest
0 голосов
/ 22 февраля 2019

Я очень плохо знаком с Metal, но стараюсь следовать образцу проекта AVCamFilter от Apple.Проект демонстрирует использование MTKView в качестве предварительного просмотра для AVCaptureSession.

Мне не удалось выяснить, как сделать так, чтобы мой MTKView отображал «полный экран» (особенно на iPhone X, XS и iPad Pro третьего поколения),Пока мои ограничения правильно установлены в раскадровке, предварительный просмотр камеры масштабируется с другим соотношением сторон, а не в полноэкранном режиме.

В качестве теста я установил:

self.clearColor = MTLClearColor(red: 1.0, green: 0.0, blue: 0.0, alpha: 1.0)

в инициализации моего MTKView, подтверждая, что 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.Хотя я распознаю разницу в соотношении сторон, я пытаюсь найти правильную математику, чтобы текстура заполняла весь экран (даже если это означает, что она масштабируется немного меньше, и я теряю некоторые текстуры по бокам).

Кто-нибудь может посоветовать?Спасибо!

...