Week 15/2013: Housekeeping, started on 1.11
Last week I did housekeeping on the autobuilder and started work on 1.11 by finishing some window management improvements and starting on OpenGL 2 based graphics.
During the release of the stable 1.10 we encountered a number of autobuilder glitches, so I needed to spend some time doing builder housekeeping. The builder is now more robust when detecting the built distribution packages (modification time checked in addition to mere existence), I refreshed the project's stable APT repository (fixing a hash sum mismatch error), included the "buildNNN" label in all Ubuntu packages whether they are stable or not (so that APT is not confused about which ones are newer), and sorted out some uncommitted changes on the OS X 10.8 builder that were preventing it from completing a build successfully. I also switched back to code.iki.fi as the primary APT repository since it is my intention to keep that machine online permanently. Dropbox can still be used as a fallback mirror, though.
The first thing to do for 1.11 was to finish with the revised window management where fullscreen resolution is separated from windowed size, and a few more commands for window manipulation have been added (togglemaximized, centerwindow). These changes have now been completed and merged to master. This ended up being a substantial rewrite, with all the suitably generic classes relocated to libgui. A nice side-effect of relocating the code was that it was necessary to abstract input event production at the drawing surface level — the correct way to do this is to pass the input to the client's input drivers/subsystem rather than inserting them directly into the client's event queue, where it is subject to vanilla-emulation latencies.
In preparation to the Input drivers proposal, I added a new InputSystem class that will own all input drivers and manage the virtual input devices. It will take some time before all the existing input code is revised to work within this new context, though — at the moment InputSystem only handles initialization and shutdown of the subsystem.
As the client and server applications are now using C++, I removed the transitional LegacyCore class that was introduced in 1.9.7. It acted as a helper for old C code to interact with the C++ libdeng2 App, Log, and other core classes. I always enjoy removing old cruft like this.
Last but definitely not least, I began setting up a set of classes in libgui for OpenGL 2 based graphics. One objective with this new graphics code is to retain compatibility with OpenGL ES 2 in one form or another. It is rather striking how much the basic underlying assumptions of how graphics are rendered have changed since Doomsday's current renderer was written. It is clear that a very large portion of the map renderer will need to be rewritten to efficiently utilize the new GL2 classes. However, this is a concern for the future; for now I will be using the GL2 graphics only in the new UI widgets, allowing me to develop and mature this code before we set out on the much more ambitious task of next-generation map rendering.
During the release of the stable 1.10 we encountered a number of autobuilder glitches, so I needed to spend some time doing builder housekeeping. The builder is now more robust when detecting the built distribution packages (modification time checked in addition to mere existence), I refreshed the project's stable APT repository (fixing a hash sum mismatch error), included the "buildNNN" label in all Ubuntu packages whether they are stable or not (so that APT is not confused about which ones are newer), and sorted out some uncommitted changes on the OS X 10.8 builder that were preventing it from completing a build successfully. I also switched back to code.iki.fi as the primary APT repository since it is my intention to keep that machine online permanently. Dropbox can still be used as a fallback mirror, though.
The first thing to do for 1.11 was to finish with the revised window management where fullscreen resolution is separated from windowed size, and a few more commands for window manipulation have been added (togglemaximized, centerwindow). These changes have now been completed and merged to master. This ended up being a substantial rewrite, with all the suitably generic classes relocated to libgui. A nice side-effect of relocating the code was that it was necessary to abstract input event production at the drawing surface level — the correct way to do this is to pass the input to the client's input drivers/subsystem rather than inserting them directly into the client's event queue, where it is subject to vanilla-emulation latencies.
In preparation to the Input drivers proposal, I added a new InputSystem class that will own all input drivers and manage the virtual input devices. It will take some time before all the existing input code is revised to work within this new context, though — at the moment InputSystem only handles initialization and shutdown of the subsystem.
As the client and server applications are now using C++, I removed the transitional LegacyCore class that was introduced in 1.9.7. It acted as a helper for old C code to interact with the C++ libdeng2 App, Log, and other core classes. I always enjoy removing old cruft like this.
Last but definitely not least, I began setting up a set of classes in libgui for OpenGL 2 based graphics. One objective with this new graphics code is to retain compatibility with OpenGL ES 2 in one form or another. It is rather striking how much the basic underlying assumptions of how graphics are rendered have changed since Doomsday's current renderer was written. It is clear that a very large portion of the map renderer will need to be rewritten to efficiently utilize the new GL2 classes. However, this is a concern for the future; for now I will be using the GL2 graphics only in the new UI widgets, allowing me to develop and mature this code before we set out on the much more ambitious task of next-generation map rendering.