LVG (Lion Vector Graphics)
LVG es un reemplazo de reproductor de flash liviano. Idea básica: tenemos algunos activos en un paquete y sctipts que los convierten. Está diseñado para usar un tiempo de ejecución muy pequeño (alrededor de 200 kb sin códecs de video) para el reproductor y se ejecuta en Android, iOS, Web y más.
Actualmente utiliza el script C para cargar y representar activos. ¿Por qué C Script? Debido a que el compilador C es pequeño y el tiempo de ejecución escrito en C, por lo que no se necesita otro idioma y el script puede compilarse para guardar el espacio. Otra razón es la compatibilidad: LVG solo expone una pequeña API y OpenGL, con otros laguajes de secuencias de comandos que debemos hacer todo desde cero, incluida la GUI. Pero hay una gran cantidad de código C ya escrito. Por lo general, el autor prefiere C ++, pero también hay algunas razones para usar C Pure para el proyecto completo:
- No necesitamos incluir libstdc ++ para objetos compartidos de Android, que guarda algo de espacio .APK (objetos compartidos LIBS también generalmente duplicados para cada arquitectura compatible en .APK).
- Esto reduce el tamaño del código WASM compilado Emscripten (ya es relativamente pesado).
- Las compilaciones nativas de C ++ también necesitan algo de atención para un código pequeño. Definitivamente es posible escribir un código pequeño con C ++, pero necesitamos algo como MinicRT para cada plataforma/compilador. Vea el código Farbrauch, por ejemplo, o algo similar.
- El código C ++ produce archivos .map mucho más ruidosos, lo que hace que el análisis de archivos de perfil/mapa sea más complicado. Proyectos como Chromium también utilizan herramientas de análisis de objetos (como Dump-Static-Initials.py), también hay menos ruido con tales herramientas.
- El código se puede portar a OS'E específicos más fácilmente.
Siguientes activos actualmente compatibles:
- Imágenes vectoriales SVG (cargadas usando Nanosvg)
- Imágenes de trama (cargadas usando stb_image.h)
- Archivos mp3 (cargados usando minimp3)
- Archivos flash SWF (pueden contener vector, ráster, video y audio). Todos los códecs de video SWF (H263, VP6, FlashSV, Flashsv2, H264) cuestan adicionales ~ 600kb.
- Scripts usando TCC o PICOC
Render se puede hacer usando los siguientes backends:
- Renderización de la ruta nvidia
- Nanovg
Estado actual
Obras:
- SVG, Imagen, Recursos MP3 con secuencias de comandos TCC.
- SWF: formas, imágenes, video, audio (MP3, ADPCM, PCM), Soporte de script de acción limitada 2, soporte de formas de morfo limitado.
No funciona:
- SWF: capas de clip
- SWF: Interpretar el script de acción 3
- SWF: filtros de mapa de bits
- SWF: acceso a la red
Población
Demo básica de SVG (imágenes que se pueden hacer clic):

Nanovg demostración incapsulada en LVG:

Demo de la GUI nuklear:

Demo de flash SWF:

Edificio
Por ahora, los ejecutables de Windows se construyen solo en el host Linux usando MingW. Para Windows y Linux instalan todas las dependencias de compilación con el siguiente comando:
apt-get install -qq -y git cmake meson yasm libglfw3-dev libsdl2-dev libavcodec-dev mingw-w64 wget
Para MacOS Brew debe estar instalado:
brew install meson upx glfw sdl2 ffmpeg tcc
LVG usa Meson como sistema de compilación. Edificio real con los siguientes comandos en el directorio del proyecto:
mkdir build
cd build
meson ..
ninja
Configuración
LVG se puede configurar para usar diferentes backends para plataforma, audio y video. Puede ver la configuración actual ejecutando MesonConf (o Meson Configurar para versiones más nuevas de Meson) en el directorio de compilación:
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]
...
Puede cambiar la configuración usando los comandos de Meson. Ejemplo:
mesonconf -DENABLE_SCRIPT=False
Futuro
- Use otros trazos de secuencia de comandos como Luajit, Jerryscript, MUJS, MU, Avian, Impalajit, Mochascript y Angelscript.
- Acelere el script de acción con jit como sljit.
- Sombreadores y soporte 3D.
- Forma paralela Decodificación de imágenes y use compresión de archivos con soporte de decodificación paralelo (como PBZIP2).
- Más audio video Codec Backends.
Interpolación de cuadro SWF para obtener más FPS que codificados en el archivo. [Hecho]- Mejor que el formato de almacenamiento SWF utilizando compresión similar a Draco basada en ANS.
Bibliotecas gráficas interesantes
- 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.antigrein.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
Proyectos relacionados con Flash
- 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
- Referencia SWF V19 https://wwwimages2.adobe.com/content/dam/acom/en/devnet/pdf/swf-file-format-spec.pdf
- AMF V0 Referemce https://wwwimages2.adobe.com/content/dam/acom/en/devnet/pdf/amf0-file-format-specification.pdf
- Referencia de AMF V3 https://wwwimages2.adobe.com/content/dam/acom/en/devnet/pdf/amf-file-format-spec.pdf
- AS2 Referencia http://homepage.divms.uiowa.edu/~slonnegr/flash/actionscript2reference.pdf
LVG es desarrollado y mantenido por https://github.com/lieff