LVG (กราฟิก Lion Vector)
LVG เป็นการเปลี่ยนเครื่องเล่นแฟลชที่มีน้ำหนักเบา แนวคิดพื้นฐาน: เรามีสินทรัพย์บางอย่างในแพ็คเกจและ sctipts ที่แสดงผล มันถูกออกแบบมาให้ใช้รันไทม์ขนาดเล็กมาก (ประมาณ 200kb โดยไม่ต้องใช้ตัวแปลงสัญญาณวิดีโอ) สำหรับผู้เล่นและทำงานบน Android, iOS, เว็บและอื่น ๆ
ขณะนี้ใช้สคริปต์ C เพื่อโหลดและแสดงผลสินทรัพย์ ทำไมต้อง c สคริปต์? เนื่องจากคอมไพเลอร์ C มีขนาดเล็กและรันไทม์เขียนเป็น C ดังนั้นจึงไม่จำเป็นต้องใช้ภาษาอื่นและสามารถรวบรวมสคริปต์ลงในพื้นที่บันทึกได้ อีกเหตุผลหนึ่งคือความเข้ากันได้: LVG เปิดเผยเฉพาะ API และ OpenGL ขนาดเล็กกับ laguages สคริปต์อื่น ๆ ที่เราต้องทำทั้งหมดตั้งแต่เริ่มต้นรวมถึง GUI แต่มีรหัส C ที่เขียนไว้แล้วจำนวนมาก โดยปกติแล้วผู้เขียนจะชอบ C ++ แต่ก็มีเหตุผลบางประการที่จะใช้ PUR PURE C สำหรับโครงการทั้งหมด:
- เราไม่จำเป็นต้องรวม libstdc ++ สำหรับวัตถุที่ใช้ร่วมกันของ Android ซึ่งจะช่วยประหยัดพื้นที่. APK บางส่วน (วัตถุที่ใช้ร่วมกัน LIBS มักจะทำซ้ำสำหรับสถาปนิกที่รองรับแต่ละตัวใน. APK)
- สิ่งนี้จะช่วยลดขนาดของ Emscripten ที่รวบรวมรหัส WASM (มันค่อนข้างหนักอยู่แล้ว)
- การสร้าง C ++ ดั้งเดิมต้องการความสนใจสำหรับรหัสเล็ก ๆ ด้วย เป็นไปได้อย่างแน่นอนที่จะเขียนโค้ดขนาดเล็กด้วย C ++ แต่เราต้องการบางอย่างเช่น minicrt สำหรับแต่ละแพลตฟอร์ม/คอมไพเลอร์ ดูรหัส Farbrauch ตัวอย่างเช่นหรือสิ่งที่คล้ายกัน
- รหัส C ++ สร้างไฟล์. map ที่มีเสียงดังมากขึ้นซึ่งทำให้การวิเคราะห์ไฟล์โปรไฟล์/แผนที่มีความซับซ้อนมากขึ้น โครงการเช่นโครเมียมยังใช้เครื่องมือวิเคราะห์วัตถุ (เช่น dump-static-initializers.py) นอกจากนี้ยังมีสัญญาณรบกวนน้อยลงด้วยเครื่องมือดังกล่าว
- รหัสสามารถพอร์ตไปยัง OS'Es ที่เฉพาะเจาะจงได้ง่ายขึ้น
สนับสนุนสินทรัพย์ในปัจจุบัน:
- ภาพเวกเตอร์ SVG (โหลดโดยใช้ nanosvg)
- ภาพแรสเตอร์ (โหลดโดยใช้ stb_image.h)
- ไฟล์ mp3 (โหลดโดยใช้ minimp3)
- ไฟล์ Flash SWF (สามารถมีเวกเตอร์แรสเตอร์วิดีโอและเสียง) ตัวแปลงสัญญาณวิดีโอ SWF ทั้งหมด (H263, VP6, FlashSV, FlashSV2, H264) มีค่าใช้จ่ายเพิ่มเติม ~ 600KB
- สคริปต์โดยใช้ TCC หรือ picoc
การแสดงผลสามารถทำได้โดยใช้แบ็กเอนด์ต่อไปนี้:
- การแสดงผลเส้นทาง NVIDIA
- Nanovg
สถานะปัจจุบัน
ผลงาน:
- SVG, รูปภาพ, ทรัพยากร MP3 พร้อมสคริปต์ TCC
- SWF: รูปร่าง, รูปภาพ, วิดีโอ, เสียง (MP3, ADPCM, PCM), การสนับสนุนสคริปต์แอ็คชั่นที่ จำกัด 2, การสนับสนุนรูปร่างที่ จำกัด
ไม่ได้ผล:
- SWF: เลเยอร์คลิป
- SWF: ตีความสคริปต์การกระทำ 3
- SWF: ฟิลเตอร์บิตแมป
- SWF: การเข้าถึงเครือข่าย
การสาธิต
การสาธิต SVG พื้นฐาน (ภาพคลิกได้):

การสาธิต NANOVG ไม่สามารถทำได้ใน LVG:

การสาธิต Nuklear GUI:

ตัวอย่างแฟลช SWF:

อาคาร
สำหรับตอนนี้ Windows Executables จะสร้างเฉพาะบนโฮสต์ 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 สามารถกำหนดค่าให้ใช้แบ็กเอนด์ที่แตกต่างกันสำหรับแพลตฟอร์มเสียงและวิดีโอ คุณสามารถดูการกำหนดค่าปัจจุบันได้โดยดำเนินการ 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
อนาคต
- ใช้ lanuages สคริปต์อื่น ๆ เช่น Luajit, Jerryscript, Mujs, MU, Avian, Impalajit, Mochascript และ Angelscript
- เร่งความเร็วสคริปต์การกระทำด้วย jit เช่น sljit
- Shaders และ 3D Support
- การถอดรหัสรูปแบบขนาน ภาพและใช้การบีบอัดไฟล์ด้วยการรองรับการถอดรหัสแบบขนาน (เช่น PBZIP2)
- แบ็กเอนด์ Audio Video Codec เพิ่มเติม
การแก้ไขเฟรม SWF เพื่อรับ FPS มากกว่าที่เข้ารหัสในไฟล์ [เสร็จแล้ว]- ดีกว่ารูปแบบการจัดเก็บ SWF โดยใช้การบีบอัดเหมือน Draco ตาม ANS
ห้องสมุดกราฟิกที่น่าสนใจ
- 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/en/devnet/pdf/swf-file-format-spec.pdf
- amf v0 อ้างอิง https://wwwimages2.adobe.com/content/dam/acom/en/devnet/pdf/amf0-file-format-specification.pdf
- AMF v3 อ้างอิง https://wwwimages2.adobe.com/content/dam/acom/en/devnet/pdf/amf-file-format-spec.pdf
- AS2 อ้างอิง http://homepage.divms.uiowa.edu/~slonnegr/flash/actionscript2Reference.pdf
LVG ได้รับการพัฒนาและดูแลโดย https://github.com/lieff