Beta Derelict Packages

Quite some time ago, I updated DerelictUtil with some mostly cosmetic changes. This involved making sure all of the functions in the SharedLibLoader class were annotated as they should be (all public functions are final, @nogc and nothrow are applied where appropriate), but also resulted in a couple of utilities that would break binary compatibility. So I decided to bump to a 3.0 release.

The last time I pushed out a major version of DerelictUtil that was not binary compatible with the old version, there was some breakage. Some dependent packages had a SemVer tag that was too liberal. In some cases, people who were building manually wound up with some packages built against the old version and others against the new version in the same program.

This time, I wanted to do it right. So I created a 3.0 branch in the DerelictUtil repository, tagged a 3.0.0-alpha.1 release (and updated the trailing decimal for bugfix releases), then started gradually getting the Derelict packages I'm responsible for into shape. This involved making sure each package was up to date with the latest version of the C library it binds to, all dub.json files were converted to dub.sdl (which is my preference), everything had a consistent syntax, adding static binding support for more packages, and adding package modules.

Once everything I wanted to update was updated, and Guillaume updated his stuff, then I started pushing every package to their respective master branches and changing the alpha tags to beta. That's all finally complete. There are still a few little details I missed (e.g. DerelictSFML2 still has a dub.json), but I'll get those fixed up as I work on the documentation.

Speaking of documentation, that's where my efforts will be focused next. I'm going to make a push to get docs for every package. Once that's done and all the kinks are worked out of the beta versions, I'll start chopping off the beta tags. Before then, I'll put up a cheatsheet with a table of all the DerelictOrg packages, their current version, and which version of a C library they bind to.

The DerelictGL3 package was the only one to get a major rewrite. It now supports compile-time selection, through templates and mixins, of which OpenGL versions and extensions should be loaded. Anything not requested will not be compiled into the program. I also added support for wrapping all of the function pointers inside a struct. When using multiple contexts, this allows loading each context once instead of having to call reload on every context switch. I've still got work to do on adding extensions, but it's usable and working. Until the documentation is complete, you're on your own in figuring out how to use the new features (though I'll do a post on it soon, the one I did before is no more), but you can still use it the old way, too. Just import derelict.opengl and it should all work as it always has.