LVG (Lion Vector Graphics)
LVG est un remplacement de lecteur flash léger. Idée de base: nous avons des actifs dans un package et des sctipts qui les rendent. Il est conçu pour utiliser un très petit temps d'exécution (environ 200 Ko sans codecs vidéo) pour le joueur et fonctionne sur Android, iOS, Web et plus encore.
Actuellement, il utilise le script C pour charger et rendre les actifs. Pourquoi c Script? Parce que le compilateur C est petit, et l'exécution écrite en C, aucune autre langue n'est nécessaire et le script peut être compilé dans un espace de sauvegarde. Une autre raison est la compatibilité: LVG expose uniquement la petite API et OpenGL, avec d'autres retardataires de script que nous devons tout faire à partir de zéro, y compris l'interface graphique. Mais il y a une énorme quantité de code C déjà écrit. Habituellement, l'auteur préfère C ++, mais il y a aussi quelques raisons d'utiliser Pure C pour le projet entier:
- Nous n'avons pas besoin d'inclure LiBSTDC ++ pour les objets partagés Android, ce qui économise un espace .APK (objets partagés LIBs également dupliqués pour chaque architecte pris en charge dans .APK).
- Cela réduit la taille du code WASM compilé par Emscripten (il est déjà relativement lourd).
- Les constructions C ++ natives ont également besoin d'attention pour un petit code. Il est certainement possible d'écrire un petit code avec C ++, mais nous avons besoin de quelque chose comme MINICRT pour chaque plate-forme / compilateur. Voir le code Farbrauch par exemple ou quelque chose de similaire.
- Le code C ++ produit des fichiers .map beaucoup plus bruyants, ce qui rend l'analyse des fichiers de profil / map plus compliquée. Des projets comme Chromium utilisent également des outils d'analyse d'objets (comme le vidage-statique-initialisers.py), il y a aussi moins de bruit avec de tels outils.
- Le code peut être porté plus facilement vers des OS spécifiques.
Les actifs suivants sont actuellement pris en charge:
- Images vectorielles SVG (chargées à l'aide de nanosvg)
- Images raster (chargées à l'aide de STB_image.h)
- Fichiers MP3 (chargés à l'aide de MINIMP3)
- Fichiers SWF Flash (peut contenir un vecteur, raster, vidéo et audio). Tous les codecs vidéo SWF (H263, VP6, Flashsv, Flashsv2, H264) coûtent plus de 600 Ko.
- Scripts utilisant TCC ou PICOC
Le rendu peut être fait en utilisant les backends suivants:
État actuel
Travaux:
- SVG, image, ressources MP3 avec script TCC.
- SWF: Formes, images, vidéo, audio (MP3, ADPCM, PCM), support de script d'action limité 2, support de formes de morphie limité.
Ne fonctionne pas:
- SWF: Clip Calques
- SWF: Interpréter le script d'action 3
- SWF: filtres bitmap
- SWF: accès au réseau
Démos
Démo SVG de base (images cliquables):

Démo Nanovg incapulé dans LVG:

Démo GUI Nuklear:

Démo SWF Flash:

Bâtiment
Pour l'instant, les exécutables Windows se construisent uniquement sur Host Linux à l'aide de Mingw. Pour Windows et Linux, installez toutes les dépendances de construction avec la commande suivante:
apt-get install -qq -y git cmake meson yasm libglfw3-dev libsdl2-dev libavcodec-dev mingw-w64 wget
Pour MacOS Brew doit être installé:
brew install meson upx glfw sdl2 ffmpeg tcc
LVG utilise Meson comme système de construction. Bâtiment réel avec les commandes suivantes dans le répertoire de projet:
mkdir build
cd build
meson ..
ninja
Configuration
LVG peut être configuré pour utiliser différents backends pour la plate-forme, l'audio et la vidéo. Vous pouvez voir la configuration actuelle en exécutant MesonConf (ou Meson Configure pour les versions Meson plus récentes) dans le répertoire de build:
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]
...
Vous pouvez modifier la configuration à l'aide de commandes Meson. Exemple:
mesonconf -DENABLE_SCRIPT=False
Avenir
- Utilisez d'autres lanuages de script comme Luajit, JerryScript, Mujs, Mu, Avian, Impalajit, Mochascript et Angelscript.
- Accélérez le script d'action avec Jit comme Sljit.
- Shaders et Support 3D.
- Forme parallèle Décodage d'image et utilisez une compression de fichiers avec une prise en charge de décodage parallèle (comme PBZIP2).
- Plus de backends audio video codec.
Interpolation du cadre SWF pour obtenir plus de FPS que encodé dans le fichier. [Fait]- Mieux que le format de stockage SWF en utilisant une compression de type Draco basé sur ANS.
Bibliothèques graphiques intéressantes
- 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-derer
- 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
Projets liés au flash
- https://github.com/lightpark/lightpark
- 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 Référence https://wwimages2.adobe.com/content/dam/acom/en/devnet/pdf/swf-file-forat-spe.pdf
- AMF V0 REFORME https://wwwimages2.adobe.com/content/dam/acom/en/devnet/pdf/amf0-file-forat-specification.pdf
- AMF V3 Référence https://wwimages2.adobe.com/content/dam/acom/en/devnet/pdf/amf-file-forat-spec.pdf
- AS2 Référence http://homepage.divms.uiowa.edu/~slonnegr/flash/ActionScript2Reference.pdf
LVG est développé et entretenu par https://github.com/lieff