LVG(狮子矢量图形)
LVG是轻量级的闪光播放器更换。基本思想:包裹中有一些资产和sctipts可以使它们产生。它旨在将非常小的运行时(大约200kb无视频编解码器)用于播放器,并在Android,iOS,Web等上运行。
当前,它使用C脚本加载和渲染资产。为什么要C脚本?因为C编译器很小,并且在C中编写的运行时,因此不需要其他语言,并且可以将脚本编译到保存空间中。另一个原因是兼容性:LVG仅揭露小的API和OpenGL,而在其他脚本Laguages中,我们必须从头开始所有工作,包括GUI。但是有大量已经写的C代码。通常作者更喜欢C ++,但也有一些理由将纯C用于整个项目:
- 我们不需要为Android共享对象包含LIBSTDC ++,从而节省了一些.APK空间(共享对象libs通常也为.apk中的每个受支持的架构进行复制)。
- 这降低了Emscripten的大小编译了WASM代码(已经相对较重)。
- 本机C ++也需要对小型代码进行一些关注。绝对可以使用C ++编写小型代码,但是我们需要每个平台/编译器之类的MiniCRT。例如,请参见Farbrauch代码或类似的代码。
- C ++代码会产生更多嘈杂的.MAP文件,从而使配置文件/地图文件分析更复杂。诸如Chromium之类的项目还使用对象分析工具(例如Dump-Initializers.py),此类工具也有更少的噪声。
- 代码可以更轻松地移植到特定的OS'E。
当前支持的以下资产:
- SVG矢量图像(使用NanoSVG加载)
- 栅格图像(使用stb_image.h加载)
- mp3文件(使用minimp3加载)
- Flash SWF文件(可以包含向量,栅格,视频和音频)。所有SWF视频编解码器(H263,VP6,FlashSV,FlashSV2,H264)的价格额外〜600KB。
- 使用TCC或PICOC的脚本
可以使用以下后端完成渲染:
当前状态
作品:
- SVG,图像,带有TCC脚本的MP3资源。
- SWF:形状,图像,视频,音频(MP3,ADPCM,PCM),有限的动作脚本2支持,有限的变形形状支持。
行不通:
- SWF:夹层
- SWF:解释动作脚本3
- SWF:位图过滤器
- SWF:网络访问
演示
基本SVG演示(可单击的图像):

Nanovg演示在LVG中均不复存在:

Nuklear Gui演示:

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配置为使用不同的后端用于平台,音频和视频。您可以通过在build Directory中执行MesonConf(或较新的Meson版本的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。
- 使用Sljit这样的JIT加快动作脚本。
- 着色器和3D支持。
- 并行形状图像解码并使用并行解码支持(例如PBZIP2)的文件压缩。
- 更多音频 Video 编解码器后端。
SWF框架插值获得比文件中编码更多的FPS。 [完毕]- 使用基于ANS的Draco样压缩比SWF存储格式更好。
有趣的图形库
- 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/acom/en/devnet/pdf/pdf/swf-file-format-spec.pdf
- AMF V0推荐https://wwwimages2.adobe.com/content/dam/acom/acom/en/devnet/pdf/amf0-file-format-specification.pdf
- AMF V3参考https://wwwimages2.adobe.com/content/dam/acom/acom/en/devnet/pdf/amf-file-format-spec.pdf
- AS2参考http://homepage.divms.uiowa.edu/~slonnegr/flash/actionscript2Reference.pdf
LVG由https://github.com/lieff开发和维护