D2X-XL Worklog

Notes on features and problems from the development of D2X-XL, newest first.

Realtime Glow

Something I was putting off for a long time because I thought that while it was tempting to implement wasn't quite worth the effort was realtime glow. Well, I was in the mood to add a small enhancement to D2X-XL, and since I had most of what functionality I needed for that I set out to do it. It turned out that I had to overcome a few hurdles on my way to useable and acceptably fast glow rendering:

    1. Since glow sources are transparent they will interfere with non-glowing transparent items. This means that I cannot just render all glow sources to some set-aside glow buffer, blur the glow buffer contents once all transparent stuff has rendered and blend it into the final scene. I will have to blur and blend the glow buffer's current content every time some non-glowing transparent stuff gets rendered instead.

    2. Above that glow sources can have different appearance (strength of blur, brightness). That means another instance where the current glow buffer content has to be flushed.

    3. The current implementation uses a "lazy" model for handling the glow buffer - it will be filled until some change of parameters or type of render item will enforce a flush. Since it usually changes OpenGL states (shader program loaded, textures bound, etc.), flushing the glow buffer had to be inserted rather thoughtfully, and it took me a while to do this right.

    4. 1) and 2) mean that there can be quite a few blur passes per scene. This in turn means burning a lot of fill rate if the entire blur buffer (covering the entire screen or output window) gets flushed. To avoid that the area of the glow buffer that actually contains something has to be determined and rendered. I found this to be particularly difficult. Descent has a function that does a projection of 3D coordinates to 2D screen coordinates, but when I started to use it for viewport calculation I found it to be broken - at least for aspect ratios other than 3:4. At first I thought that just replacing Descent's software projection with multiplying 3D coordinates with OpenGL's projection matrix would solve this problem, but this wasn't the case - the clip space (output window) transformation still had to be done. It took me a bit of reading, but after a while I understood the principle behind this, and as a side product D2X-XL's software projection (which is e.g. needed for visibility culling) has been fixed, too.

Glow rendering still can be performance hungry, so it is made dependent on render quality (it will only be available at the two highest quality settings), and above that can be enabled manually in the effect options menu.

Here's a scene without glow (more detail, but the shield has sharp contours and the lightning effect isn't so spectacular):

The same scene with glow (blurred shield, impressive lightning effect):


News

A new D2X-XL update fixing broken screen resolution persistence is available

There is yet another D2X-XL update is available (the new Pumo Mines broke a few things ...)

Believe it or not: There's a new D2X-XL version online!

Uploaded updated D2X-XL and library source code that compiles with Visual Studio 19

After a really long time, another new DLE version is available

A new DLE version is available (hear, hear!) :D

A new Max OS X version of D2X-XL is available!

D2X-XL now offers a cartoon style render mode!

New D2X-XL and DLE versions are available

Blarget has got his own area in the level spotlight

New D2X-XL and DLE versions are available

A couple of levels have been added to the level spotlight

Hooray! We're finally having a new Mac OS X version of D2X-XL!

D2X-XL now features an observer mode for multiplayer games

A new D2X-XL version with improved multiplayer synchronization is available

A new D2X-XL version fixing out of sync problems in multiplayer games is available

A new D2X-XL version with many multiplayer bug fixes is available

Added high quality (ogg) Descent 1 and 2 music to the downloads area

A new D2X-XL version with important bug fixes is available

D2X-XL compiles and runs on Linux again!

Descent 1 and 2 high res textures are now available as complete downloads

A new DLE version with a ton of bug fixes and improvements is online

A new D2X-XL version is online

A new D2X-XL version with a much needed bug fix is online

A new DLE version is online

Published another DLE version with more bug fixes and improvements by Sirius

Published a new D2X-XL version

Published a new DLE version with tons of bug fixes and improvements by Sirius

D2X-XL now supports Oculus Rift 3D headsets!

Updated DLE and D2X-XL to support new level features requested by Pumo

Added an article about DLE's new tunnel generator to the worklog

DLE's new tunnel generator is finished

Added a new article to the worklog

Published a new DLE version

Added a new article to the worklog

Added two new articles to the worklog

D2X-XL and DLE-XP now support triangular segment sides!

DLE-XP has an OpenGL render and 1st person view!

New DLE-XP version available

Wrote a new worklog article

Check out DarkFlameWolf's level spotlight section!

New DLE-XP and D2X-XL versions are available

A new DLE-XP version is available

Added a worklog article about the way point feature

Added way point support to DLE-XP and D2X-XL

Posted a bunch of new screenshots

Posted a bunch of new screenshots

A New version of DLE-XP is available

New OS X version of D2X-XL is available!

Added article about lightmaps to worklog.

New article and video added to worklog.