#opengl #angle #build-system #es #mozilla #rendering #fork

build mozangle

Mozilla's fork of Google ANGLE, repackaged as a Rust crate

27 releases

Uses old Rust 2015

0.5.2 Oct 29, 2024
0.5.1 Feb 9, 2024
0.5.0 Dec 7, 2023
0.4.0 Oct 11, 2023
0.1.6 Mar 15, 2018

#50 in Build Utils

Download history 2682/week @ 2024-08-22 3055/week @ 2024-08-29 2639/week @ 2024-09-05 2438/week @ 2024-09-12 1765/week @ 2024-09-19 1814/week @ 2024-09-26 3132/week @ 2024-10-03 2855/week @ 2024-10-10 3095/week @ 2024-10-17 2835/week @ 2024-10-24 3093/week @ 2024-10-31 2380/week @ 2024-11-07 2427/week @ 2024-11-14 2470/week @ 2024-11-21 1646/week @ 2024-11-28 2005/week @ 2024-12-05

8,922 downloads per month
Used in 5 crates

BSD-3-Clause

14MB
310K SLoC

C++ 302K SLoC // 0.1% comments Bitbake 3.5K SLoC // 0.0% comments C 3K SLoC // 0.1% comments Rust 1.5K SLoC // 0.0% comments Python 551 SLoC // 0.2% comments Shell 53 SLoC // 0.2% comments

mozangle

Mozilla's fork of Google ANGLE, repackaged as a Rust crate.

  • ANGLE is an implementation of OpenGL ES. Its official build system is gn, from Chromium's depot_tools.

  • mozilla/angle on GitHub is a fork with some Gecko-specific patches.

  • gfx/angle in mozilla-central is generated from that. update-angle.py runs gn desc to extract information from the official build system, copies relevant source files, and creates moz.build files for Gecko's build system.

  • This repository imports a copy of the gfx/angle directory. The generate_build_data.py script turns data from moz.build files into a Rust source file. (This script supports just enough of the moz.build format for this specific purpose.) Finally, a Cargo build script drives the C++ compilation with the cc crate based on that data.

Feature flags

By default, this crate only compiles the shader translator.

In Windows, the egl Cargo feature enables the EGL and OpenGL ES implementations. Although upstream ANGLE supports more platforms, this crate only configures the Direct3D 11 rendering backend.

[dependencies]
mozangle = { version = "0.5", features = ["egl"] }

Updating ANGLE

To update:

  • Remove gfx/angle entirely
  • Copy a new version of it from mozilla-central
  • Apply any patches present in the patches directory
  • Run python3 generate_build_data.py
  • In the commit message, include the mozilla-central commit hash

Dependencies