This changes the clip IDs from sequential to a huffman prefix tree, meaning that parent tiles share the same prefix with child tiles (but are shorter). This allows us to use the same checkerboard pattern to draw all tiles. TODO: - make sure we're not overflowing the 8 bit limit of the stencil buffer - draw all checkerboard fields at the same time, with one draw call - fix raster drawing (fading, clipping) refs #132
An OpenGL renderer for Mapbox vector tiles, implemented in C++11, targeting iOS & OS X.
Depends
- Modern C++ compiler that supports
-std=c++11 - libpng
- libuv
- libcurl (depends on OpenSSL)
- glfw3
- Boost (for Rtree support)
- Python (for build only)
- Node.js (for build only)
Build instructions
We use mapnik-packaging to build static libraries of dependencies.
OS X
Run ./setup-libraries.sh
This downloads all required dependencies, builds them and creates universal libraries that can be used on both OS X and iOS.
To create projects, you can run:
make xproj: Creates an Xcode project with OS X-specific handlers for HTTP downloads and settings storage. It uses GLFW for window handlingmake lproj: Creates an Xcode project with platform-independent handlers for downloads and settings storage. This is what is also being built on Linuxmake linux: Builds the Linux GLFW application with make
iOS
Because libpng isn't included in the iOS SDK, you will need to build a cross-architecture version
yourself. Run ./setup-libraries.sh, which is derived from Mapnik's cross-architecture build
scripts. This will also run ./configure.
Target devices: iPhone 4 and above (4S, 5, 5c, 5s) and iPad 2 and above (3, 4, mini and/or retina).
Ubuntu
Ensure you have git and other build essentials:
sudo apt-get update
sudo apt-get install git cmake make pkg-config curl automake libtool xutils-dev
Install a -std=c++11 capable compiler
sudo add-apt-repository --yes ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-4.8 g++-4.8
Install glfw3 dependencies:
sudo apt-get install libxi-dev libglu1-mesa-dev x11proto-randr-dev x11proto-xext-dev libxrandr-dev x11proto-xf86vidmode-dev libxxf86vm-dev libxcursor-dev
Build static dependencies:
./setup-libraries.sh
This will automatically run configure for you and set the correct paths.
You can then proceed to build the library, tests or a GLFW app itself.
Style
We're currently embedding the stylesheet JSON in the binary. To create the C++ file and the associated header, run
bin/build-style.js
This is automatically taken care of as a build phase.
Usage
Desktop
- Press 'X' to reset the transform
- Press 'N' to reset north
- Press 'R' to toggle raster
- Press Tab to toggle debug information
- Press Esc to quit
Mobile
- Pan to move
- Pinch to zoom
- Use two fingers to rotate
- Double-tap to zoom in one level
- Two-finger single-tap to zoom out one level
- Single-tap to toggle the command palette visibility for resetting north & the transform, toggling debug, and toggling raster
- Double-tap, long-pressing the second, then pan up and down to "quick zoom" (iPhone only, meant for one-handed use)