Я занимаюсь разработкой игры для Android с использованием API Android NDK Vulkan.Код, по большей части, на C ++ 14.В большинстве случаев все работает нормально, однако на некоторых устройствах у меня возникает такая проблема, когда координаты x и y переключаются.Я рисую то, что я считаю верхней частью экрана, и это рисует объекты сбоку.Кроме того, когда я делаю что-либо с точкой зрения (матрица вида), x и y меняются местами.Если я перемещаю точку обзора в направлении x, она фактически перемещается в направлении y.
Кроме того, ширина и высота, сообщаемые цепочкой обмена, меняются местами.Так что, если я вставлю эти значения в матрицу перспективы следующим образом:
glm :: перспектива (glm :: radians (60.0f), swapchainRetrievedWidth / (float) swapchainRetrievedHeight, 0.1f, 10.0f);
он будет рисовать ужасно перекошенные объекты.Но если я переверну ширину и высоту, как показано ниже:
glm ::спектива (glm :: radians (60.0f), swapchainRetrievedHeight / (float) swapchainRetrievedWidth, 0.1f, 10.0f);
Объекты выглядят отлично.
Одно устройство, на котором это происходит, использует Adreno 530, API версии 1.0.49, версию драйвера: 35.143.1455, ОС: android 8.0, поставщик телефона: HTC.Для этого устройства эти симптомы возникают только в том случае, если устройство использует режим разделенного экрана, когда устройство удерживается в горизонтальной ориентации (приложение активирует портретный режим).Я видел, что это происходит и на других устройствах и в полноэкранном (не разделенном) режиме.Так что я не думаю, что это способ повторной инициализации цепочки подкачки, конвейера, буфера глубины, проходов рендеринга и командных буферов при изменении размера экрана.Поскольку размер экрана не будет меняться для устройств, в которых эта проблема возникает в полноэкранном режиме.
Я что-то не так делаю?Есть ли ошибка?Я хочу дать больше информации по этой проблеме, но не знаю, что нужно.
Я пробовал то же самое в OpenGLES 2.0 на том же устройстве при тех же обстоятельствах, и эти симптомы не возникают.Спасибо за вашу поддержку и помощь.