Портирование DirectX на OpenGL ES (iPhone) - PullRequest
3 голосов
/ 12 ноября 2010

Меня попросили исследовать портирование 10-летних игр Direct X (v7-9) на OpenGL ES, первоначально для iPhone

Я никогда раньше не брал игровой порт, подобный этому (и буду наниматькто-то, чтобы сделать это), но я хотел бы понять процесс.

  1. Есть ли какие-либо ресурсы / книги / блоги, которые помогут мне в понимании процесса?
  2. Есть ли какие-либопроекты, такие как Mono , которые могут это сделать?

Ответы [ 2 ]

6 голосов
/ 13 ноября 2010

TBH Такая работа по переносу сложна, но довольно проста.

Сначала вы заменяете все вызовы DirectX на «заглушки» (т. Е. Пустые функции). Вы делаете это до тех пор, пока не сможете получить программное обеспечение для компиляции. После компиляции вы начинаете реализовывать все функции-заглушки. По пути будет много ошибок, но это того стоит.

Если вам необходимо портировать и поддерживать телефоны до iPhone 3GS, у вас есть более сложная задача, поскольку аппаратное обеспечение поддерживает только GLES 1, который является только фиксированной функцией. Вам придется как-то «подражать» этим шейдерам. В прошлом на мобильных платформах я писал ассемблерный код, который выполняет «затенение вершин» непосредственно над данными вершин. Затенение пикселей часто бывает более сложным, но обычно вы можете предоставить достаточно информации с помощью «затенения вершин», чтобы добиться этого. Некоторые графические функции, которые вы можете просто пропустить.

Более поздние версии iPhone используют GLES 2, так что у вас есть доступ к GLSL ... ATI написала, и Aras P с известностью Unity3D расширился, программное обеспечение, которое будет переносить HLSL-код в GLSL .

Как только вы все это сделаете, вы переходите к стадии оптимизации. Вы, вероятно, обнаружите, что ваш первый проход не очень эффективен. Это совершенно нормально. На этом этапе вы можете посмотреть на код более высокого уровня и увидеть, как вы можете перемещать код и действовать по-другому, чтобы добиться максимальной производительности.

В итоге: ваш первый шаг - получить код для компиляции без DirectX. Следующим шагом будет фактическое портирование вызовов DirectX на вызовы OpenGL ES. Наконец, вы захотите провести рефакторинг оставшегося кода для лучшей производительности.

(П.С .: Я был бы рад сделать работу по переносу за вас. Свяжитесь со мной через страницу с моим вопросом в моем профиле;)).

0 голосов
/ 12 ноября 2010

Не полный ответ, но в надежде помочь немного ...

Я не знаю ничего, специально предназначенного для OpenGL ES, но Cadega, Cider и VirtualBox - среди прочего - обеспечивают переводВызовы DirectX для вызовов OpenGL, а OpenGL ES - это, в общем и целом, OpenGL с большим количеством редко используемых битов и удалением некоторых более медленных и избыточных частей.Так что, вероятно, стоило бы хотя бы исследовать эти продукты;по крайней мере, VirtualBox с открытым исходным кодом.

Часть SGX в iPhone 3GS и далее имеет полностью программируемый конвейер, что делает его эквивалентным части DirectX 10, поэтому аппаратное обеспечение присутствует.Более старый MBX - это фиксированный конвейер с расширением dot3, но без карт кубов и только двух текстурных блоков.Он также имеет расширение матричной палитры, поэтому вы можете делать хорошую анимацию и довольно хорошее освещение, если допустимо несколько проходов.

...