LVG (Lion Vector Graphics)
O LVG é uma substituição leve do flash player. Ideia básica: temos alguns ativos em um pacote e sctipts que os traduzem. Ele foi projetado para usar um tempo de execução muito pequeno (cerca de 200kb sem codecs de vídeo) para jogador e roda no Android, iOS, Web e muito mais.
Atualmente, ele usa o script C para carregar e renderizar ativos. Por que s script? Como o compilador C é pequeno e o tempo de execução é escrito em C, não é necessário outro idioma e o script pode ser compilado para salvar o espaço. Outro motivo é a compatibilidade: o LVG expõe apenas pequenos API e o OpenGL, com outras laguagens de scripts, devemos fazer tudo do zero, incluindo a GUI. Mas há uma enorme quantidade de código C já escrito. Normalmente, o autor prefere C ++, mas também existem alguns motivos para usar o projeto C Pure para todo o projeto:
- Não precisamos incluir libstdc ++ para objetos compartilhados do Android, o que economiza algum espaço .apk (objetos compartilhados LIBs também geralmente duplicados para cada arquitetura suportada em .apk).
- Isso reduz o tamanho do código WASM compilado EMSCRIPTEN (já é relativamente pesado).
- As compilações nativas de C ++ também precisam de alguma atenção para o código pequeno. É definitivamente possível escrever um pequeno código com C ++, mas precisamos de algo como Minicrt para cada plataforma/compilador. Veja o código Farbrauch, por exemplo, ou algo semelhante.
- O código C ++ produz arquivos .MAP muito mais barulhentos que tornam o bit de análise de arquivos de perfil/mapa mais complicado. Projetos como o Chromium também usa ferramentas de análise de objetos (como ini-inquitalizadores de dump-static.py), também há menos ruído com essas ferramentas.
- O código pode ser portado para os OS'es específicos com mais facilidade.
A seguir, ativos suportados atualmente:
- Imagens vetoriais SVG (carregadas usando Nanosvg)
- Imagens raster (carregadas usando stb_image.h)
- Arquivos MP3 (carregados usando o MinImp3)
- Arquivos SWF flash (podem conter vetor, raster, vídeo e áudio). Todos os codecs de vídeo SWF (H263, VP6, FlashSV, Flashsv2, H264) custam ~ 600kb adicionais.
- Scripts usando TCC ou PICOC
A renderização pode ser feita usando os seguintes back -end:
- Nvidia Renderização do caminho
- Nanovg
Status atual
Funciona:
- SVG, imagem, MP3 Resources com script TCC.
- SWF: Formas, imagens, vídeo, áudio (MP3, ADPCM, PCM), Script de ação limitada Script 2, suporte limitado Morph Shapes Support.
Não funciona:
- SWF: camadas de clipe
- SWF: interpretar o script de ação 3
- SWF: filtros de bitmap
- SWF: acesso à rede
Demos
Demo Basic SVG (imagens clicável):

Demoção Nanovg incapsulada no LVG:

Demoção da GUI Nuklear:

Demo flash SWF:

Prédio
Por enquanto, os executáveis do Windows são criados apenas no host Linux usando o Mingw. Para Windows e Linux, instale todas as dependências de construção com o seguinte comando:
apt-get install -qq -y git cmake meson yasm libglfw3-dev libsdl2-dev libavcodec-dev mingw-w64 wget
Para MacOS Brew deve ser instalado:
brew install meson upx glfw sdl2 ffmpeg tcc
O LVG usa o Meson como sistema de construção. Edifício real com os seguintes comandos no diretório do projeto:
mkdir build
cd build
meson ..
ninja
Configurando
O LVG pode ser configurado para usar backnds diferentes para plataforma, áudio e vídeo. Você pode ver a configuração atual executando o mesoConConf (ou o Meson Configure para versões mais recentes de meson) no diretório de construção:
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]
...
Você pode alterar a configuração usando comandos meson. Exemplo:
mesonconf -DENABLE_SCRIPT=False
Futuro
- Use outras faixas de scripts como Luajit, JerryScript, MUJS, MU, Aviian, Impalajit, Mochascript e Angelscript.
- Acelere o script de ação com JIT como Sljit.
- Shaders e suporte 3D.
- Forma paralela Decodificação da imagem e use a compactação de arquivo com suporte de decodificação paralelo (como PBZIP2).
- Mais áudio vídeo codec backends.
Interpolação do quadro SWF para obter mais FPS do que codificado no arquivo. [Feito]- Melhor do que o formato de armazenamento SWF usando compressão do tipo Draco com base na ANS.
Bibliotecas gráficas interessantes
- https://github.com/01org/fastuidraw
- https://skia.org/
- https://github.com/blend2d/blend2d/
- https://github.com/memonanen/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
Projetos relacionados ao 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
- SWF V19 Referência 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
- AMF v3 Referência https://wwwimages2.adobe.com/content/dam/acom/en/devnet/pdf/amf-file-format-spec.pdf
- AS2 Referência http://homepage.divms.uiowa.edu/~slonegr/flash/actionScript2Reference.pdf
O LVG é desenvolvido e mantido por https://github.com/lieff