Внешние требования --- ты должен их ненавидеть ...
У меня есть игра OpenGL ES, в которой для рисования на экране используются EGL и OpenGL ES. У меня нет источника для этого; он поставляется в виде двоичного двоичного объекта. Я реализую интерфейсный уровень, который является посредником между вызовами игры в EGL и OpenGL и реализацией платформы.
Работает нормально. Но теперь у меня есть неожиданное внешнее требование, чтобы я мог поворачивать всю игру на 90 градусов.
Кто-нибудь может предложить какие-нибудь хорошие (простые, быстрые) способы сделать это? С головы до головы я могу подумать:
вставить соответствующее преобразование в матрицу проекции игры. Мне кажется, это самое быстрое решение; но я не думаю, что у меня достаточно знаний о манипуляциях с матрицей проекций, чтобы сделать это надежно. Кроме того, это может запутать игру, если она использует какие-либо вызовы OpenGL для доступа к экрану, который не проходит через матрицу проекции. (glReadPixels()
, например.)
дать игре контекст рендеринга за пределы экрана; он рендерит там, а затем, когда игра вызывает eglSwapBuffers()
, я копирую результат на экран. Рендеринг в текстуру поможет здесь. Проблемы: это повлияет на производительность, так как я эффективно делаю два прохода рисования вместо одного; и рендеринг в текстуру не стандартизирован в OpenGL ES. (Моя целевая платформа, Android, даже надежно не поддерживает общие контексты.)
визуализировать в цветовой буфер, затем использовать glReadPixels()
, чтобы скопировать данные и выполнить программный поворот на экране. Проблемы: очень медленный, и я не могу контролировать размер буфера (то есть, если экран 640x480, и мы рисуем с поворотом на 90 °, я действительно хочу дать игре цветной буфер 480x640).
другой
Хаки, специфичные для игры, здесь не вариант, потому что мне нужно иметь возможность поменять двоичный файл игры на другой; это должно быть общее исправление. Изменение игры не вариант, потому что мы не можем контролировать исходный код игры.
Есть предложения? Кроме нетехнических попыток убедить уйти?