Document your code
Every project on GitHub comes with a version-controlled wiki to give your documentation the high level of care it deserves. It’s easy to create well-maintained, Markdown or rich text documentation alongside your code.
Sign up for free See pricing for teams and enterprisesPiston overview
Here is an overview of the Piston architecture. Everything is developed under the MIT license, unless specified otherwise.
Examples/tutorials/getting started
These are places to get started with Piston.
- piston-examples - Small examples
- piston-tutorials - Getting started
- piston wiki - Information for people working on the Piston project
- piston_window - A window wrapper for convenience
Demonstrations
These projects demonstrate the functionality of Piston.
- skeletal_animation_demo - Demonstrates 3D skeletal animation using Gfx
- piston-music - Simple music library using SDL2 and current library
- hematite - Demonstrates 3D voxel rendering (Minecraft)
The Piston core
These libraries model the input, window and event loop. The core does not depend on any platform specific API. It uses a modular design to reduce effects of breaking changes. The reason is to write generic libraries that work across projects, and to make 90% of the ecosystem reusable and platform/API independent.
- pistoncore-input
- pistoncore-window
- pistoncore-event_loop
- piston - reexports core libraries
Utility libraries
These libraries supports the functionality and integration between other libraries. They are small and simple. The reason is to give the user free choice of higher level libraries that overlap in functionality, but keep the integration internally in Piston.
- vecmath
- quaternion
- dual_quaternion
- piston3d-cam
- interpolation
- shader_version
- piston-viewport
- piston-float
- piston-rect - Simple rectangle layout
- piston-texture
- current - "Globals" for prototyping, high level libraries, diagnostics
- table - Dynamical typed Lua-like table structure
- texture_packer - Pack small images together into larger ones
- select_color - Color selection
- read_color - Read hex colors
- read_token - Read tokens using look-ahead
- range - Range addressing
- fps_counter - FPS counter
- find_folder - Find a folder from current directory
- array - Convenience methods for working with arrays
- piston-shaders - Repository for GPU shaders
- piston-history_tree - A persistent history tree for undo/redo
Bindings
These are bindings to C libraries.
- glfw-rs - GLFW3 bindings and idiomatic wrapper for Rust.
- freetype-rs - Safe wrappers for FreeType fonts
- freetype-sys - Low level wrappers for FreeType fonts
- physfs-rs - PhysFS bindings
Standalone libraries
These libraries can be used separately or together with the Piston ecosystem. The reason is to decouple dependencies such that the functionality in these libraries can be reused as much as possible.
- image - Image encoding and decoding
- imageproc - Image processing operations
- piston_collada - Advanced standard format for 3D
- wavefront_obj - Simple 3D format
- hematite_nbt - Minecraft's Named Binary Tag (NBT) format
- piston_meta - Meta parsing for domain specific text formats
- dyon - A rusty dynamically typed scripting language
Image formats & processing
- image - Collects encoders and decoders
- gif - GIF encoder and decoder
- png - PNG decoder
- tiff - TIFF encoder and decoder
- color_quant - Color quantization
Backends
These integrates Piston with various external APIs. The window and graphics backends are decoupled. The reason is greater flexibility when shipping a product, easier to compare API design and performance, and works both for cross and native platforms.
Window (uses the piston core):
2D graphics (uses piston2d-graphics:
Libraries that extends Piston
These libraries leverages the generic functionality of Piston into higher level features.
Under PistonDevelopers:
- conrod - Immediate UI
- camera_controllers - 3D camera navigation
- piston-ai_behavior - AI behavior trees
- piston-button_tracker - Tracking mouse/button events
- piston-button_controller - Handles events and state for buttons
- piston-split_controller - Split layout
- piston2d-scroll_controller - Handling scroll area
- piston2d-sprite - Sprite animation
- piston2d-shapes - Convenience structs for 2D shapes
- piston2d-drag_controller - Drag & drop for 2D
- timer_controller - Timer events
External:
- carboxyl_window - Functional reactive programming for window events, GNU license
- elmesque - 2D graphics inspired by the Elm graphics modules
Gfx libraries
These libraries uses the Gfx backend agnostic graphics API.
- dev_menu - Uses pistoncore-input
- gfx_text - Uses FreeType
- gfx_debug_draw - Rendering lines and text in 3D space
- piston3d-gfx_voxel - Voxel rendering
- piston-gfx_texture - Integrates Gfx textures with Piston
- skeletal_animation
Community projects
- pluto - Game competition website, using Rust server stack
- hematite - A Minecraft client
- hematite_server - A Minecraft server
Under planning/inactive/not-usable-yet
Sorted by activity.
- opengex - Rust library for OpenGEX format
- turbine - 3D game engine with built-in editor
- editor - Editor interface
- inventory - Plugin management in Rust programs
- mush - GUI for graphs
- gfx_window_shared - An alternative window backend using Gfx
- graphics-lab - Visualize and test 2D graphics
- axis_helper - A 3D axis helper
- control_point - Manipulating control points
- vec - SIMD instructions for generic vectors
Productivity tools
- VisualRust - A Rust plugin for Visual Studio
- Eco - Rust ecosystem breaking change analysis
Infrastructure
- Piston docs - Documentation for Piston's projects
- Piston blog - The Piston project's blog
- Piston website - The Piston project's website
- Hematite website - The Hematite project's website