Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
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
Nächste SlideShare
Wird geladen in …5
×

Porting C++ apps to FLASCC

11.984 Aufrufe

Veröffentlicht am

  • Привет! Можешь помось разобраться с установкой FlasCC? (crossbridge). Немогу найти каталог sdk в папке crossbridge нужный для сборки любого примера. Мой sype antonvelm или меил pegasgames at gmail точка com. А то в нете вобще немогу найти туториала как все установить по ридми не работает :(
       Antworten 
    Sind Sie sicher, dass Sie …  Ja  Nein
    Ihre Nachricht erscheint hier

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/

×