2017-04-22 16:27:54 -05:00
# Pixel [![GoDoc](https://godoc.org/github.com/faiface/pixel?status.svg)](https://godoc.org/github.com/faiface/pixel) [![Go Report Card](https://goreportcard.com/badge/github.com/faiface/pixel)](https://goreportcard.com/report/github.com/faiface/pixel)
2017-01-23 15:27:27 -06:00
2017-04-24 07:18:51 -05:00
[![Join the chat at https://gitter.im/pixellib/Lobby ](https://badges.gitter.im/pixellib/Lobby.svg )](https://gitter.im/pixellib/Lobby?utm_source=badge& utm_medium=badge& utm_campaign=pr-badge& utm_content=badge)
2017-04-23 06:54:53 -05:00
A 2D game library that doesn't get in your way. Focus on ease of use, extensibility and performance.
2017-04-23 13:35:58 -05:00
Take a look into the [features ](#features ) to see what it can do.
2017-04-22 16:27:54 -05:00
```
go get github.com/faiface/pixel
```
2017-04-23 13:35:58 -05:00
See [requirements ](#requirements ) for the list of libraries necessary for compilation.
2017-04-22 16:27:54 -05:00
## Tutorial
The [Wiki of this repo ](https://github.com/faiface/pixel/wiki ) contains an extensive tutorial
covering several topics of Pixel. Here's the content of the tutorial parts so far:
2017-04-22 16:29:05 -05:00
- [Creating a Window ](https://github.com/faiface/pixel/wiki/Creating-a-Window )
- [Drawing a Sprite ](https://github.com/faiface/pixel/wiki/Drawing-a-Sprite )
- [Moving, scaling and rotating with Matrix ](https://github.com/faiface/pixel/wiki/Moving,-scaling-and-rotating-with-Matrix )
- [Pressing keys and clicking mouse ](https://github.com/faiface/pixel/wiki/Pressing-keys-and-clicking-mouse )
- [Drawing efficiently with Batch ](https://github.com/faiface/pixel/wiki/Drawing-efficiently-with-Batch )
- [Drawing shapes with IMDraw ](https://github.com/faiface/pixel/wiki/Drawing-shapes-with-IMDraw )
2017-04-22 16:27:54 -05:00
## Examples
The [examples ](https://github.com/faiface/pixel/tree/master/examples ) directory contains a few
examples demonstrating Pixel's functionality.
**To run an example**, navigate to it's directory, then `go run` the `main.go` file. For example:
```
$ cd examples/platformer
$ go run main.go
```
2017-04-23 06:54:53 -05:00
Here are some screenshots from the examples!
2017-04-22 16:27:54 -05:00
2017-04-23 13:57:36 -05:00
| [Lights ](examples/lights ) | [Platformer ](examples/platformer ) |
| --- | --- |
| ![Lights ](examples/lights/screenshot.png ) | ![Platformer ](examples/platformer/screenshot.png ) |
2017-04-22 16:27:54 -05:00
2017-04-23 13:57:36 -05:00
| [Smoke ](examples/smoke ) | [Xor ](examples/xor ) |
| --- | --- |
| ![Smoke ](examples/smoke/screenshot.png ) | ![Xor ](examples/xor/screenshot.png ) |
2017-04-22 16:27:54 -05:00
## Features
2017-04-23 15:29:23 -05:00
Here's the list of the main features in Pixel. Although Pixel is still under heavy development,
**there should be no major breakage in the API.** This is not a 100% guarantee, though.
2017-04-22 16:27:54 -05:00
- Fast 2D graphics
- Sprites
- Primitive shapes with immediate mode style
[IMDraw ](https://github.com/faiface/pixel/wiki/Drawing-shapes-with-IMDraw ) (circles, rectangles,
lines, ...)
- Optimized drawing with [Batch ](https://github.com/faiface/pixel/wiki/Drawing-efficiently-with-Batch )
- Simple and convenient API
- Drawing a sprite to a window is as simple as `sprite.Draw(window)`
- Adding and subtracting vectors with `+` and `-` operators... how?
- Wanna know where the center of a window is? `window.Bounds().Center()`
- [... ](https://godoc.org/github.com/faiface/pixel )
2017-04-22 16:34:34 -05:00
- Full documentation and tutorial
2017-04-22 16:27:54 -05:00
- Works on Linux, macOS and Windows
- Window creation and manipulation (resizing, fullscreen, multiple windows, ...)
- Keyboard and mouse input without events
- Well integrated with the Go standard library
- Use `"image"` package for loading pictures
- Use `"time"` package for measuring delta time and FPS
- Use `"image/color"` for colors, or use Pixel's own `color.Color` format, which supports easy
2017-04-23 06:54:53 -05:00
multiplication and a few more features
2017-04-22 16:27:54 -05:00
- Pixel uses `float64` throughout the library, compatible with `"math"` package
2017-04-22 16:34:06 -05:00
- Geometry transformations with
[Matrix ](https://github.com/faiface/pixel/wiki/Moving,-scaling-and-rotating-with-Matrix )
- Moving, scaling, rotating
- Easy camera implementation
2017-04-22 18:30:15 -05:00
- Off-screen drawing to Canvas or any other target (Batch, IMDraw, ...)
2017-04-22 16:27:54 -05:00
- Fully garbage collected, no `Close` or `Dispose` methods
- Full [Porter-Duff ](http://ssp.impulsetrain.com/porterduff.html ) composition, which enables
- 2D lighting
- Cutting holes into objects
- Much more...
- Pixel let's you draw stuff and do your job, it doesn't impose any particular style or paradigm
2017-04-22 16:44:17 -05:00
- Platform and backend independent [core ](https://godoc.org/github.com/faiface/pixel )
2017-04-22 16:27:54 -05:00
- Core Target/Triangles/Picture pattern makes it easy to create new drawing targets that do
arbitrarily crazy stuff (e.g. graphical effects)
- Small codebase, ~5K lines of code, together with the backend
[glhf ](https://github.com/faiface/glhf ) package
## Missing features
2017-04-22 16:36:54 -05:00
Pixel is in development and still missing few critical features. Here're the most critical ones.
2017-04-22 16:27:54 -05:00
- Audio
- Drawing text
- Antialiasing (filtering is supported, though)
2017-04-23 10:48:54 -05:00
- Advanced window manipulation (cursor hiding, window icon, ...)
2017-04-22 16:27:54 -05:00
- Better support for Hi-DPI displays
2017-04-23 07:32:41 -05:00
- Mobile (and perhaps HTML5?) backend
2017-04-22 16:27:54 -05:00
- More advanced graphical effects (e.g. blur)
2017-04-23 07:35:56 -05:00
- Tests and benchmarks
2017-04-22 16:27:54 -05:00
**Implementing these features will get us to the 1.0 release.** Contribute, so that it's as soon as
possible!
## Requirements
2017-04-22 16:58:13 -05:00
[PixelGL ](https://godoc.org/github.com/faiface/pixel/pixelgl ) backend uses OpenGL to render
graphics. Because of that, OpenGL development libraries are needed for compilation. The dependencies
are same as for [GLFW ](https://github.com/go-gl/glfw ).
2017-04-22 16:27:54 -05:00
- On macOS, you need Xcode or Command Line Tools for Xcode (`xcode-select --install`) for required
headers and libraries.
- On Ubuntu/Debian-like Linux distributions, you need `libgl1-mesa-dev` and `xorg-dev` packages.
- On CentOS/Fedora-like Linux distributions, you need `libX11-devel libXcursor-devel libXrandr-devel
libXinerama-devel mesa-libGL-devel libXi-devel` packages.
- See [here ](http://www.glfw.org/docs/latest/compile.html#compile_deps ) for full details.
## Contributing
TODO
## License
[MIT ](LICENSE )