Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


Based on
The master branch is a base for projections which use video textures.
Visit for some example projections based on this project.
See projection/* branches of this repo for video-based projections.
See for an empty project.


The scratch project is developed to be built on a Debian VM or a Rapsberry PI as discussed on the tools page page of the project website.

  • Clone the project: git clone
  • cd in to the project folder
  • run vagrant up
  • run vagrant reload (required: for Projectionist to start Weston)
  • run vagrant ssh
  • run make clean. It is a good idea to run these when switching between different branches of the same repository.
  • install ffmpeg
  • run make
  • run bin/main <video-path>. You should see a video playing.

Folder Structure

root dir, run (e.g.) `make` here  .
                                  ├── bin
vendor code                       ├── include
                                  │   └── projection
platform specific code code       ├── platform
                                  │   ├── rpi
                                  │   │   └── projection
                                  │   └── weston
                                  │       └── projection
the source for the projection     └── src
                                      └── scratch

  • Vendor code is where we put depedencies which are not installed with the OS package manager
  • The platform directory lists routines for establishing a OpenGL ES 2.0 contexts
  • The source directory is the place to implement your projection

Extending the build

  • To vendor a dependency, including header-only libraries, use the include folder.
  • External dependencies installed on the OS can be included in the build if they provide a pkg-config. The loop project uses this method for FFmpeg flags:
    • The project has it's own pkg-config: loop.pc
    • The project makefile alters to the pkg-config build variables to include itself

Additional Platforms

The build system targets NOOBS (Raspberry PI) as the deployment platform and a Debian VM running Wayland (weston) as a development environment.

For each platform, there is a single entry point: projection::play(drawing).
Platform-specific implementations are in platform/<platform-name>/projection/play.cpp.

The build system selects the correct implementation.

Also see


Based on the simple-egl example from weston source code: