TBH Такая работа по переносу сложна, но довольно проста.
Сначала вы заменяете все вызовы DirectX на «заглушки» (т. Е. Пустые функции). Вы делаете это до тех пор, пока не сможете получить программное обеспечение для компиляции. После компиляции вы начинаете реализовывать все функции-заглушки. По пути будет много ошибок, но это того стоит.
Если вам необходимо портировать и поддерживать телефоны до iPhone 3GS, у вас есть более сложная задача, поскольку аппаратное обеспечение поддерживает только GLES 1, который является только фиксированной функцией. Вам придется как-то «подражать» этим шейдерам. В прошлом на мобильных платформах я писал ассемблерный код, который выполняет «затенение вершин» непосредственно над данными вершин. Затенение пикселей часто бывает более сложным, но обычно вы можете предоставить достаточно информации с помощью «затенения вершин», чтобы добиться этого. Некоторые графические функции, которые вы можете просто пропустить.
Более поздние версии iPhone используют GLES 2, так что у вас есть доступ к GLSL ... ATI написала, и Aras P с известностью Unity3D расширился, программное обеспечение, которое будет переносить HLSL-код в GLSL .
Как только вы все это сделаете, вы переходите к стадии оптимизации. Вы, вероятно, обнаружите, что ваш первый проход не очень эффективен. Это совершенно нормально. На этом этапе вы можете посмотреть на код более высокого уровня и увидеть, как вы можете перемещать код и действовать по-другому, чтобы добиться максимальной производительности.
В итоге: ваш первый шаг - получить код для компиляции без DirectX. Следующим шагом будет фактическое портирование вызовов DirectX на вызовы OpenGL ES. Наконец, вы захотите провести рефакторинг оставшегося кода для лучшей производительности.
(П.С .: Я был бы рад сделать работу по переносу за вас. Свяжитесь со мной через страницу с моим вопросом в моем профиле;)).