Wednesday, April 5, 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
Сейчас же хочется получить полноценный билд. Поэтому 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
Subscribe to:
Posts (Atom)