Wednesday, April 5, 2017

Interected materials from GDC 2016-2017

NGTech into Android. Building dependencies for NGTech(RU)

В прошлом, я уже предпринимал попытки портировать движок на Android, поэтому большая часть кода была уже переведена, за исключением подсистем физики, звука, окна и подсистемы потоков, но в этот раз я настроен более чем серьезно.  Тогда даже был получен рабочий билд, который рисовал картинку на экране, и остальные подсистемы работали судя по тестам, но прям поиграть было нельзя.

Сейчас же хочется получить полноценный билд. Поэтому 3 дня назад я начал полноценное портирование, перед этим произведя код-ревью части компонентов, фиксинга части горячих багов и подготовка соответствующей инфраструктуры. За эти дни я активировал весь отключенный функционал, кроме собственно указанных подсистем.

Проблема отсутствия поддержки необходимых функций для функционирования файберов в тред библиотке будет решаться методом молотка - будет внедрена их ASM реализация. Притом примечателен тот факт, что их функционал еще был реализован в 2012 году, но они так и не попали в финальную сборку Android. Напомню, что с момента 2012 года, прошло уже 3 мажорные версии.

Т.к большинство зависимостей движка уже собрано, осталось собственно:

1) OpenAL
2) PhysX
3) Devil

Если со вторым все ясно - там скорее всего все соберется из коробки, ибо NVidia же, сценариев под VS конечно нету, но никто не отменял командную строку
С первым все гораздо сложнее - в интернете пишут постоянно, что необходимо использовать специальную версию openal(ссылка будет приложена ниже), но на практике структура у OpenAL такая, что нужные участки кода можно включать макросами, поэтому нам надо всего лишь получить правильный config.h под нашу платформу, во всяком случае я надеюсь этим дело и ограничится. Иначе придется лезть diff'ом и искать изменения, это немного усложняет сам процесс, ибо у меня используется мало того, что более новая версия чем все тут представленные, так еще и своя ветка, в которой я попытался избавиться от данной структуры(что бы можно было одновременно переключаться между типами API).
С третьим ситуация осложняется следующим образом - банально неизвестно собирается ли она(там файлов много, а выборочно я просто устану компилировать - поэтому просто отложим это сейчас).

По итогам сегодняшнего дня и сегодняшней ночи... осталось только собрать эти библиотеки и слинковать это все добро. - Ну или найти бинарный вариант OpenAL Soft, но это уже завтра все.
Оконная система будет реализована самостоятельно(надо же учиться работать и без кроссплатформенных либ) - вариант с SDL пока не рассматривается, т.к еще и мало времени. Инпут будет осуществляться через NVGamepadLib - я все равно ее собирался внедрять.

В общем завтра я буду плотно разбираться с этим вопросом.

Пока уделяю по максимуму времени, ибо в итоге не хочется оказаться ... ну вы поняли


Да и добить это уже надо



Ссылки по работе с OpenAL Soft Android:
1
2
3
4
5
6
7
8
BinRepo?

Ссылки по Fibers:
Aros/Platforms/Support for *nix

Boost.Context
boost context class
LIGHTWEIGHT COOPERATIVE MULTITASKING WITH BOOST.CONTEXT
Асинхронность: назад в будущее
FiberTaskingLib