Porting C++ based Apps to Flash        using FLASCC            Pavel Nakaznenko, 2013           p.nakaznenko@gmail.com
This presentation is about    Adobe Flash AlchemyFLASCC technology    Porting application to Flash with FLASCC    Probl...
Adobe Flash    Cross-platform multimedia technology    Vast userbase, broad platforms coverage    Flash Player – standa...
Adobe Flash 11.4    3D Hardware acceleration    Shader support    Multi-threading
C++ to Flash – How?    Porting manually = very long and resource    demanding process    Converting logic code to AS3 (C...
Answer:LLVM!
LLVM – low level virtual machine    RISC-like language independent instruction set    and type system    Link time optim...
Adobe FLASCC (Alchemy)    Compiling C++ code into low level virtual    machine (LLVM) bytecode    Performing LLVM compil...
Porting to flash in 7 steps             1) Download FLASCC sdk             2) Follow ReadMe installation                in...
FLASCC features at glance    GCC based toolset + Cygwin in redist    Some libs have been already ported: SDL, zlib, vorb...
Not as good as it looks    Very raw technology stack    Tools fall out with OutOfMemoryException when    trying to build...
Not as good as it looks – part two    Growing Pains – claimed functionality doesnt always    work    No AVM2 low-level m...
VFS              or speaking of wrappers    VFS – Virtual File System, unified way to load    files and stay POSIX compli...
ES2API      or speaking of wrappers pt. 2    Wraps Stage3D API around GLES1.0 API    Part of Adobe in-house codebase (no...
Adobe Flash Threading          Implementation Specifics    Back-end: Bytecode is compiled into separate blob, which runs ...
Problems Ive faced    Worker can not access Stage3d    Worker can not perform IO with filesystem, due to    sandbox rest...
Problems Ive faced – pt. 2    Start application with startAsync, spawn game thread in entry point    (workaround for star...
Debugging (general)    GDB support only for small-scale projects    No debugging possible for big codebase. So no    bre...
Debugging (rendering)    Flash Stage3D uses DirectX driver on Windows    platform    Stage3D API calls ≈ DirectX API cal...
Profiling    Adobe Scout profiling tool    Requires -advanced-telemetry flag to be passed    to compiler (will be suppor...
Bonus links    http://www.adobe.com/devnet/games/articles/compiling-opengl-games.html    http://gaming.adobe.com/technol...
Porting C++ apps to FLASCC
Upcoming SlideShare
Loading in...5
×

Porting C++ apps to FLASCC

11,088

Published on

1 Comment
8 Likes
Statistics
Notes
  • Привет! Можешь помось разобраться с установкой FlasCC? (crossbridge). Немогу найти каталог sdk в папке crossbridge нужный для сборки любого примера. Мой sype antonvelm или меил pegasgames at gmail точка com. А то в нете вобще немогу найти туториала как все установить по ридми не работает :(
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
11,088
On Slideshare
0
From Embeds
0
Number of Embeds
11
Actions
Shares
0
Downloads
44
Comments
1
Likes
8
Embeds 0
No embeds

No notes for slide

Porting C++ apps to FLASCC

  1. 1. Porting C++ based Apps to Flash using FLASCC Pavel Nakaznenko, 2013 p.nakaznenko@gmail.com
  2. 2. This presentation is about Adobe Flash AlchemyFLASCC technology Porting application to Flash with FLASCC Problems Ive faced
  3. 3. Adobe Flash Cross-platform multimedia technology Vast userbase, broad platforms coverage Flash Player – standalone or plug-in AVM2 – ES4 based JIT VM AVM2 executes SWF bytecode
  4. 4. Adobe Flash 11.4 3D Hardware acceleration Shader support Multi-threading
  5. 5. C++ to Flash – How? Porting manually = very long and resource demanding process Converting logic code to AS3 (CodeGen) + Flash Wrapper = very error prone Other ways?
  6. 6. Answer:LLVM!
  7. 7. LLVM – low level virtual machine RISC-like language independent instruction set and type system Link time optimization, Compile time optimization Plenty of back-ends: x86, x86_64, AMD64, PowerPC, MIPS, partially ARM Many front-ends: C++, ObjC, Fortran, Ada, Haskell, Java, Python, Ruby, AS3, GLSL, D, Rust and more is coming
  8. 8. Adobe FLASCC (Alchemy) Compiling C++ code into low level virtual machine (LLVM) bytecode Performing LLVM compile- and link-time optimization Compiling LLVM bytecode into AVM2 bytecode Processing resulting files with Flash Compilation Pipeline as usual.
  9. 9. Porting to flash in 7 steps 1) Download FLASCC sdk 2) Follow ReadMe installation instructions 3) Use tutorials to setup basic I/O, threading and rendering 4) Create makefile 5) Use Scout to profile 6) Use GDB to debug … Profit!
  10. 10. FLASCC features at glance GCC based toolset + Cygwin in redist Some libs have been already ported: SDL, zlib, vorbis ogg, box2d, libqren, Bullet, Lua, etc. See Adobe website for details Hardware accelerated 3D via Stage3D calls GLS3D – OpenGL-like wrapper for Stage3D API AGAL - HLSLGLSL like shading language P-threads, OpenMP supported GDB for debugging Scout for code, memory, Stage3d profiling
  11. 11. Not as good as it looks Very raw technology stack Tools fall out with OutOfMemoryException when trying to build debug version of big project (the size of UE3). One line of code change in .cpp = 15 minutes build for big projects. Think carefully before you build! Profiling tool wasnt working till the very end of integration
  12. 12. Not as good as it looks – part two Growing Pains – claimed functionality doesnt always work No AVM2 low-level multi-threading support Significant overhead for threads and memory sharing Still have to convert content yourself Have to write a lot of wrappers (RHI, I/O, Net etc)
  13. 13. VFS or speaking of wrappers VFS – Virtual File System, unified way to load files and stay POSIX compliant Part of FLASCC sdk guidelines Flash is not permited to perform arbitrary I/O You decide how to populate it: embed data or load run-time FLASCC provides implementation for common cases (Web storage, Local Shared Object, Embedded storage)
  14. 14. ES2API or speaking of wrappers pt. 2 Wraps Stage3D API around GLES1.0 API Part of Adobe in-house codebase (not available for public) Still WIP
  15. 15. Adobe Flash Threading Implementation Specifics Back-end: Bytecode is compiled into separate blob, which runs on new instance of AVM2 in the background. Front-end C++ : POSIX compliant thread functionality (pthreads) Available atomic operations: __sync_*** family Front-end AS3: Worker, Mutex, Condition classes (flash.concurrent package) The Flash Player runs on UI (Primordial) thread Game code entry point could be reached two different ways: startBackground and startAsync
  16. 16. Problems Ive faced Worker can not access Stage3d Worker can not perform IO with filesystem, due to sandbox restrictions Entry point can not be called with startBackground due to the bug with static object construction. Memory sharing comes via messaging = have to serialize your object and de-serialize it every time you want to change the data Memory copy and access impersonation are only viable options
  17. 17. Problems Ive faced – pt. 2 Start application with startAsync, spawn game thread in entry point (workaround for startBackground problem) Every call for an impersonation gives overhead of 16ms avg. while (true); on UI thread locks the whole Flash Player To impersonate call you have to wrap the function you would like to be executed on behalf of another thread as void* function(void *args); Severe memory fragmentation due to small allocation and Flash Player GC (Mark & Sweep) Low memory limit – approx 600 Mb for app, 1.4Gb for Player (Windows) No memory page protection. This will work: *((int*)0) = 100;
  18. 18. Debugging (general) GDB support only for small-scale projects No debugging possible for big codebase. So no breakpoints, step-by-step, etc Tons of inline_as3(“trace((new Error()).getStackTrace());n”); Use your brain. Because any build takes at least 15 minutes. Watch flash log with “tail” like programs, i.e. “Baretail”
  19. 19. Debugging (rendering) Flash Stage3D uses DirectX driver on Windows platform Stage3D API calls ≈ DirectX API calls AGAL ≈ HLSL Windows Standalone Flash Player is an ordinary DirectX based application Use PIX to debug rendering!
  20. 20. Profiling Adobe Scout profiling tool Requires -advanced-telemetry flag to be passed to compiler (will be supported in later drops) Python script is used to add telemetry flag. Allows rendering, memory, calls, display lists profiling. Supports threads. Sometimes may be used for debugging
  21. 21. Bonus links http://www.adobe.com/devnet/games/articles/compiling-opengl-games.html http://gaming.adobe.com/technologies/flascc/ http://blogs.adobe.com/flascc/ https://github.com/alexmac/alcexamples https://github.com/alexmac/alcextra https://github.com/adamcath/telemetry-utils https://github.com/alexmac/ http://www.baremetalsoft.com/baretail/
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×