Last week I managed to largely finish my work in the qapp-based and remove-sdlnet branches. The next step is to run it through a series of tests so that I can be confident everything is working on all platforms.
What has changed? I have done several very fundamental improvements to the core of the application, starting with how the game interacts with the native window system.
- One and the same Qt-based application main loop on all platforms, ensuring better behavior as a native GUI application. Previously we had a Win32 WndProc and on Unix an SDL-based main loop.
- Window redrawing decoupled from game logic updates. Qt will allow us to apply threading to GL buffer swaps so that the main loop doesn't have to stop while waiting for vsync.
- Keyboard events support Unicode characters and respect the configured language settings (however, the console doesn't, yet).
- The game window decides when to capture the mouse. One can manipulate the game window just as any other window; the mouse is captured only when you click in the window. This goes a long way to make Doomsday more of a "model citizen" in the native OS.
- Added horizontal mouse wheel events (not yet for Windows as there we are still using the old version of the DirectInput mouse code).
- More dynamic OpenGL drawing surface management (thanks to Qt).
- Persistent window configuration. Important as we're moving away from frontend/command-line based configuration and more toward an independent executable.
The work on low-level networking takes an important step forward as we're now dropping use of the barebones SDL_net library and switching to Qt instead. (I've already talked about my previous attempts on this front.
) I've replaced the old network protocol with a revised version that uses components from the Doomsday 2.0 (libdeng2) library. This also means that multiplayer compatibility with old builds is once again broken.
All these fundamental changes will likely cause some additional instability in the unstable builds until we get a chance to fine-tune all the affected subsystems on all platforms. However, this is a crucial step forward. Many of our future roadmap items depend on the presence of the elements now being introduced. I would liken these changes to an adrenaline shot straight into the heart of the engine; I can't wait to start taking advantage of the full power of C++ and Qt.
Unless I encounter a new showstopper bug or some other roadblock, the code should be ready for merging to the master later this week.
Last week was for me, entirely about the re-implementation of our BSP node builder in C++. This work went rather smoothly and the node builder is now implemented as a mostly self-contained, independent C++ module (found in the bspbuilder/
subdirectory). The design of the algorithm is fundamentally the same at this stage but that will change over the coming weeks.
In the process of the re-implementation I also applied various fixes to the degenerate subsector issues I discovered in the glBSP algorithm in my old mapcache
research branches. These degenerate cases were the root cause of some of the more obscure fatal errors
we had in the tracker. Also, players who like to noclip
around the maps should find they no longer encounter a fatal error in certain maps (for example, DOOM2:MAP02 - near the red key bars) as of today's build 451
. Now that these issues have been addressed we can move on to the next phase of the map representation transformation.
Next week I plan to begin work on the more significant changes to our map data representation. The goal of which being the adoption of a half-edge data structure
which will provide the map navigation graph to support stuff like the autonomous tessellation rovers we have planned for world renderer 2.0
. I don't foresee there being too many issues, the significant ones were already flagged and addressed in the old mapcache
In addition to the BSP builder work I also spent some time working on a revised look for our dengine.net homepage to bring it up to date a little design wise (the most noticeable change is the integration of the framework "chrome" (e.g., the menu bar and border frame) into the page design itself). I expect this new look will go live over the next couple of days once I've road tested it in a wider variety of web browsers.