LVG (Lion Vector Graphics)
LVG - это легкая замена флеш -игрока. Основная идея: у нас есть активы в пакете и Sctipts, которые их отдают. Он предназначен для использования очень небольшого времени выполнения (около 200 КБ без видеокодеков) для игрока и работает на Android, iOS, Web и многое другое.
В настоящее время он использует сценарий C для загрузки и рендеринга активов. Почему сценарий C? Поскольку C Компилятор не маленький, и время выполнения, записанное в C, так что другой язык не требуется, и сценарий может быть составлен в сохранение пространства. Другая причина - это совместимость: LVG обнажает только небольшой API и OpenGL, а другие сценаристы мы должны делать все с нуля, включая GUI. Но есть огромное количество уже написанного C-кода. Обычно автор предпочитает C ++, но есть и некоторые причины использовать Pure C для всего проекта:
- Нам не нужно включать Libstdc ++ для Android -общих объектов, которые сохраняют некоторое пространство. APK (общие объекты Libs также обычно дублируются для каждого поддерживаемого архитектора в .apk).
- Это уменьшает размер составленного Emscripten Code (он уже относительно тяжелый).
- Native C ++ Builds требует некоторого внимания к небольшому коду. Определенно возможно написать небольшой код с C ++, но нам нужно что -то вроде MinicRT для каждой платформы/компилятора. Смотрите, например, код Farbrauch или что -то подобное.
- Код C ++ создает гораздо более шумные файлы .MAP, которые усложняют анализ файлов профиля/карты. Такие проекты, как Chromium, также используют инструменты анализа объектов (например, Dills-Static Initializers.py), также меньше шума с такими инструментами.
- Код может быть перенесен в конкретные ОС легче.
Следующие активы в настоящее время поддерживаются:
- Векторные изображения SVG (загруженные с использованием NanoSVG)
- Растровые изображения (загруженные с использованием stb_image.h)
- Mp3 файлы (загружены с использованием minimp3)
- Flash SWF -файлы (могут содержать вектор, растровые, видео и аудио). Все видеокодеки SWF (H263, VP6, FlashSV, FlashSV2, H264) стоит дополнительных ~ 600 КБ.
- Сценарии с использованием TCC или Picoc
Рендеринг можно сделать с помощью следующих бэкэндов:
- Nvidia path рендеринг
- Нанов
Текущий статус
Работает:
- SVG, Image, MP3 Ресурсы с сценарием TCC.
- SWF: формы, изображения, видео, аудио (MP3, ADPCM, PCM), поддержка сценария с ограниченным действием 2, поддержка ограниченной формы морфа.
Не работает:
- SWF: Clip Layers
- SWF: интерпретировать сценарий действия 3
- SWF: Bitmap Filters
- SWF: доступ к сети
Демо
Основная демонстрация SVG (изображения кликабельные):

Demo nanovg Incapsuled в LVG:

Nuklear Gui Demo:

Flash SWF Демо:

Здание
На данный момент исполняемые файлы Windows строится только на хосте Linux с помощью Mingw. Для Windows и Linux установить все зависимости сборки со следующей командой:
apt-get install -qq -y git cmake meson yasm libglfw3-dev libsdl2-dev libavcodec-dev mingw-w64 wget
Для MacOS Brew должен быть установлен:
brew install meson upx glfw sdl2 ffmpeg tcc
LVG использует Meson в качестве системы сборки. Фактическое здание со следующими командами в каталоге проектов:
mkdir build
cd build
meson ..
ninja
Настройка
LVG может быть настроен на использование различных бэкэндов для платформы, аудио и видео. Вы можете увидеть текущую конфигурацию, выполнив MesonConf (или Meson Configure для более новых версий Meson) в каталоге сборки:
meson configure
...
Project options:
Option Description Current Value Possible Values
------ ----------- ------------- ---------------
AUDIO_SDL AUDIO_SDL true [True, False]
ENABLE_AUDIO ENABLE_AUDIO true [True, False]
ENABLE_SCRIPT ENABLE_SCRIPT true [True, False]
ENABLE_VIDEO ENABLE_VIDEO true [True, False]
PLATFORM_GLFW PLATFORM_GLFW true [True, False]
PLATFORM_SDL PLATFORM_SDL false [True, False]
RENDER_NANOVG RENDER_NANOVG true [True, False]
RENDER_NVPR RENDER_NVPR true [True, False]
SCRIPT_TCC SCRIPT_TCC true [True, False]
VIDEO_FFMPEG VIDEO_FFMPEG true [True, False]
...
Вы можете изменить конфигурацию с помощью команд Meson. Пример:
mesonconf -DENABLE_SCRIPT=False
Будущее
- Используйте другие сценарии, такие как Luajit, Jerryscript, Mujs, MU, Avian, Impalajit, Mochascript и Angelscript.
- Ускорить сценарий действия с JIT, как Sljit.
- Шейдеры и 3D -поддержка.
- Параллельная форма Декодирование изображения и используйте сжатие файла с помощью параллельной поддержки декодирования (например, PBZIP2).
- Больше аудио Video Codec Backends.
Интерполяция кадра SWF, чтобы получить больше FPS, чем кодируется в файле. [Сделанный]- Лучше, чем формат хранения SWF с использованием Draco-подобного сжатия на основе ANS.
Интересные графические библиотеки
- https://github.com/01org/fastuidraw
- https://skia.org/
- https://github.com/blend2d/blend2d/
- https://github.com/memononen/nanovg
- https://github.com/mokafolio/tarp
- https://github.com/jpbruyere/vkvg
- https://github.com/jdryg/vg-renderer
- https://github.com/nical/lyon
- https://cairographics.org/
- http://www.antigrain.com/
- http://scripts.sil.org/cms/scripts/page.php?site_id=projects&item_id=graphite_home
- https://sourceforge.net/projects/shivavg/
- https://github.com/micahpearlman/monkvg
- https://github.com/khronosgroup/openvg-registry
Флэш -проекты
- https://github.com/lightspark/lightspark
- https://github.com/mozilla/shumway
- https://github.com/ruffle-rs/ruffle
- https://www.gnu.org/software/gnash/
- https://swfdec.freedesktop.org/wiki/
- https://github.com/marmalade/gameswf
- http://tulrich.com/geekstuff/gameswf.html
- http://www.swftools.org/
- http://www.libming.org/
- http://www.swift-tools.net/flash/
- https://github.com/crossbridge-community/crossbridge
- SWF V19 Ссылка https://wwwimages2.adobe.com/content/dam/acom/en/devnet/pdf/swf-file-format-pec.pdf
- AMF V0 SEREMCE https://wwwimages2.adobe.com/content/dam/acom/en/devnet/pdf/amf0-file-format speciation.pdf
- Ссылка на AMF v3 https://wwwimages2.adobe.com/content/dam/acom/en/devnet/pdf/amf-file-format-pec.pdf
- AS2 Ссылка http://homepage.divms.uiowa.edu/~slonnegr/flash/actionscript2reference.pdf
LVG разработан и поддерживается https://github.com/lieff