Cross-platform app development in C++ or Lua.

Polycode's core is written in C++ and currently runs on Mac, Windows and Linux with iOS and Android support planned in the future. All platform-specific functionality is abstracted into a cross-platform core and implemented natively on each platform, so the same C++ code will compile on each supported platform out of the box.

Polycode can also be used as a purely scripted Lua framework via the Polycode IDE. Applications developed in Lua can be exported directly to all supported platforms.

Free and open source.

Polycode is completely free and open source under the MIT License. All of Polycode's development happens publicly on Github and community pull requests are regularly reviewed.

Even this website is open source and setup for community improvement.

Polycode IDE.

Polycode is distributed as a C++ library in tandem with a standalone IDE. You can...

  • Use Polycode as a C++ framework and ignore the IDE entirely.
  • Use Polycode as a C++ framework and use the IDE to edit content.
  • Write code directly in the IDE using Lua.

If you write all your code in Lua, you can export your application to any of the supported platforms directly from the IDE.

The IDE lets you create and edit Polycode material files, scenes, sprites and Lua and shader scripts.

The Polycode IDE is written completely in Polycode and uses the Polycode UI module for all of its UI.

2D and 3D graphics.

Scene graph entity system.

Polycode provides scene rendering in 2D and 3D via its entity-based scene graph. Though direct access to the renderer is always available, most of Polycode's strength comes from its automatic management and rendering of scene entities. Polycode takes care of things like frustum culling, lights management and material application.

Scenes can be rendered in 2D and 3D via dynamic cameras and scenes/entities can be edited visually in the Polycode IDE.

Materials and shaders.

Polycode's material system allows you to define shader-based materials and multi-pass post-processing filters. You can define materials in material XML files which you can visually edit in the Polycode IDE or create manually in code.

Polycode's shader system is abstracted and currently implemented in GLSL for the OpenGL renderer.

Mesh rendering and skeletal animation.

Polycode can import meshes and skeletal animation from a variety of different file types to its native mesh, skeleton and animation formats. The skeletal animation system supports weighted animation blending and entity to bone attachment.

Audio.

Polycode supports sound playback from WAV and OGG formats and custom audio data buffers, as well as sound recording from sytem's sound input devices. Positional 2D and 3D sound is also supported by the scene graph with positional sound placement support in the Polycode IDE.

Input.

Polycode supports full keyboard, mouse and joystick/gamepad input. Multi-touch input is provided on supported platforms as well as via the TUIO module.

Networking.

UDP-based peer-to-peer or server-client networking system with reliable packet support (currently C++ only).

UI.

Polycode comes with a UI module that includes buttons, checkboxes, slides, color pickers, file dialogs, scroll bars, text input, menus and windows. It's fully skinnable and comes with light and dark default themes which include a high-resolution retina-ready version.

2D and 3D Physics and collision.

Polycode comes with a 3D physics module that integrates the Bullet physics engine with Polycode's scene graph system for automatic physics simulation and collision detection, character controller and vehicle simulation.

Polycode also includes a 2D physics module which integrates Box2D with its scene graph for automatic 2D physics simulation and collision detection.