LVG (Löwenvektorgrafik)
LVG ist ein leichter Ersatz für Flash -Player. Grundidee: Wir haben einige Vermögenswerte in einem Paket und SCTIPTS, die sie rendern. Es wurde entwickelt, um eine sehr kleine Laufzeit (ca. 200 KB ohne Video -Codecs) für den Spieler zu verwenden und auf Android, iOS, Web und vielem mehr läuft.
Derzeit verwendet es C -Skript, um Assets zu laden und zu rendern. Warum C -Skript? Da C Compiler klein ist und die in C geschriebene Laufzeit geschrieben ist, wird also keine andere Sprache benötigt und das Skript zum Speichern des Raums zusammengestellt werden. Ein weiterer Grund ist die Kompatibilität: LVG enthält nur kleine API und OpenGL, wobei wir mit anderen Skriptverzögern alle von Grund auf neu tun müssen, einschließlich GUI. Aber es gibt eine große Menge an bereits geschriebenem C-Code. Normalerweise bevorzugt der Autor C ++, aber es gibt auch einige Gründe, Pure C für das gesamte Projekt zu verwenden:
- Wir müssen LIBSTDC ++ für Android -Shared -Objekte nicht einbeziehen, was einen .APK -Speicherplatz speichert (gemeinsam genutzte Objekte libs, die normalerweise auch für jede unterstützte Architekte in .APK dupliziert).
- Dies reduziert die Größe des Emscripten -kompilierten WASM -Code (er ist bereits relativ schwer).
- Native C ++ -Ausbuilds benötigen auch einige Aufmerksamkeit für kleine Code. Es ist auf jeden Fall möglich, einen kleinen Code mit C ++ zu schreiben, aber wir brauchen für jede Plattform/den Compiler so etwas wie ein MinICRT. Siehe Farbrauch Code zum Beispiel oder ähnliches.
- C ++ - Code erzeugt viel lauter. Projekte wie Chromium verwendet auch Objektanalyse-Tools (wie Dump-static-Initializer.py), es gibt auch weniger Rauschen mit solchen Werkzeugen.
- Code kann einfacher auf bestimmte Betriebssysteme portiert werden.
Derzeit unterstützte die derzeit unterstützten Vermögenswerte:
- SVG -Vektorbilder (geladen mit Nanosvg)
- Rasterbilder (geladen mit STB_IMAGE.H)
- MP3 -Dateien (geladen mit minimp3)
- Flash SWF -Dateien (können Vektor, Raster, Video und Audio enthalten). Alle SWF -Video -Codecs (H263, VP6, FlashSV, FlashSv2, H264) kosten zusätzliche ~ 600 KB.
- Skripte mit TCC oder PICOC
Render kann mit folgenden Backends durchgeführt werden:
- Nvidia -Pfadrendern
- Nanovg
Aktueller Status
Werke:
- SVG, Bild, MP3 -Ressourcen mit TCC -Skripten.
- SWF: Formen, Bilder, Video, Audio (MP3, ADPCM, PCM), Limited Action Skript 2 Support, Limited Morph Formen Support.
Nicht funktioniert:
- SWF: Clip -Schichten
- SWF: Aktionskript 3 interpretieren 3
- SWF: Bitmap -Filter
- SWF: Netzwerkzugriff
Demos
Grundlegende SVG -Demo (Bilder klicken):

Nanovg -Demo, die in LVG in der inhaftulierten Weise in der Inkapseligkeit in der Inkapulsion:

Nuklear GUI Demo:

Flash SWF Demo:

Gebäude
Im Moment erstellt Windows Executables nur auf dem Linux -Host mit Mingw. Für Windows und Linux installieren Sie alle Build -Abhängigkeiten mit dem folgenden Befehl:
apt-get install -qq -y git cmake meson yasm libglfw3-dev libsdl2-dev libavcodec-dev mingw-w64 wget
Für MacOS Brew muss installiert werden:
brew install meson upx glfw sdl2 ffmpeg tcc
LVG verwendet Meson als Build -System. Tatsächliches Gebäude mit den folgenden Befehlen im Projektverzeichnis:
mkdir build
cd build
meson ..
ninja
Konfigurieren
LVG kann so konfiguriert werden, dass verschiedene Backends für Plattform, Audio und Video verwendet werden. Sie können die aktuelle Konfiguration sehen, indem Sie Mesonconf (oder Meson -Konfiguration für neuere Meson -Versionen) im Build -Verzeichnis ausführen:
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]
...
Sie können die Konfiguration mithilfe von Meson -Befehlen ändern. Beispiel:
mesonconf -DENABLE_SCRIPT=False
Zukunft
- Verwenden Sie andere Skriptlanuagen wie Luajit, Jerryscript, MUJS, MU, Avian, Impalajit, Mochascript und Angelscript.
- Beschleunigen Sie das Action -Skript mit JIT wie Sljit.
- Shaders und 3D -Unterstützung.
- Parallele Form Bilddecodierung und Verwenden Sie die Dateikomprimierung mit paralleler Dekodierungsunterstützung (wie PBZIP2).
- Mehr Audio Video Codec Backends.
SWF -Frame -Interpolation, um mehr FPS zu erhalten als in der Datei codiert. [Erledigt]- Besser als SWF-Speicherformat mit draco-ähnlicher Komprimierung basierend auf ANS.
Interessante Grafikbibliotheken
- 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=graphit_home
- https://sourceforge.net/projects/shivavg/
- https://github.com/micahpearlman/monkvg
- https://github.com/khronosgroup/openvg-registry
Projekte mit Flash -verwandten Projekten
- 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 Referenz https://wwwimages2.adobe.com/content/dam/acom/en/devnet/pdf/swf-file-formatspec.pdf
- AMF v0 Referemce https://wwwimages2.adobe.com/content/dam/acom/en/devnet/pdf/amf0-file-formatspecification.pdf
- AMF V3 Referenz https://wwwimages2.adobe.com/content/dam/acom/en/devnet/pdf/amf-file-formatspec.pdf
- AS2 Referenz http://homepage.divms.uiowa.edu/~slonnegr/flash/actionscript2Reference.pdf
LVG wird von https://github.com/lieff entwickelt und gepflegt