RU

Портирование QSP на Javascript

Nex Moderator 07.05.2016 14:49 18 comments 12849 views

Набрёл сегодня на интересную статью про Emscripten.

Emscripten - это утилита, которая переводит C и C++ код в Javascript.

https://developer.mozilla.org/ru/docs/Mozilla/Projects/Emscripten

https://developer.mozilla.org/en-US/docs/Games/Tools/asm.js

Почитав, снова воодушевился идеей портировать движок QSP на “чистый” яваскрипт.

Насколько я помню, раньше попытку портирования на яваскрипт предпринимал Ntropy. Что-то у него даже заработало, но слишком сильно тормозило.

Учитывая, что яваскрипт в современных браузерах исполняется быстрее, чем в те времена, а также направленность Emscripten на оптимизацию генерируемого кода, считаю, было бы неплохо ещё раз попробовать.

Может, в этот раз скорость будет приемлемая.
Какие плюсы это может дать:

1. Онлайн-плеер для проигрывания в браузере.

Можно будет написать онлайн-плеер без использования Flash. Это очень сильно упрощает задачу написания онлайн-плеера. Также это даёт доступ гораздо большему количеству пользователей, которые по разным причинам не пользуются Flash.

2. Плеер гораздо проще будет портировать на любые платформы.

Например, iOS, MacOS, Linux, Windows Phone.

Будет единое ядро, которое не нужно переписывать под каждую платформу. Даже в Навигаторе, например, под каждую платформу приходится писать код, который служит “переходником” между браузерным движком и библиотекой QSP.

Портировав библиотеку на яваскрипт целиком, мы получим универсальный код, и “переходники” писать уже не потребуется.

3. Станут доступны для использования платформы, которые не поддерживают связку нативного кода с браузерным движком.

Хотя все самые популярные платформы не имеют проблем с использованием нативного кода, но потенциальная возможность “засунуть этот плеер куда-нибудь ещё” - по-моему, здорово.

4. Улучшение производительности?

Одна из проблем Навигатора, это низкая производительность “моста” между нативным кодом и яваскриптом. Пришлось даже пойти на всякие ухищрения, чтобы добиться примелемой скорости и качества работы плеера.

Избавившись от необходимости исползовать “мост”, мы, возможно, выиграем по производительности. Но это ещё под вопросом, учитывая, что яваскриптовый код библиотеки будет исполняться медленнее нативного.

Да, в библиотеку QSP нужно вникать )

Предлагаю сначала разобраться с форматом строк. Чтобы версия библиотеки нормально возвращалась. Ну а дальше можно подключать постепенно все функции, начиная с QSPInit и QSPLoadGameWorld.

Победил версию! Сделал функцию, преобразующую из UTF16 в UTF8.
Теперь, как понимаю, надо применить фильтрацию через эту функцию для любой функции библиотеки, возвращающей QSP_CHAR* …

Antokolos,
обратная конвертация тоже нужна )

Кстати UTF16 по-моему там нигде нет. Юникод он разный бывает, UTF-16 обозначает кодировку переменной длины символа. Такое в QSP не используется.

Внутри QSP используется UCS-2, фиксировано два байта на каждый символ. Это “родная” кодировка для Винды, тип данных “wchar_t”.

Но по сути, в пределах этих двух байтов UCS-2 совпадает с UTF16, так что особой разницы при конвертации нет )

Log in or Register to post comments.