Странное различие между портретным и ландшафтным режимом с металлическим iPhone - PullRequest
0 голосов
/ 30 декабря 2018

Я пишу металлическое приложение для iPhone.У меня есть тонны опыта OpenGL, так что это не должно быть слишком сложно, верно?

НЕПРАВИЛЬНО.

Я рендеринг этой 2-й сцены прямоугольников без коррекции соотношения сторон - вершиныв [-1,1] x [-1,1] координатах, поэтому это должно заполнить весь экран и исказить сцену, чтобы соответствовать экрану.

Кстати, это работает на относительно новой версии iPhone, версия12.1.2 (16C101).

В альбомном режиме (ширина> высота) вот что я получаю (изображение на экране): https://imgur.com/r7gJXct. Половина экрана пуста.

В портретном режиме (высота> ширина) я получаю именно то, что ожидал (искаженные квадраты): https://imgur.com/ZoPoHhR.

Я думаю, что происходит то, что Металл просто воспроизводит портретный режим и обрезает все, что выходит изЭкран, без «сжатия» его в окне просмотра экрана.

Код - это просто основной металлический код, без конфигурации.Я взял стандартный металлический iOS-проект, удалил код в Renderer и следовал учебному пособию Hello Triangle с униформой, отправленной в шейдер, и различными данными вершин.

Как мне исправить эту «ошибку»?Это даже ошибка?

1 Ответ

0 голосов
/ 30 декабря 2018

Разобрался!

Наверное, в func mtkView(_ view: MTKView, drawableSizeWillChange size: CGSize) мне нужно добавить строку metalLayer.frame = view.layer.frame, и она работает.

...