All notable changes to easy-gl are documented in this file.
The format follows Keep a Changelog, and this project
adheres to Semantic Versioning. While the major version is
0, the public API may change in any minor release — see the pre-1.0 note in
docs/releasing.md.
0.1.1 — 2026-10-10
Moves easy-gl onto meta-gl 0.4.1. No easy-gl source file or public API changed.
- Built and tested against meta-gl
v0.4.1(dd3b30055d55fdc42240de7af248259338256992) instead ofv0.4.0. meta-gl 0.4.1 keeps the 0.4.0 API; it stops an unoptimized shared Linuxlibmeta-gl.sofrom exporting libstdc++ template instantiations, and runs all of meta-gl's tests in CI. easy-gl builds meta-gl as a static library unlessEASYGL_BUILD_SHARED=ON, so its default build is unaffected by that fix. As before, meta-gl is a sibling checkout (../meta-gl) that this tag does not select: check out meta-glv0.4.1next to easy-gl to reproduce this release.
- The 0.1.0 entry named meta-gl
v0.4.0as4399a3ed. Thev0.4.0tag was moved on the meta-gl remote after easy-gl 0.1.0 was cut and now points at1a7df71d, which adds only test and CI changes to4399a3ed. The 0.1.0 entry now records both, so the hash it names is the one 0.1.0 was actually built against.
- 5/5 CTest tests pass in a Debug build against meta-gl
v0.4.1, and the library, the tests and thehello-triangle-sdlexample build with 0 warnings. - Verified on Debian GNU/Linux 13 with GCC 14.2.0, CMake 3.31.6, Ninja and SDL3 3.4.0.
0.1.0 — 2026-10-10
First tagged release. easy-gl has been developed since 2026-04-14 and has declared 0.1.0 in
project() from the start; this tag names a state of the tree rather than introducing new work,
so the entries below describe what the release contains, not what changed since a previous tag.
- RAII resource classes over OpenGL / OpenGL ES objects, all non-copyable and movable, built
on meta-gl's typed handles and enums:
Buffer,Texture,Shader,Program,ProgramPipeline,VertexArray,Framebuffer,Renderbuffer,Sampler,Query,SyncandTransformFeedback; all butSyncshare thedetail::GenerationTrackedbase. Device: initialization from a host-suppliedGetProcAddresscallback, render state, generic state getters, the draw-call family (arrays, elements, instanced, indirect, range, base-vertex), debug-message control, and the OpenGL ES 3.1/3.2 entry points.- Runtime capability detection:
ContextInfo,CapabilitiesandFeaturewithDevice::supports()/require(), reusing meta-gl's context and version detection, including WebGL 1/2 classification. A missing entry point raisesUnsupportedFeatureExceptioninstead of calling a null function pointer. - Context loss and restore:
ResourceRegistry,RecoverableResourceandResourceRegistration. - Helpers:
ScopedBind,ScopedDebugGroupandUniformCache. - Emscripten / WebGL builds, with a selectable exception ABI
(
EASYGL_EMSCRIPTEN_EXCEPTION_MODEL,WASMorJS), and thedefault,releaseandemscriptenCMake presets. - Release identity:
easygl/Version.hppis now generated bycmake/EasyGlVersion.cmakefromproject(easy-gl VERSION ...)andEASYGL_VERSION_PRERELEASE, replacing the hand-written header that repeated the number. The existingeasygl::version_major/minor/patchconstants keep their names;version_prerelease,version_string,version_is_prereleaseand the preprocessor-testableEASYGL_VERSION_*macros are new. Covered byeasy-gl-version-tests. docs/releasing.md: where the version lives, the release checklist, and how the meta-gl revision is recorded.
- meta-gl
v0.4.0as it stood when this release was cut:4399a3edce7e1f06f805ebbc5609662d4d6dd6f4. The tag was later moved to1a7df71d1346c09eb324d5fe58363a7fda74b661, which adds only test and CI changes, so the meta-gl library code is the same at both. easy-gl consumes meta-gl as a sibling checkout withadd_subdirectory(../meta-gl), so this tag does not select it: check out meta-glv0.4.0next to easy-gl to reproduce this release. - SDL3 is optional and used only by the
hello-triangle-sdlexample, which is skipped when SDL3 is not found.
- The tests use fake function-pointer loaders only; nothing runs against a real GL context or a real browser WebGL implementation.
- There is no CMake package export, so
find_package(easy-gl)is not supported; consume easy-gl withadd_subdirectory(PLAN W3). - The build requires C++23 (CMake sets it, and meta-gl requires it), while
README.mdandCLAUDE.mdstill name C++20 (PLAN W1). - Only the default static library was verified;
EASYGL_BUILD_SHARED=ONwas not built for this release.
- 5/5 CTest tests pass in a Debug build, where their
assert()checks are active:easy-gl-smoke-tests,easy-gl-resource-smoke-tests,easy-gl-context-lifecycle-tests,easy-gl-webgl-testsandeasy-gl-version-tests. The library, the tests and thehello-triangle-sdlexample build with 0 warnings; the example was built but not run, because it needs a display. - Verified on Debian GNU/Linux 13 with GCC 14.2.0, CMake 3.31.6, Ninja and SDL3 3.4.0, against
meta-gl
v0.4.0.