Hikari is a small yet powerful library that makes it easy to use Flash content in Ogre3D. The possible applications include:

  • Create the interface for your game in Flash
  • Play Flash movies as cut-scenes in your game
  • Embed Flash mini-games in your game
  • Combine Flash with 3D to make novel interfaces
  • Use Flash for animated decals on 3D models

And it doesn't stop there! I'm excited to see what other uses people will dream up.
Using Hikari

The basic overview of using Hikari

  • Design your content in Flash
  • Export to SWF files.
  • Create the HikariManager.
  • Create a FlashControl for each SWF using the HikariManager.
  • Load the SWF files into each respective FlashControl.
  • Bind callbacks in ActionScript and C++.
  • Inject mouse input into the HikariManager.
  • Call HikariManager::update from your update loop.


The major features of Hikari are:

  • Efficient updating with dirty-rectangling
  • Full transparency support
  • Load the Flash ActiveX control from the registry or a local file
  • Create a FlashControl as a movable overlay or pure material
  • Bind C++ functions to handle function calls from ActionScript
  • Call ActionScript callbacks from C++
  • Support for basic ActionScript types (null, boolean, number, string)
  • International string support
  • Minimal impact on application size


Hikari is licensed under the Lesser GNU Public License (LGPL) with one stipulation:

If you use it, tell me about it! (email me: ajs15822 at gmail dot com)

Implementation Details

For the curious, when you create a FlashControl using the HikariManager, this is what happens:

  1. The Flash ActiveX control is loaded (either from Flash.ocx in the working directory or from the registry).
  2. It is embedded into a Windowless OLE site.
  3. An event handler is bound to the OLE object to handle various Flash events.
  4. Invalidations are caught, the dirty area is expanded.
  5. Mouse input is injected by translating it into native window messages which are then sent directly to the Windowless site.
  6. Keyboard input is handled by directing all keyboard messages (using a message hook) to the focused FlashControl. (To accommodate complex keyboard input)
  7. During a global update, if a FlashControl is dirty, the dirty area is rendered and merged with an internal buffer, which is then blit to a dynamic texture using Ogre3D's facilities.

Using with Mogre

For Mogre you can use the wrapper of GantZ.

HikariWrapper.zip includes the sources and a runnable demo. (look to the forum thread - maybe there is a newer version available)

A forum topic is dedicated to the wrapper: HikariWrapper forum topic

See also