<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8356982184998034445</id><updated>2012-02-08T23:01:13.742Z</updated><category term='General Tech'/><category term='Random Direct3D Notes'/><category term='Paranoia'/><category term='Rants'/><category term='Insanity'/><category term='Direct3D'/><category term='DirectQ'/><category term='Real Life'/><category term='MHQuake'/><category term='OpenGL'/><title type='text'>mhquake</title><subtitle type='html'>The MHQuake Development Blog</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default?start-index=101&amp;max-results=100'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>974</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-832402400477502149</id><published>2012-02-08T01:24:00.003Z</published><updated>2012-02-08T01:30:11.356Z</updated><title type='text'>DirectQ Update - 7th February 2012</title><summary type='text'>Worked over the texture loader some today.  I've added support for textures loaded from directories called the same as the value(s) of the "wad" worldspawn key (with multiwad support).  This is in addition to, not instead of, the "textures/mapname/" convention, so now I support both.

I also added support for the QRP standard (i.e a "_bolt", "_cable", etc suffix on the texture name) in addition </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/832402400477502149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=832402400477502149' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/832402400477502149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/832402400477502149'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2012/02/directq-update-7th-february-2012.html' title='DirectQ Update - 7th February 2012'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-2309921015213228746</id><published>2012-02-05T02:05:00.002Z</published><updated>2012-02-05T02:17:44.658Z</updated><title type='text'>Updates - 4th February 2012</title><summary type='text'>RMQ got GPU animation of IQMs today; it turned out to be hugely simpler than I had originally thought it would be and as a nice bonus it has seamless CPU fallback if the hardware capabilities don't meet the requirements of each individual IQM.  Of course this means that the slower case will run on the slower processor, which is generally not what you want, but in this case it's no worse off than </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/2309921015213228746/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=2309921015213228746' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/2309921015213228746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/2309921015213228746'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2012/02/updates-4th-february-2012.html' title='Updates - 4th February 2012'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-3451505691558698619</id><published>2012-02-03T17:10:00.000Z</published><updated>2012-02-03T17:10:17.042Z</updated><title type='text'>Of Buffers and Buffoonery</title><summary type='text'>Seems that for the past year and a half I have been reading from a dynamic vertex buffer created with D3DUSAGE_WRITEONLY.  Ouch.

What's amazing is that this actually worked.  What's even more amazing is that it never seemed to impact performance overmuch.  What's most amazing of all is that it never showed up in debug runtime or PIX analysis.

I finally managed to catch it when consolidating </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/3451505691558698619/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=3451505691558698619' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/3451505691558698619'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/3451505691558698619'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2012/02/of-buffers-and-buffoonery.html' title='Of Buffers and Buffoonery'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-5543898566512160509</id><published>2012-02-03T02:27:00.000Z</published><updated>2012-02-03T02:27:48.834Z</updated><title type='text'>Update - 2nd February 2012</title><summary type='text'>A quiet day with not too much done.  IQMs got alpha support and torch model animations got fixed up a little (they now use the correct animation intervals from the MDL file, and a missing last frame in each animation was restored).  Also fixed up fence textures, so I think - with the exception of the static entities bug I mentioned previously (and which I still haven't a clue about the cause of) </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/5543898566512160509/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=5543898566512160509' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/5543898566512160509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/5543898566512160509'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2012/02/update-2nd-february-2012.html' title='Update - 2nd February 2012'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-4740239287034606051</id><published>2012-02-02T00:28:00.000Z</published><updated>2012-02-02T00:28:29.053Z</updated><title type='text'>Update - 1st February 2012</title><summary type='text'>Got fog on IQMs and fixed up bounding boxes; I think only alpha is left to do.

Spent some time chasing a few outstanding bugs.

The old clipping weirdness bug is now well and truly fixed.  That one was a result of me trying to be too clever for my own good during map loading.

There's a fairly minor static entities bug left that sucked up far too much of my time and ended up not being tracked </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/4740239287034606051/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=4740239287034606051' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/4740239287034606051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/4740239287034606051'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2012/02/update-1st-february-2012.html' title='Update - 1st February 2012'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-1334337216572867970</id><published>2012-02-01T03:07:00.001Z</published><updated>2012-02-01T03:08:55.348Z</updated><title type='text'>And here's the IQM Animator</title><summary type='text'>void D3DIQM_AnimateFrame (iqmdata_t *hdr, int currframe, int lastframe, float lerp)
{
    // temp memory for building the animation
    D3DXMATRIX *outframe = (D3DXMATRIX *) scratchbuf;
    D3DXVECTOR4 *outvecs = (D3DXVECTOR4 *) (outframe + hdr-&gt;num_joints);

    // this memory should never be referenced if there are no frames or poses
    D3DXMATRIX *mat1 = (!hdr-&gt;num_poses || !hdr-&gt;num_frames) </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/1334337216572867970/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=1334337216572867970' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/1334337216572867970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/1334337216572867970'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2012/02/and-heres-iqm-animator.html' title='And here&apos;s the IQM Animator'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-5313192952946910020</id><published>2012-01-31T23:48:00.000Z</published><updated>2012-01-31T23:48:34.573Z</updated><title type='text'>DirectQ IQM Support</title><summary type='text'>

I can load them, draw them, animate them (although I'm not doing this properly just yet), they can have shadows, they're lit, they're textured.  Viewmodel support is there, alpha not yet.

Joint animations are being done on the CPU, vertex animations on the GPU.  Joint animations will likely remain on the CPU (at least until I go to D3D11 where multiple constant buffers will enable this to be a</summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/5313192952946910020/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=5313192952946910020' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/5313192952946910020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/5313192952946910020'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2012/01/directq-iqm-support.html' title='DirectQ IQM Support'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-MlXofQsRJQw/Tyh5leaZL5I/AAAAAAAAAhY/eK4UBWkkgdA/s72-c/basiciqm.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-2814992725494554890</id><published>2012-01-30T20:50:00.001Z</published><updated>2012-01-30T20:52:18.205Z</updated><title type='text'>DirectQ Update - 30th January 2012</title><summary type='text'>External textures are almost done.  Right now I'm left with trying to work out a solution for cases where textures have the same name but different images.  Trouble here is that there are two standards for handling this that have evolved over the years, and ideally I'd like to support them both (previously I'd only supported the QRP standard, currently I only support "textures/mapname/", both are</summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/2814992725494554890/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=2814992725494554890' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/2814992725494554890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/2814992725494554890'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2012/01/directq-update-30th-january-2012.html' title='DirectQ Update - 30th January 2012'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-8009628110263152454</id><published>2012-01-24T22:24:00.002Z</published><updated>2012-01-24T22:30:01.755Z</updated><title type='text'>DirectQ Update - 24th January 2012 - Here be Textures</title><summary type='text'>I've started on reworking DirectQ's external texture loader, meaning that the release will be delayed.

I'd come really close to not doing this at all, but in the end it feels like the right decision: as this will be the last major D3D9 release it deserves to be a higher quality release, and it will give me a cleaner codebase to move to D3D11 from.

I won't go into the reasons why the external </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/8009628110263152454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=8009628110263152454' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/8009628110263152454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/8009628110263152454'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2012/01/directq-update-24th-january-2012-here.html' title='DirectQ Update - 24th January 2012 - Here be Textures'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-8370478321693771910</id><published>2012-01-22T23:52:00.000Z</published><updated>2012-01-22T23:52:32.390Z</updated><title type='text'>More on BSP Brush Model Lighting</title><summary type='text'>I've been beating a little more on these, and am beginning to wonder if handling them in any kind of robust and performant manner would really necessitate an architectural overhaul.

The real problem with them stems from the fact that multiple entities can share the same model.

Because each entity must be in a different place, it follows that each entity can be affected by a different set of </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/8370478321693771910/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=8370478321693771910' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/8370478321693771910'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/8370478321693771910'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2012/01/more-on-bsp-brush-model-lighting.html' title='More on BSP Brush Model Lighting'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-584394642140612346</id><published>2012-01-22T19:36:00.001Z</published><updated>2012-01-22T19:37:08.358Z</updated><title type='text'>More Lighting</title><summary type='text'>DirectQ just got another important addition to lighting, which is that BSP brush models now get dynamic lights properly (there are a lot of issues with giving them lighting from the environment which only a fully realtime solution could satisfactorily resolve).

This resolves one major issue I have with this model type which is that if a mapper uses them for structural geometry or for props, and </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/584394642140612346/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=584394642140612346' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/584394642140612346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/584394642140612346'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2012/01/more-lighting.html' title='More Lighting'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-326960938451242230</id><published>2012-01-21T01:33:00.000Z</published><updated>2012-01-21T01:33:18.556Z</updated><title type='text'>Textures...</title><summary type='text'>I spent a few minutes today cleaning up one thing with DirectQ textures; nothing major but an extra (and completely unnecessary) layer of abstraction was gotten rid of.

After that Heineken Cup Rugby kind of took hold and my time disappeared in a pleasant haze of beer and shouting at the television in a bar.  Productivity will be restored tomorrow (some neat ideas brewing for RMQ...)</summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/326960938451242230/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=326960938451242230' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/326960938451242230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/326960938451242230'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2012/01/textures.html' title='Textures...'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-3784021752407608051</id><published>2012-01-20T00:42:00.003Z</published><updated>2012-01-20T00:51:14.115Z</updated><title type='text'>Update - 20th January 2012</title><summary type='text'>Didn't get much done today; just some brief testing of DirectQ's refresh rate changing (it worked).

There are a few things I want to get stuck into shortly, however, so this is the deep breath before.

RMQ is having a review of it's 2D GUI code.  The stuff originally inherited from QuakeSpasm by way of Fitz (or should that be the other way around?) was fundamentally fine (although I would have </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/3784021752407608051/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=3784021752407608051' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/3784021752407608051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/3784021752407608051'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2012/01/update-20th-january-2012.html' title='Update - 20th January 2012'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-5262504072408684373</id><published>2012-01-19T22:22:00.002Z</published><updated>2012-01-19T22:27:57.717Z</updated><title type='text'>Musing on Lightmap Solutions</title><summary type='text'>Over the years I've evolved a number of different solutions to the problem of updating dynamic lightmaps.  This is one of the major bottlenecks in Quake and - depending on your hardware - is capable of dropping framerates down to single digit in extreme circumstances.

To set the context, GLQuake (in it's multitextured path) did some of the worst things possible with lightmap updates, and Quake </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/5262504072408684373/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=5262504072408684373' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/5262504072408684373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/5262504072408684373'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2012/01/musing-on-lightmap-solutions.html' title='Musing on Lightmap Solutions'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-6981523806613746308</id><published>2012-01-18T02:30:00.002Z</published><updated>2012-01-18T02:39:41.146Z</updated><title type='text'>DirectQ Update - 18th January 2012</title><summary type='text'>Another slight code reorganization - recovering default pool resources from a lost device or video restart has moved to the start of a frame rather than happening in place.  This was done to prevent an old problem where you'd lose the device, then recover it, then a system event (such as a window resize) might cause you to lose it again immediately afterwards.  Now it only recovers these </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/6981523806613746308/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=6981523806613746308' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/6981523806613746308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/6981523806613746308'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2012/01/directq-update-18th-january-2012.html' title='DirectQ Update - 18th January 2012'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-5207443196405874437</id><published>2012-01-16T23:45:00.001Z</published><updated>2012-01-16T23:47:13.325Z</updated><title type='text'>More Video Code</title><summary type='text'>The main D3D-related video code is now down to 900-odd lines.  That's about twice as much as my D3D11 version, but much of it is lost device handling, capabilities checking and fallback modes, which don't exist with D3D11.

Been spending a lot of time playing around with switching modes, Alt-Tabbing back and forth, and so on, and things seem solid and behave correctly.

An old DirectQ bug where </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/5207443196405874437/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=5207443196405874437' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/5207443196405874437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/5207443196405874437'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2012/01/more-video-code.html' title='More Video Code'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-3107296356140270125</id><published>2012-01-16T18:18:00.003Z</published><updated>2012-01-16T20:37:32.769Z</updated><title type='text'>The Problem with Refresh Rate</title><summary type='text'>A very productive time fooling around with video modes - I know that I said I wasn't going to work any more on DirectQ's video code until I moved to D3D11, but I decided to put in some prep-work on restructuring in advance of this.Historically, DirectQ hasn't supported refresh rate changes (aside from a brief time when I had it in but it crashed horribly).  The reasons for this are a combination </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/3107296356140270125/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=3107296356140270125' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/3107296356140270125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/3107296356140270125'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2012/01/problem-with-refresh-rate.html' title='The Problem with Refresh Rate'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-3925575987985939565</id><published>2012-01-16T00:06:00.001Z</published><updated>2012-01-16T00:09:07.483Z</updated><title type='text'>DirectQ Update - 15th January 2012</title><summary type='text'>Some more work has been done on the input code, getting rid of a lot of jerkiness and roughness that manifested under certain circumstances.  A lot of this was "low level" jerkiness that really wasn't too evident in regular gameplay, but could be reproduced by e.g. setting host_timescale to a low-ish value.

There are all kinds of subtle details in the input code and the timing of when you </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/3925575987985939565/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=3925575987985939565' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/3925575987985939565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/3925575987985939565'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2012/01/directq-update-15th-january-2012.html' title='DirectQ Update - 15th January 2012'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-7573033171764680843</id><published>2012-01-15T05:02:00.001Z</published><updated>2012-01-15T05:03:16.089Z</updated><title type='text'>Aaaarrrghhh!  Patents!!!!</title><summary type='text'>I've added DXT texture support to RMQ, with the intention of helping to reduce download sizes and speed up load times, but an obvious question arises: what if the end-user's hardware doesn't support the required extension?

My initial thought was to unpack the DDS to an RGBA format and upload that instead.  We still get the reduced download size, and the player can play the game.

However, it </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/7573033171764680843/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=7573033171764680843' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/7573033171764680843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/7573033171764680843'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2012/01/aaaarrrghhh-patents.html' title='Aaaarrrghhh!  Patents!!!!'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-711409878317585094</id><published>2012-01-12T19:47:00.000Z</published><updated>2012-01-12T19:47:36.889Z</updated><title type='text'>DirectQ Roadmap - Revision</title><summary type='text'>My previous intention has been to release one more DirectQ version - 1.9.0 - which continues to support legacy hardware, then remove certain items of legacy support from an intermediate version (1.9.5?) before moving to D3D11 for version 2.0.0.

I've changed my mind.

I'm still releasing 1.9.0 with legacy support, but after that I'm going to D3D11 and version 2.0.0 straight away.

There are a </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/711409878317585094/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=711409878317585094' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/711409878317585094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/711409878317585094'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2012/01/directq-roadmap-revision.html' title='DirectQ Roadmap - Revision'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-6875772875593809585</id><published>2012-01-11T18:02:00.002Z</published><updated>2012-01-11T22:44:13.096Z</updated><title type='text'>And the Awesome continues</title><summary type='text'>Speeds of the D3D11 engine are coming right up and it's looking as though it's shortly going to be faster than DirectQ in all cases.

D3D11 is quite different in how you need to structure things than OpenGL or even D3D9; you can't just blast out a few drawing commands and hope that the driver will be able to figure out the best thing to do on it's own.  Instead you actually have to sit down and </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/6875772875593809585/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=6875772875593809585' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/6875772875593809585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/6875772875593809585'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2012/01/and-awesome-continues.html' title='And the Awesome continues'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-St_NytoYAh4/Tw3kt_bTGvI/AAAAAAAAAhM/_AQcxpukPvw/s72-c/d3d11marcher.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-1786522242023516881</id><published>2012-01-10T23:48:00.001Z</published><updated>2012-01-10T23:49:44.133Z</updated><title type='text'>Even more Awesome</title><summary type='text'>I just ported the FitzQuake protocol to my D3D11 engine, because I wanted to test it's performance under certain high-stress situations.  The end result was quite pleasing.

The obvious first test was my 400 Knights Death Map.  Here the current stats are something like: FitzQuake - 50 to 60fps; DirectQ - about 350fps; RMQe - about 300fps; QuakeSpasm - just over 50fps; DarkPlaces - about 100fps.

</summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/1786522242023516881/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=1786522242023516881' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/1786522242023516881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/1786522242023516881'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2012/01/even-more-awesome.html' title='Even more Awesome'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-3949289087636667981</id><published>2012-01-10T18:48:00.000Z</published><updated>2012-01-10T18:48:49.315Z</updated><title type='text'>DXGI is Awesome</title><summary type='text'>Have I said that before?  Well I'll say it again.

I now have video mode changing fully working, including transitions from windowed to fullscreen and back, changes between modes when windowed or fullscreen, refresh rate, vsync and the ability to pick whether the mode is centered or stretched on the target window.

I don't yet have adapter or output selection; from what I can gather so far these </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/3949289087636667981/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=3949289087636667981' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/3949289087636667981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/3949289087636667981'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2012/01/dxgi-is-awesome.html' title='DXGI is Awesome'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-1214067599441109236</id><published>2012-01-10T02:44:00.000Z</published><updated>2012-01-10T02:44:13.446Z</updated><title type='text'>Video Mode Changing</title><summary type='text'>I bit the bullet and did video mode changing.  It's not the prettiest code, but most of that is down to the nasty old classic ID Quake menus and the lack of more refined cvar control - neither of these problems will apply to DirectQ.

As before, I start in a windowed mode and switch to fullscreen during startup if requested.  The reason why is because it's safer and less obnoxious on the end-user</summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/1214067599441109236/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=1214067599441109236' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/1214067599441109236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/1214067599441109236'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2012/01/video-mode-changing.html' title='Video Mode Changing'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-5106630791987445100</id><published>2012-01-09T20:49:00.001Z</published><updated>2012-01-09T20:49:52.126Z</updated><title type='text'>Fun with the Video Code</title><summary type='text'>The new D3D11 video code is coming along very well indeed.  I'm taking the opportunity to clean out all of the nastiness in gl_vidnt, move things around to more logical places (there's code in there that should be in sys_win, other code should be in in_win) and organize it better.  The objective is that I'll have a nice set of clean and functional video code that can be almost lifted over to </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/5106630791987445100/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=5106630791987445100' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/5106630791987445100'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/5106630791987445100'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2012/01/fun-with-video-code.html' title='Fun with the Video Code'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-2643089077413198788</id><published>2012-01-09T12:39:00.001Z</published><updated>2012-01-09T12:40:17.299Z</updated><title type='text'>Update - 9th January 2012</title><summary type='text'>The D3D11 port is now functionally complete aside from the video mode stuff.  I just finished things off by adding r_wateralpha and gl_texturemode support, and it rocks.

For gl_texturemode I added anisotropic filtering too.  This one is interesting: traditionally I had thought that anisotropic filtering was something that gets added in addition to the standard filtering modes; it turns out that </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/2643089077413198788/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=2643089077413198788' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/2643089077413198788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/2643089077413198788'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2012/01/update-9th-january-2012.html' title='Update - 9th January 2012'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-2693831047052136876</id><published>2012-01-08T23:06:00.002Z</published><updated>2012-01-08T23:11:45.429Z</updated><title type='text'>D3D11 Port Status</title><summary type='text'>The D3D11 port is pretty close to complete.  Here's what's left to do:

gl_texturemode

Right now I'm just forcing 4x anisotropic filtering at startup, but I want to get this done fully, even if it's not really a critical feature.  It seems like it should be easy enough.

gl_flashblend 1 mode

AKA the alternative to dynamic lights - draw a shaded ball around each light.  Not really a big deal as </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/2693831047052136876/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=2693831047052136876' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/2693831047052136876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/2693831047052136876'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2012/01/d3d11-port-status.html' title='D3D11 Port Status'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-3171087045688774598</id><published>2012-01-08T04:36:00.003Z</published><updated>2012-01-08T07:44:02.300Z</updated><title type='text'>Not bad at all....</title><summary type='text'>

There was maybe 2 or 3 days work so far in that port, and most everything is done now.  There's still some drawing left to finish off and bugs to iron out, but otherwise - yeah, it's cool.

Overall the experience started out as hugely ugly, but quickly became very enjoyable indeed.

Object creation was the main source of nastiness; everything has gone back to filling in a struct and passing the</summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/3171087045688774598/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=3171087045688774598' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/3171087045688774598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/3171087045688774598'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2012/01/not-bad-at-all.html' title='Not bad at all....'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-GXoFTojhjFw/TwlJL5GH_GI/AAAAAAAAAhA/gsHwdXme62E/s72-c/d3d11q.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-6393830892943406193</id><published>2012-01-07T15:55:00.001Z</published><updated>2012-01-07T20:02:50.935Z</updated><title type='text'>D3D11 Particles</title><summary type='text'>16 byte submission per particle, geometry shader billboarding.

</summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/6393830892943406193/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=6393830892943406193' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/6393830892943406193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/6393830892943406193'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2012/01/d3d11-particles.html' title='D3D11 Particles'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-0kUwIU1Qymo/Twik299eiGI/AAAAAAAAAgo/T_j3kO0eL6g/s72-c/d3d11gsparticles.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-1714945181971302142</id><published>2012-01-07T02:13:00.000Z</published><updated>2012-01-07T02:13:44.211Z</updated><title type='text'>Direct3D 11 Quake!</title><summary type='text'>I'm currently porting GLQuake to D3D11.  This was prompted by one requirement of my recent GPU lightmaps experiments - I needed bitwise operations in shaders, and they're not available in SM3 or below.

So far - it's interesting.  I'll rant a bit about the overall experience when done, but for now it's enough to say that things could - and should - have been a lot better.

At the moment I have 2D</summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/1714945181971302142/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=1714945181971302142' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/1714945181971302142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/1714945181971302142'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2012/01/direct3d-11-quake.html' title='Direct3D 11 Quake!'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-8812577192609942078</id><published>2012-01-04T17:41:00.002Z</published><updated>2012-01-04T19:40:43.183Z</updated><title type='text'>Even more Lighting</title><summary type='text'>I've done an implementation of GPU lightmaps in my test Direct3D engine.  This was already done for RMQ (and a forked version of DirectQ) but with this one I bumped the hardware requirements up to full Shader Model 3 and took advantage of extra instructions, floating point textures, longer shaders, extra constants registers space, vertex texture fetch and dynamic branching.

Speed is very </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/8812577192609942078/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=8812577192609942078' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/8812577192609942078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/8812577192609942078'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2012/01/even-more-lighting.html' title='Even more Lighting'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-7714590774130389808</id><published>2012-01-04T01:42:00.001Z</published><updated>2012-01-04T01:53:04.418Z</updated><title type='text'>More DirectQ Lighting</title><summary type='text'>A nice improvement has just gone into dynamic light handling.  DirectQ will now move each dynamic light into the same space as the brush model entity it's (potentially) affecting before calculating the light contribution, meaning that dynamic lights are applied properly to moving brush models.

You can see this in e1m1 if you ride the first platform down to the open area.  Fire your shotgun at </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/7714590774130389808/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=7714590774130389808' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/7714590774130389808'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/7714590774130389808'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2012/01/more-directq-lighting.html' title='More DirectQ Lighting'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-6241840498391102958</id><published>2012-01-03T23:06:00.001Z</published><updated>2012-01-03T23:07:41.150Z</updated><title type='text'>A Consideration Regarding Interpolation</title><summary type='text'>Previously DirectQ has used something of a hack for interpolation; this was needed to fix the muzzleflash animations on weapon models and worked by disabling interpolation for certain vertexes if they had moved beyond a certain amount between the first two frames in the model.

While it works perfectly fine for all viewmodels in all mods I've tested, there remains a possibility that at some point</summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/6241840498391102958/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=6241840498391102958' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/6241840498391102958'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/6241840498391102958'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2012/01/consideration-regarding-interpolation.html' title='A Consideration Regarding Interpolation'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-5434371848811552163</id><published>2012-01-03T19:19:00.000Z</published><updated>2012-01-03T19:19:12.532Z</updated><title type='text'>DirectQ - Lightmaps and More - 3rd January 2012</title><summary type='text'>The death-knell for my Windows XP/D3D9/Intel graphics PC finally sounded today when I switched it on and had a ton of errors pop up about failing fans and other such fun.  I managed to keep it running for long enough to pull some stuff off it, but I'm wary about switching it on again.

Given the age of the machine, it's not worth hunting down replacements and fixing it up, so it's gone to the </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/5434371848811552163/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=5434371848811552163' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/5434371848811552163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/5434371848811552163'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2012/01/directq-lightmaps-and-more-3rd-january.html' title='DirectQ - Lightmaps and More - 3rd January 2012'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-8096726250852851744</id><published>2012-01-02T20:44:00.000Z</published><updated>2012-01-02T20:44:39.472Z</updated><title type='text'>DirectQ Updates - 2nd January 2012</title><summary type='text'>New year, more work being done.  With the RMQ engine ready for release I'm taking some time to tidy up a few things in DirectQ.  Some of the major outstanding defects will need a good many more passes over the code to correct, but we're getting there, slowly but surely.

A texture animation bug where some switches/buttons wouldn't go into their alternate animations has been fixed.

GUI/HUD </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/8096726250852851744/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=8096726250852851744' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/8096726250852851744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/8096726250852851744'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2012/01/directq-updates-2nd-january-2012.html' title='DirectQ Updates - 2nd January 2012'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-6079035514949241179</id><published>2011-12-29T23:25:00.002Z</published><updated>2011-12-29T23:33:43.636Z</updated><title type='text'>Updates - December 29th 2011</title><summary type='text'>The RMQ demo should be coming any day now; engine work is complete barring any last minute emergency bugfixes and content is coming together very well.

We won't be releasing source code with the main demo release, but I will be putting together a "devkit" release (separate from, but hopefully to coincide with, the main release) containing all engine and tools source, a few notes on some </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/6079035514949241179/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=6079035514949241179' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/6079035514949241179'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/6079035514949241179'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/12/updates-december-29th-2011.html' title='Updates - December 29th 2011'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-7331241360316735159</id><published>2011-12-25T13:12:00.000Z</published><updated>2011-12-25T13:12:44.458Z</updated><title type='text'>DirectQ 1.8.8 Patch 2 Release is OUT!</title><summary type='text'>Download from here.

This release focusses on code quality and bug fixes rather than on adding any radical new features; if the previous release of DirectQ worked fine for you there is probably no need to download this one.

It contains the beginnings of an "enhanced" particles system, but that's quite unfinished.  You can turn it on and use it if you wish, but be aware that what you're seeing is</summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/7331241360316735159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=7331241360316735159' title='21 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/7331241360316735159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/7331241360316735159'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/12/directq-188-patch-2-release-is-out.html' title='DirectQ 1.8.8 Patch 2 Release is OUT!'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>21</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-3143658010483424419</id><published>2011-12-13T21:44:00.002Z</published><updated>2011-12-13T21:45:53.368Z</updated><title type='text'>Updates - December 13th 2011</title><summary type='text'>I've been quiet for a while but not idle.  A good chunk of recent time is going into tuning the RMQ engine for the upcoming planned demo release, and things are quite exciting.  It's fair to say that I'm really enjoying what I'm currently doing with it, and that it's shaping up to be a strange and interesting beast.

This is likely to continue until the demo is released, and I expect probably for</summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/3143658010483424419/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=3143658010483424419' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/3143658010483424419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/3143658010483424419'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/12/updates-december-13th-2011.html' title='Updates - December 13th 2011'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-7015040314684937632</id><published>2011-11-30T19:49:00.000Z</published><updated>2011-11-30T19:49:02.639Z</updated><title type='text'>Comparison Shots</title><summary type='text'>Here we go.  Like I said, this isn't really noticeable in static screenshots, but anyway...

The top one is the original shader, the bottom is my replacement.





First of all, ignore the framerate differences.  This just comes from writing the image to file and sometimes it shows up in a screenshot, sometimes it doesn't.

Secondly, I did warn you that it wasn't very noticeable in screenshots.

</summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/7015040314684937632/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=7015040314684937632' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/7015040314684937632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/7015040314684937632'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/11/comparison-shots.html' title='Comparison Shots'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-9xCMRzkwUJE/TtaHYtWCHwI/AAAAAAAAAgE/RuSDc1zLQP0/s72-c/d31.jpg' height='72' width='72'/><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-4043107607765922336</id><published>2011-11-29T23:07:00.001Z</published><updated>2011-11-29T23:13:10.037Z</updated><title type='text'>Doom 3 Shaders</title><summary type='text'>I've been playing around a little with Doom 3's main interaction shader.  This is something I likely could have done before the source release (although getting the env params from the vertex shader into the fragment shader may have been slightly tricksy), but it's fun to do it now.

So, pretty much everything that was in the vertex shader has now moved over to the fragment shader, normalization </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/4043107607765922336/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=4043107607765922336' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/4043107607765922336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/4043107607765922336'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/11/doom-3-shaders.html' title='Doom 3 Shaders'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-1245843593330764591</id><published>2011-11-24T22:02:00.000Z</published><updated>2011-11-24T22:02:46.998Z</updated><title type='text'>Carmack's Reverse</title><summary type='text'>Just been looking at the stencil shadow code again.  What's really annoying about this is that what Creative have patented essentially boils down to this:-1 + 1 = 0
1 - 1 = 0
0 - 1 = -1
0 + 1 = 1This really comes through when you see it expressed using glStencilOpSeparate, you just see the lines of code stacked up, and it's so obvious.</summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/1245843593330764591/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=1245843593330764591' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/1245843593330764591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/1245843593330764591'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/11/carmacks-reverse.html' title='Carmack&apos;s Reverse'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-2789375210710407709</id><published>2011-11-24T20:09:00.001Z</published><updated>2011-11-24T20:11:44.262Z</updated><title type='text'>Fun with Doom 3</title><summary type='text'>Still uncertain if I'm going to actually do anything serious with the Doom 3 source.  Been playing around with it a bit more, and I find myself making what are relatively minor changes here and there - there may sometimes be quite a bit of work involved for sure, but nothing is leaping out as a "oh yeah, this would really improve the engine for me" type thing.

In other words, I don't actually </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/2789375210710407709/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=2789375210710407709' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/2789375210710407709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/2789375210710407709'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/11/fun-with-doom-3.html' title='Fun with Doom 3'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-669171370357652287</id><published>2011-11-23T19:15:00.000Z</published><updated>2011-11-23T19:15:29.636Z</updated><title type='text'>Doom 3 Source Update</title><summary type='text'>Now that the Doom 3 source is out, I've been having a quick look over it and deciding what on earth I'm going to do with it.My initial objectives are to get a sane codebase to work from, so for now I'm just running through it and doing some reorganization here and here.A few notes:The working codename for the Quake 3 engine was "Trinity"; Doom 3 is called "Neo".  Cute.It's a Visual Studio 2010 </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/669171370357652287/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=669171370357652287' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/669171370357652287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/669171370357652287'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/11/doom-3-source-update.html' title='Doom 3 Source Update'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-1575151732373288139</id><published>2011-11-21T22:28:00.000Z</published><updated>2011-11-21T22:28:28.712Z</updated><title type='text'>Aaaarghhhh!  OpenGL!</title><summary type='text'>OpenGL is just a constant struggle against broken drivers.  Right now I'm moving RMQ's code from old-style glEnableClientState/gl*Pointer calls to generic attribute arrays, basically because I have an extreme loathing for glClientActiveTexture (plus I also need them to be able to specify MDL positions as 4 bytes instead of 3 floats for a video RAM saving to offset that which I lost from lightmaps</summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/1575151732373288139/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=1575151732373288139' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/1575151732373288139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/1575151732373288139'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/11/aaaarghhhh-opengl.html' title='Aaaarghhhh!  OpenGL!'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-8099869230015981390</id><published>2011-11-17T20:50:00.000Z</published><updated>2011-11-17T20:50:24.344Z</updated><title type='text'>Even more GPU Lightmaps</title><summary type='text'>The way things are curently going, it's looking like I'm going to be committing to GPU lightmaps in DirectQ as well.  There are a couple of awesome things coming out of this code that make both the slight performance hit and the texture memory overhead a more than worthwhile tradeoff.

The smoother gameplay I mentioned in my previous post is the main one, and this on it's own is enough to swing </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/8099869230015981390/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=8099869230015981390' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/8099869230015981390'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/8099869230015981390'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/11/even-more-gpu-lightmaps.html' title='Even more GPU Lightmaps'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-2298050426422403101</id><published>2011-11-17T02:09:00.000Z</published><updated>2011-11-17T02:09:52.215Z</updated><title type='text'>And more GPU Lightmaps</title><summary type='text'>I'm porting my GPU lightmap setup to RMQ at the moment, but this is without commitment to any final decision.  The objective is to try it out and see what happens when it's hit with some really heavy data sets.  Some interesting things are falling out of this work.

For RMQ we're going to need 5 simultaneous textures to light the world; one for diffuse, 3 for lightmaps (each is one of the RGB </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/2298050426422403101/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=2298050426422403101' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/2298050426422403101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/2298050426422403101'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/11/and-more-gpu-lightmaps.html' title='And more GPU Lightmaps'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-2330593467001046279</id><published>2011-11-16T01:09:00.000Z</published><updated>2011-11-16T01:09:59.480Z</updated><title type='text'>GPU Lightmaps - More!</title><summary type='text'>Now that I've got my face stuck in Rage a little bit less, it's time to revisit the topic of GPU lightmap updating.  You'll remember that I had made some inroads into this with a fork of DirectQ a while back.  Lately I've been playing around with it some more in an experimental GLQuake build, and have pretty much cracked the problems I had encountered before.Here's the important part:!!ARBfp1.0
</summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/2330593467001046279/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=2330593467001046279' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/2330593467001046279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/2330593467001046279'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/11/gpu-lightmaps-more.html' title='GPU Lightmaps - More!'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-6666756015970548741</id><published>2011-10-26T19:11:00.000+01:00</published><updated>2011-10-26T19:11:57.427+01:00</updated><title type='text'>With our backs to the sky and our eyes on the ground...</title><summary type='text'>I have more or less working sky domes in DirectQ.  For the curious, this allows a single 360 degree panoramic texture to be used in place of a skybox (or the default sky layers).  The kind of texture I'm talking about is one that looks like this:



Some things remain to be worked out.

If you search the web for this kind of texture, you'll find two main types.  Some of them are for mapping on a </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/6666756015970548741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=6666756015970548741' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/6666756015970548741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/6666756015970548741'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/10/with-our-backs-to-sky-and-our-eyes-on.html' title='With our backs to the sky and our eyes on the ground...'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-vNSaP6MP57A/TqhLNxs36yI/AAAAAAAAAfA/xhz6AGLyMG8/s72-c/skytex.jpg' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-9127711364389092412</id><published>2011-10-22T03:08:00.000+01:00</published><updated>2011-10-22T03:08:38.746+01:00</updated><title type='text'>Rage Without Glare</title><summary type='text'>I found out how to turn off the excessive light bloom/glare in Rage; a simple r_skipGlare 1 will do the trick.  Here's a shot:



This one is also significant because it's from much the same viewpoint as a "Rage 2010/2011" comparison shot that's available on the web, for example here: http://img40.imageshack.us/img40/3333/idasbest.jpg.

This should hopefully make it clear that the so-called 2011 </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/9127711364389092412/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=9127711364389092412' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/9127711364389092412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/9127711364389092412'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/10/rage-without-glare.html' title='Rage Without Glare'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-47T5CkhavCk/TqIjpoUFy-I/AAAAAAAAAec/GaVujYODFuM/s72-c/rage2011-r_skipglare-1.jpg' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-187406147384368780</id><published>2011-10-18T19:35:00.001+01:00</published><updated>2011-10-18T19:35:57.286+01:00</updated><title type='text'>Dynamic Lighting Revisited</title><summary type='text'>Now that I've finished Rage I've gone back to a save game (before entering Capital Prime) and am basically just sandboxing the game.  Doing races, driving around killing bandits, and picking up missions I'd missed out on first time through, without having to care about following a main plot line.  Of course because a lot of areas are closed off you can't really sandbox it, but it's still fun.

</summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/187406147384368780/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=187406147384368780' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/187406147384368780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/187406147384368780'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/10/dynamic-lighting-revisited.html' title='Dynamic Lighting Revisited'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-4673751432613171923</id><published>2011-10-17T00:36:00.000+01:00</published><updated>2011-10-17T00:36:36.272+01:00</updated><title type='text'>...And We're Done!</title><summary type='text'>That was tremendous fun; a solid 28 hours of gameplay (and there was loads I missed out on so a replay is going to be pretty much essential) and the only real let-down was - yup, you guessed it - the ending.

I reckon it's a setup for "Enemy Territory: Rage Wars".

The sole major gameplay problem I had was with mouse movement.  It's just too unpredictable/fast/imprecise in the menus and too slow </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/4673751432613171923/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=4673751432613171923' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/4673751432613171923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/4673751432613171923'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/10/and-were-done.html' title='...And We&apos;re Done!'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-Tki_Te9y2MM/TptpgjKZhhI/AAAAAAAAAeQ/fTBlct6tqAw/s72-c/gvault1.jpg' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-6361542169532897653</id><published>2011-10-11T23:52:00.000+01:00</published><updated>2011-10-11T23:52:39.101+01:00</updated><title type='text'>It's unfortunate...</title><summary type='text'>...that ID included this in the game.



Given the amount of negativity and general bullshit flying around there's a risk it could be taken up the wrong way.

This, on the other hand, is beautiful.



What you don't get to see is that it's the aftermath of probably the most intense and nerve-wracking firefight so far.  Maybe a future iteration of megatexture will allow for persistent blood decals</summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/6361542169532897653/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=6361542169532897653' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/6361542169532897653'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/6361542169532897653'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/10/its-unfortunate.html' title='It&apos;s unfortunate...'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-oVRSbCwAiCo/TpTHhfuVyRI/AAAAAAAAAd4/VX0yddQ49Vw/s72-c/showmethemoney.jpg' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-4761488557494738044</id><published>2011-10-10T01:30:00.004+01:00</published><updated>2011-10-10T01:51:55.308+01:00</updated><title type='text'>Too Much!</title><summary type='text'>In 1998 it was coloured light.

In 2004 it was bumpmapping.

The 2011 candidate for "too much! overdone! tone it down!" is bloom.

What do you think?



That aside, the game is wonderful.  Yes, so the textures are lower-res than other modern games.  So what?  Big swingin'.  It's a tradeoff, and anyone who complains about that really mustn't have played much further than the first few minutes of </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/4761488557494738044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=4761488557494738044' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/4761488557494738044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/4761488557494738044'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/10/too-much.html' title='Too Much!'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-AE9Sp-X0Sgo/TpI8ilpi75I/AAAAAAAAAdY/b2m8EHstabQ/s72-c/toomuchbloom.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-6572827235005994752</id><published>2011-10-07T23:30:00.000+01:00</published><updated>2011-10-07T23:30:48.415+01:00</updated><title type='text'>I Have RAGE</title><summary type='text'>It's running quite well for me (but then I knew it would as I don't have ATI on my main machine) but it's not without problems.  OK, things are nowhere near as bad as some of the more hysterical corners of the internet might lead you to believe.  I almost feel sorry for some of those people living their negative hate-filled little lives, but I won't waste time ranting any more about them as I've </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/6572827235005994752/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=6572827235005994752' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/6572827235005994752'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/6572827235005994752'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/10/i-have-rage.html' title='I Have RAGE'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-201850586414138799</id><published>2011-10-06T03:07:00.000+01:00</published><updated>2011-10-06T03:07:13.698+01:00</updated><title type='text'>Possibly Dubious Performance Boost</title><summary type='text'>...if the server runs in any given frame then the renderer doesn't run in that frame.

Exceptions are: if things are running slow ("slow" is defined as less than 72 FPS), or if you're at the console or in the menus.

The effect is to smooth out performance and gameplay a LOT.  In any given frame there are two things that take up most of the time: the server and the renderer.  Everything else is </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/201850586414138799/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=201850586414138799' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/201850586414138799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/201850586414138799'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/10/possibly-dubious-performance-boost.html' title='Possibly Dubious Performance Boost'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-3947215044590370680</id><published>2011-10-04T22:04:00.002+01:00</published><updated>2011-10-04T22:11:42.230+01:00</updated><title type='text'>Explosions are Difficult</title><summary type='text'>Here's an overhead view of what I've currently got:



It's loosely based around the R_LavaSplash (AKA "Chthon Rising") code, but tightens in the cloud a little, reduces the number of particles in it, doesn't raise it so much, and fades it out faster.

The idea is to have something that looks a little more like a solid explosion with volume, but also not obscure the view as much as you might see </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/3947215044590370680/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=3947215044590370680' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/3947215044590370680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/3947215044590370680'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/10/explosions-are-difficult.html' title='Explosions are Difficult'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-4YdoN57_zfY/Toty9dlex-I/AAAAAAAAAdQ/70sS6o0yRUg/s72-c/explode.jpg' height='72' width='72'/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-6484203973724303624</id><published>2011-10-04T19:36:00.000+01:00</published><updated>2011-10-04T19:36:52.352+01:00</updated><title type='text'>Knight Fire</title><summary type='text'>

By now it should be obvious - the effect I'm aiming for here is "something that isn't dots but doesn't look too wildly different".

This is in deliberate contrast to other engines, and the reason why is what I've mentioned before - when a particle effect goes off you shouldn't feel compelled to stop playing and look at the eye candy (meanwhile an Ogre is getting busy with trying to saw your </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/6484203973724303624/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=6484203973724303624' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/6484203973724303624'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/6484203973724303624'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/10/knight-fire.html' title='Knight Fire'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-w8b2AFiLt_8/TotQ0xfrRUI/AAAAAAAAAdI/Yi3QBFbxjoE/s72-c/knightfire.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-1366918305204714685</id><published>2011-10-04T19:07:00.000+01:00</published><updated>2011-10-04T19:07:51.770+01:00</updated><title type='text'>And here's the Teleport effect</title><summary type='text'>

I was initially unhappy with this texture, but it's somewhat better now.  If you look closely at Quake's teleport textures you'll see that they are actually a black field with lots of little star shapes in it, so a star shape seems the best thing to represent it.  I mixed in some blue particles to add a little variety.

This is normally gone by so fast that you don't even notice it.

I might </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/1366918305204714685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=1366918305204714685' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/1366918305204714685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/1366918305204714685'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/10/and-heres-teleport-effect.html' title='And here&apos;s the Teleport effect'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-q5tckkJKVKo/TotK4_NBKzI/AAAAAAAAAdA/4Ef8F3ZjsLM/s72-c/teleport.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-8666588313843307705</id><published>2011-10-03T23:45:00.001+01:00</published><updated>2011-10-04T01:21:25.189+01:00</updated><title type='text'>More r_particlestyle 2</title><summary type='text'>Here's the rocket trail.



It occurred to me that I talked a lot about how subtle the effects were but then I went and posted shots of the two most OTT.  This is more indicative of what things are like (the corona around the rocket is an option that has always been there, by the way).

Previous screenshots were from an earlier, more heavyweight implementation; I've since switched them to using </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/8666588313843307705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=8666588313843307705' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/8666588313843307705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/8666588313843307705'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/10/more-rparticlestyle-2.html' title='More r_particlestyle 2'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-CLEX_VB_W7s/TopRG1lh1pI/AAAAAAAAAc4/yS_l_C6jJNg/s72-c/rockettrail.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-1588635054916058967</id><published>2011-10-03T20:11:00.000+01:00</published><updated>2011-10-03T20:11:04.077+01:00</updated><title type='text'>DirectQ with r_particlestyle 2</title><summary type='text'>If you've looked at DirectQ's source code you will be quite well aware that I have, and have had for some time, a quite explicit intention to one day add a "fancy particle system" to it.  I've also mentioned this from time to time in passing.

It seems as though that day is today.

The intention here is NOT to replace outright the original "dots" system but to provide something that looks vaguely</summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/1588635054916058967/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=1588635054916058967' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/1588635054916058967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/1588635054916058967'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/10/directq-with-rparticlestyle-2.html' title='DirectQ with r_particlestyle 2'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-TZC7KXpkfmk/TooHV5tLNBI/AAAAAAAAAcg/M91RYtevLcU/s72-c/blood.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-9196605974598419861</id><published>2011-09-29T18:47:00.000+01:00</published><updated>2011-09-29T18:47:11.763+01:00</updated><title type='text'>Bye Bye XP?</title><summary type='text'>

It's looking as though the next release of DirectQ is going to be the last one that can fully guarantee support for Windows XP.

Bottom line is that I'm soon going to be in a position where I just no longer have access to a Windows XP machine for testing on.  In those circumstances I'm not really going to be able to fire up XP, run tests, debug, etc.  I can't stand over DirectQ on XP as a </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/9196605974598419861/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=9196605974598419861' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/9196605974598419861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/9196605974598419861'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/09/bye-bye-xp.html' title='Bye Bye XP?'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-Xd9R4gOR6Qk/ToStRU2IqPI/AAAAAAAAAcY/Cwzz3heRIsE/s72-c/byebyexp.png' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-2352810068419462342</id><published>2011-09-28T20:00:00.001+01:00</published><updated>2011-09-28T22:01:21.808+01:00</updated><title type='text'>Fun with VSync</title><summary type='text'>I've been playing a little with the vsync code this evening.

One thing that annoys me slightly is that NVIDIA and Intel don't honour the D3DPRESENT_DONOTWAIT flag.  This is a nuisance because if I could use it I would be able to have a situation where I could run the client and server independently of the renderer and retain smooth input response with vsync enabled.

Some fooling around with </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/2352810068419462342/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=2352810068419462342' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/2352810068419462342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/2352810068419462342'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/09/fun-with-vsync.html' title='Fun with VSync'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-8722635380499419211</id><published>2011-09-28T01:37:00.001+01:00</published><updated>2011-09-28T01:37:56.383+01:00</updated><title type='text'>DirectQ Update - 28th September 2011</title><summary type='text'>I've been cleaning up some of the MDL code and managed to get a few extra percent speed out of it.  Previously each MDL lived in it's own individual vertex buffer, now they all live together in a single big buffer (there's actually two separate buffers - one for position/normal and the other for texcoords).  A previous attempt at this resulted in some glitches with Nehahra (what else?) but after </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/8722635380499419211/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=8722635380499419211' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/8722635380499419211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/8722635380499419211'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/09/directq-update-28th-september-2011.html' title='DirectQ Update - 28th September 2011'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-276634344930970689</id><published>2011-09-25T16:14:00.000+01:00</published><updated>2011-09-25T16:14:03.805+01:00</updated><title type='text'>HDR Lighting - Screenshots</title><summary type='text'>It occurs to me that I've talked a lot about the new HDR lighting mode, but I haven't actually shown you anything.  Let's change that.

Here's a few shots of a pretty standard Quake rocket explosion.  Nothing fancy, the kind of thing that happens all the time in regular ID1 Quake.  I've tinted the explosion orange so that you can see the results better, especially in the second case.

First up we</summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/276634344930970689/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=276634344930970689' title='21 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/276634344930970689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/276634344930970689'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/09/hdr-lighting-screenshots.html' title='HDR Lighting - Screenshots'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-zIh809Cfk_k/Tn9CG_9niwI/AAAAAAAAAcA/aFKL2WdSopY/s72-c/clamped.jpg' height='72' width='72'/><thr:total>21</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-154982287673549315</id><published>2011-09-25T13:31:00.000+01:00</published><updated>2011-09-25T13:31:56.761+01:00</updated><title type='text'>Orange Light = Green Walls Revisited</title><summary type='text'>As originally posted by GB last year: http://kneedeepinthedoomed.wordpress.com/2010/11/07/orange-light-green-walls-far-out-experiences-with-colored-light/

Further work and experimentation has positively identified the criminal in this case as clamping.

Now, encoding the lightmap as a HDR texture format and decoding it in your fragment shader goes a long way to resolve the effects of this </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/154982287673549315/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=154982287673549315' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/154982287673549315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/154982287673549315'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/09/orange-light-green-walls-revisited.html' title='Orange Light = Green Walls Revisited'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-6552769629255082986</id><published>2011-09-25T00:14:00.003+01:00</published><updated>2011-09-25T01:34:07.648+01:00</updated><title type='text'>24th September 2011 - Even more lightmaps</title><summary type='text'>It feels slightly bad to be pulling back on something I'd said I was doing, but I guess it's better to do it now than to wait until after a release.Lightmaps have changed yet again.I'd brought everything to the stage where all I had to do was just add the menu options, but then realised that the whole thing had become a horrible mess.  There were slightly weird bugs cropping up, performance was </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/6552769629255082986/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=6552769629255082986' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/6552769629255082986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/6552769629255082986'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/09/24th-september-2011-even-more-lightmaps.html' title='24th September 2011 - Even more lightmaps'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-2805031661011959937</id><published>2011-09-22T23:31:00.000+01:00</published><updated>2011-09-22T23:31:29.447+01:00</updated><title type='text'>Updates for 22nd September 2011</title><summary type='text'>I've been tweaking the lightmaps a little more (nothing is ever truly "concluded"), and some changes are coming through.

The ability to switch off overbrights came back.  Nothing really happened to make me back off on my prior hardline stance, I just decided to put it back on a whim.  While being a purist in terms of your goals can be a good thing, it's also nice to give people options.

I did </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/2805031661011959937/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=2805031661011959937' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/2805031661011959937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/2805031661011959937'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/09/updates-for-22nd-september-2011.html' title='Updates for 22nd September 2011'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-7864913146551862609</id><published>2011-09-21T19:01:00.000+01:00</published><updated>2011-09-21T19:01:54.186+01:00</updated><title type='text'>Lightmaps - A Conclusion</title><summary type='text'>The culmination of my recent work on the lightmapping code has been reached, and it goes something like this.

The experimental HDR texture formats are gone.  Too much messing, performance issues and quality tradeoffs involved in trying to get a better range out of 8/8/8/8 textures.

64-bit lightmaps are back in DirectQ.  These are now the default mode and used if available.  There is some speed </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/7864913146551862609/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=7864913146551862609' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/7864913146551862609'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/7864913146551862609'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/09/lightmaps-conclusion.html' title='Lightmaps - A Conclusion'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-1037007809597325705</id><published>2011-09-20T23:18:00.000+01:00</published><updated>2011-09-20T23:18:52.262+01:00</updated><title type='text'>Updates for 20th September 2011</title><summary type='text'>I've backed out the new lighting code.

Firstly, it exhibited some serious performance problems in scenes with lots of dynamic lights.  What used to be 2 or 3 milliseconds per frame shot up to 20 or so milliseconds per frame, all in the renderer and on account of additional CPU load.  That's not nice.  I did some patented "quick 'n' dirty" workarounds (e.g. reverting to the old style when the </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/1037007809597325705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=1037007809597325705' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/1037007809597325705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/1037007809597325705'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/09/updates-for-20th-september-2011.html' title='Updates for 20th September 2011'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-6707716628129011842</id><published>2011-09-20T00:07:00.000+01:00</published><updated>2011-09-20T00:07:39.549+01:00</updated><title type='text'>OK, That Worked</title><summary type='text'>The new overbright lighting model can handle up to 9 times the dynamic range of GLQuake.

It preserves the same level of detail; we don't lose that pesky bit of precision (I could actually tweak it to gain an extra bit or two, but the extra dynamic range would go down to 5 or 3 times GLQuake).

It runs a little faster.

I think that's what we call a result.</summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/6707716628129011842/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=6707716628129011842' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/6707716628129011842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/6707716628129011842'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/09/ok-that-worked.html' title='OK, That Worked'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-7175069256809592263</id><published>2011-09-19T22:26:00.000+01:00</published><updated>2011-09-19T22:26:25.414+01:00</updated><title type='text'>Notes on Quake Lighting</title><summary type='text'>OK, I tried something with that extra 8 bits and it didn't work out.

Here's how it goes.  I don't like the fact that overbright lighting loses 1 bit of precision compared to GLQuake's flattened lighting.  I want to get that bit back.  Now, it may be the case that it's only one bit, but the difference is there, it's quite subtle, and I can set up a test case that proves it.

In the past I've </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/7175069256809592263/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=7175069256809592263' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/7175069256809592263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/7175069256809592263'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/09/notes-on-quake-lighting.html' title='Notes on Quake Lighting'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-9052568901023442535</id><published>2011-09-19T21:09:00.000+01:00</published><updated>2011-09-19T21:09:44.647+01:00</updated><title type='text'>Experimental Stuff</title><summary type='text'>Earlier on today I implemented detail textures and water caustics in DirectQ.  This is not something that's going to make it into a release, but it was an interesting exercise nonetheless.

Why not release it?  There was a certain cost involved with my current setup that was unacceptable.  I'll come to that later, but for now I'll just say that if not for that cost I likely would be releasing it,</summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/9052568901023442535/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=9052568901023442535' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/9052568901023442535'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/9052568901023442535'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/09/experimental-stuff.html' title='Experimental Stuff'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-8947023476164137499</id><published>2011-09-19T00:26:00.000+01:00</published><updated>2011-09-19T00:26:28.952+01:00</updated><title type='text'>Sound Update</title><summary type='text'>I've bitten the bullet and begun some work on the new DirectSound port.  Right now it's pretty basic; it can load a sound, play it (without any consideration of volume, attenuation, entity channels, etc), stop it when done, and unload it during shutdown.

The really nice thing about the choice of DirectSound is that it can painlessly coexist with the old sound system during changeover.  All I </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/8947023476164137499/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=8947023476164137499' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/8947023476164137499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/8947023476164137499'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/09/sound-update.html' title='Sound Update'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-8313304793847938001</id><published>2011-09-18T15:10:00.000+01:00</published><updated>2011-09-18T15:10:09.559+01:00</updated><title type='text'>DirectQ Update - 18th September 2011</title><summary type='text'>I've dropped support for 8-bit sound from DirectQ; sounds are now upsampled to 16-bit at load time and all further sound processing is 16-bit all the way.  I've also removed the upper limit (was 512) on the number of sounds that may be loaded.

This is something of a prelude to a more general cleanup of the sound code overall.

So, a few things have gotten cleaner as a result of this, but there </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/8313304793847938001/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=8313304793847938001' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/8313304793847938001'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/8313304793847938001'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/09/directq-update-18th-september-2011.html' title='DirectQ Update - 18th September 2011'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-7994230870235334607</id><published>2011-09-16T23:29:00.005+01:00</published><updated>2011-09-16T23:41:11.622+01:00</updated><title type='text'>Surface Refresh Notes</title><summary type='text'>I've now implemented the indexed triangle strip (with static vertex buffer and dynamic index buffer) option for hardware T&amp;L devices.  This caused me much pain and suffering to get working right, so here are some "notes from the field" on the entire topic.As a general rule, hardware T&amp;L devices are much much fussier than software T&amp;L devices. Software T&amp;L lets you get away with a lot of crazy </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/7994230870235334607/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=7994230870235334607' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/7994230870235334607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/7994230870235334607'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/09/surface-refresh-notes.html' title='Surface Refresh Notes'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-89702291490803076</id><published>2011-09-16T20:37:00.002+01:00</published><updated>2011-09-16T20:43:30.202+01:00</updated><title type='text'>This is Quake</title><summary type='text'>

It's a Quake BSP.  The format is BSP2 but that's just standard Q1 BSP with some shorts changed to ints.

It's the Quake engine.  It's a souped-up Quake engine designed to run this kind of thing fast, but at it's heart there is still the same old Quake engine stuff.

See that little red banner just to the right of bottom-center?  That's maybe 2 to 3 times the size of the player.  That's the </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/89702291490803076/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=89702291490803076' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/89702291490803076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/89702291490803076'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/09/this-is-quake.html' title='This is Quake'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-4595408961476560798</id><published>2011-09-15T23:06:00.002+01:00</published><updated>2011-09-16T02:07:20.393+01:00</updated><title type='text'>Updating, Experimenting, Madness!</title><summary type='text'>I'm currently porting DirectQ's new surface refresh code to RMQ; in the end I decided that it was the right thing to do.  While - as I've said - OpenGL performance has never been as good as D3D in my tests (and DirectQ pulls off a few extra tricks - like using hardware instancing - that aren't practical for RMQ), overall RMQ performance is now starting to pull close.

There are a few scenes in </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/4595408961476560798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=4595408961476560798' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/4595408961476560798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/4595408961476560798'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/09/updating-experimenting-madness.html' title='Updating, Experimenting, Madness!'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-7056716517791544208</id><published>2011-09-14T16:55:00.000+01:00</published><updated>2011-09-14T16:55:55.932+01:00</updated><title type='text'>DirectQ Goes Faster</title><summary type='text'>You could be forgiven for thinking it, but I'm not making this up.

DirectQ just got a fairly significant speed boost in big maps/big scenes; something in the order of up to 50%.  This came about from the new surface refresh code I mentioned before, which is now maturing nicely.

As with all other such boosts, this one is only noticeable when things get under stress.  If you're the kind of person</summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/7056716517791544208/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=7056716517791544208' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/7056716517791544208'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/7056716517791544208'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/09/directq-goes-faster.html' title='DirectQ Goes Faster'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-1369806844370999405</id><published>2011-09-13T17:19:00.001+01:00</published><updated>2011-09-13T17:28:10.745+01:00</updated><title type='text'>Updates for 13th September 2011</title><summary type='text'>RMQ's new BSP format is now complete in it's first revision.  We have working versions of QBSP, Light and Vis that output a BSP in the new format, and we have an engine that is capable of loading and running the format.

We're calling it "BSP2".  This shouldn't be viewed as some kind of usurpation or arrogance on anyone's part - the name just fell out naturally in the course of informal </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/1369806844370999405/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=1369806844370999405' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/1369806844370999405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/1369806844370999405'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/09/updates-for-13th-september-2011.html' title='Updates for 13th September 2011'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-7064571455127369664</id><published>2011-09-12T14:15:00.001+01:00</published><updated>2011-09-12T14:18:45.207+01:00</updated><title type='text'>Updates for 12th September 2011</title><summary type='text'>Two interesting updates today.

Firstly, RMQ's new BSP format is coming along.  The QBSP compiler is almost done (just one item - unrelated to the format, actually - remains to be teased out) and Light and Vis are next.  Engine support is complete.

The format is just a simple extension of Quake's BSP 29 to use ints instead of shorts in certain places, and the objective is to remove hard limits </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/7064571455127369664/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=7064571455127369664' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/7064571455127369664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/7064571455127369664'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/09/updates-for-12th-september-2011.html' title='Updates for 12th September 2011'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-5530486079287406528</id><published>2011-09-12T02:25:00.002+01:00</published><updated>2011-09-12T02:48:16.786+01:00</updated><title type='text'>More Doom 3 Thoughts</title><summary type='text'>With the Doom 3 source release hopefully coming closer, I've thought about it a little more and it's now looking likely that I will be doing something with the code.  I haven't yet decided if this will be for public release or private use but it may make for some interesting discussion.  There are a few things I want to try out in a more modern rendering environment than Quake allows, and Doom 3 </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/5530486079287406528/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=5530486079287406528' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/5530486079287406528'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/5530486079287406528'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/09/more-doom-3-thoughts.html' title='More Doom 3 Thoughts'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-1862636693087902364</id><published>2011-09-10T23:52:00.000+01:00</published><updated>2011-09-10T23:52:41.340+01:00</updated><title type='text'>GPU Lightmap Updating - Thoughts and Experiences</title><summary type='text'>I've completed the slight diversion into GPU lightmap updating (I actually completed it a week ago but had to disappear for a short while) with some quite interesting results.

The overall verdict is that it's not going to be immediately viable but will definitely be something that it will be worth revisiting at some point in the future.  It was also worth doing now to satisfy my own curiosity on</summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/1862636693087902364/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=1862636693087902364' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/1862636693087902364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/1862636693087902364'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/09/gpu-lightmap-updating-thoughts-and.html' title='GPU Lightmap Updating - Thoughts and Experiences'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-4444258951179732621</id><published>2011-09-02T19:42:00.000+01:00</published><updated>2011-09-02T19:42:10.591+01:00</updated><title type='text'>DirectQ 1.8.8 Patch 1 Release is OUT!</title><summary type='text'>Download the Patch 1 Release from here: http://directq.codeplex.com/releases/view/72737.</summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/4444258951179732621/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=4444258951179732621' title='36 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/4444258951179732621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/4444258951179732621'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/09/directq-188-patch-1-release-is-out.html' title='DirectQ 1.8.8 Patch 1 Release is OUT!'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>36</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-8773650250171807127</id><published>2011-09-02T14:21:00.000+01:00</published><updated>2011-09-02T14:21:30.306+01:00</updated><title type='text'>Updates for 2nd September 2011</title><summary type='text'>The DirectQ update will be happening later on today (maybe 5/6/7 hours time) - keep yer peepers peeled!

Following that I'm going to fork the code and do some experimental work on dynamic light updates.  The idea of updating lightmaps entirely on the GPU has been nagging me for over a year now, and the only thing holding me back has been an unwillingness to mess too much with working code, and </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/8773650250171807127/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=8773650250171807127' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/8773650250171807127'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/8773650250171807127'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/09/updates-for-2nd-september-2011.html' title='Updates for 2nd September 2011'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-2465579412188680089</id><published>2011-09-01T01:00:00.000+01:00</published><updated>2011-09-01T01:00:20.850+01:00</updated><title type='text'>Updates for 1st September 2011</title><summary type='text'>The DirectQ patch release will be out incredibly soon.  I have been waiting on confirmation regarding a bugfix for lightmap corruption that one person reported, but it's not coming in a timely enough manner and nobody else seems to be experiencing this bug (or at least to have reported it) so I'm going to publish and be damned.

This is just intended as a patch release for the recent 1.8.8 so it </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/2465579412188680089/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=2465579412188680089' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/2465579412188680089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/2465579412188680089'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/09/updates-for-1st-september-2011.html' title='Updates for 1st September 2011'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-978858468680498228</id><published>2011-08-30T19:46:00.001+01:00</published><updated>2011-08-30T19:52:24.142+01:00</updated><title type='text'>Timers, Timers Everywhere</title><summary type='text'>I finally made the big breakthrough and now have a solution to both DirectQ's and RMQ's integer millisecond timers not giving you the framerate you ask for via host_maxfps.

At the most basic level this is because we're counting time in milliseconds and as integers; for Quake's standard 72 FPS the problem is that for 72 this translates to 13.88888888... milliseconds per frame, and the time passed</summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/978858468680498228/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=978858468680498228' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/978858468680498228'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/978858468680498228'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/08/timers-timers-everywhere.html' title='Timers, Timers Everywhere'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-883476184165521000</id><published>2011-08-29T00:21:00.000+01:00</published><updated>2011-08-29T00:21:26.571+01:00</updated><title type='text'>Dem ole IQM blues.</title><summary type='text'>Been doing more work on RMQ's IQM support.  I've managed to move a good chunk of the animation - the final per-vertex position and normal transform - over to the GPU, with consequent performance gains.  The joint setup remains on the CPU, as does setup of bone matrices for each vertex.

This has meant that IQMs can now go into static VBOs, which helps a little more too.

A problem was hit when I </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/883476184165521000/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=883476184165521000' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/883476184165521000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/883476184165521000'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/08/dem-ole-iqm-blues.html' title='Dem ole IQM blues.'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-3081494230728381803</id><published>2011-08-28T17:04:00.000+01:00</published><updated>2011-08-28T17:04:44.348+01:00</updated><title type='text'>Updates for 28th August 2011</title><summary type='text'>Been steadily transitioning the RMQ engine over to shaders for the past few days, and things are now nearing completion.  It's been a huge cleanup across the entire codebase, with a lot of messy fixed pipeline crud just yanked out.  Take sky drawing for example; for the scrolling sky layers there were previously a total of 3 passes required; one to lay down a depth buffer based on the original </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/3081494230728381803/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=3081494230728381803' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/3081494230728381803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/3081494230728381803'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/08/updates-for-28th-august-2011.html' title='Updates for 28th August 2011'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-6479022331665420564</id><published>2011-08-23T19:17:00.003+01:00</published><updated>2011-08-23T19:44:53.302+01:00</updated><title type='text'>Updates for 23rd August 2011</title><summary type='text'>It's looking as though the RMQ engine is going to be a shaders-only engine too, although in this case it won't be GLSL but will be using the older ARB_vertex_program and ARB_fragment_program extensions.  These are what Doom 3 used (although RMQ will remain more lightweight) so support for them is widespread and quite rock-solid.

The extension specs themselves date back to 2002, so I guess saying</summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/6479022331665420564/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=6479022331665420564' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/6479022331665420564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/6479022331665420564'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/08/updates-for-23rd-august-2011.html' title='Updates for 23rd August 2011'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-7617268002648770988</id><published>2011-08-18T20:32:00.000+01:00</published><updated>2011-08-18T20:32:34.547+01:00</updated><title type='text'>18th August 2011 - Various Bits and Pieces</title><summary type='text'>DirectQ is likely going to get a patch release maybe sometime next week; there are a bunch of small updates which individually are nothing major, but taken together warrant it.

My D3D 11 experiments continued a while back, but have now stalled again.  I got texture loading done - it's not a nice API for loading textures (to say the least) but I managed to get something that looks reasonably sane</summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/7617268002648770988/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=7617268002648770988' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/7617268002648770988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/7617268002648770988'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/08/18th-august-2011-various-bits-and.html' title='18th August 2011 - Various Bits and Pieces'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-6118174117465059455</id><published>2011-08-14T15:12:00.001+01:00</published><updated>2011-08-14T15:23:38.632+01:00</updated><title type='text'>Updates for 14th August 2011</title><summary type='text'>Squished another Nehahra bug.  It seems as though, if you have a model called "player.mdl", the most logical thing in the world is to use it for non-players (and, of course, use something completely different for the player).

Sigh.

OK, I'm going to need to get my thoughts together and write up something outlining my official position on support for Nehahra "features".</summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/6118174117465059455/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=6118174117465059455' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/6118174117465059455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/6118174117465059455'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/08/updates-for-14th-august-2011.html' title='Updates for 14th August 2011'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-4423350853258206962</id><published>2011-08-12T01:14:00.002+01:00</published><updated>2011-08-12T01:17:02.294+01:00</updated><title type='text'>Updates for 11th August 2011</title><summary type='text'>Now that DirectQ 1.8.8 is out, it's getting time to start hitting at the RMQ big map problem.  Bottom line is that we need to support over 64k clipnodes, and probably vertexes (this one was hit twice but the mappers hacked around it) and a few other things too.  This is pretty much a non-negotiable requirement, and in the absence of any indication from the community as to what an acceptable </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/4423350853258206962/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=4423350853258206962' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/4423350853258206962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/4423350853258206962'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/08/updates-for-11th-august-2011.html' title='Updates for 11th August 2011'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-4047144209506741101</id><published>2011-08-11T17:59:00.001+01:00</published><updated>2011-08-11T17:59:50.453+01:00</updated><title type='text'>DirectQ Release 1.8.8 (2011-08-11) is Out</title><summary type='text'>And here is the link.</summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/4047144209506741101/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=4047144209506741101' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/4047144209506741101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/4047144209506741101'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/08/directq-release-188-2011-08-11-is-out.html' title='DirectQ Release 1.8.8 (2011-08-11) is Out'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-9113095466231116000</id><published>2011-08-10T22:17:00.002+01:00</published><updated>2011-08-10T22:18:30.136+01:00</updated><title type='text'>Updates for 10th August 2011</title><summary type='text'>Hoping to get the DirectQ release out tomorrow; it would have been today but I needed to look up some stuff in other source ports for cross-checking compatibility of some cvar names.  While doing that I managed to sneak in a few extra last-minute bonus features.

Worked over screenshots a little more.  PCX screenshots are now fully run-length encoded so size is down a little.  I also added gamma </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/9113095466231116000/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=9113095466231116000' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/9113095466231116000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/9113095466231116000'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/08/updates-for-10th-august-2011.html' title='Updates for 10th August 2011'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-5903940129214327209</id><published>2011-08-09T19:02:00.000+01:00</published><updated>2011-08-09T19:02:06.136+01:00</updated><title type='text'>Updates for 9th August 2011</title><summary type='text'>Getting back into the swing of things a little today; it's been over a month since I really sat down and did Quake code to any degree of seriousness, but fortunately I'm not too rusty.

To ease myself back I added PCX screenshots to DirectQ.  This is a total non-feature as it's lower quality than TGA, BMP or PNG, has a bigger filesize than PNG, DDS and JPG, and takes longer to save than anything </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/5903940129214327209/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=5903940129214327209' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/5903940129214327209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/5903940129214327209'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/08/updates-for-9th-august-2011.html' title='Updates for 9th August 2011'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-6271322090335404155</id><published>2011-08-08T18:25:00.001+01:00</published><updated>2011-08-08T20:47:16.183+01:00</updated><title type='text'>Updates for 8th August 2011</title><summary type='text'>Real-Life crap is still ongoing, but I'm going to be easing myself back in shortly so expect updates and releases to start coming more frequently soon.

First of these will be the full 1.8.8 release of DirectQ.  This isn't really too much evolved from where I left it off, but does contain a handful of extra (important) fixes and features.  That should happen any day now.

Next block of work will </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/6271322090335404155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=6271322090335404155' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/6271322090335404155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/6271322090335404155'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/08/updates-for-8th-august-2011.html' title='Updates for 8th August 2011'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-2362497449388665728</id><published>2011-08-01T23:43:00.000+01:00</published><updated>2011-08-01T23:43:14.714+01:00</updated><title type='text'>Features Schmeatures (Part 2)</title><summary type='text'>Poking my head above the parapet to follow up on my previous post.  As usual, Raymond Chen said it first and said it better, so here's a pretty essential piece of additional reading: http://blogs.msdn.com/b/oldnewthing/archive/2010/05/31/10017567.aspx.

The comments are also good for seeing how different perspectives work out (or don't work out, as the case may be).  You'll need to fight through </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/2362497449388665728/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=2362497449388665728' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/2362497449388665728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/2362497449388665728'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/08/features-schmeatures-part-2.html' title='Features Schmeatures (Part 2)'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-3289493006557227278</id><published>2011-07-14T19:49:00.001+01:00</published><updated>2011-07-14T20:10:15.939+01:00</updated><title type='text'>Features Schmeatures</title><summary type='text'>I originally posted this on I3D, but I believe that it also has value for going here.  I've expanded it a little from the original post, which can be read here.

Some thoughts on feature requests

Engine development is not a democratic process, and not all engine feature requests are born equal.  If you're developing or maintaining an engine, it's inevitable that you're going to get feature </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/3289493006557227278/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=3289493006557227278' title='17 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/3289493006557227278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/3289493006557227278'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/07/features-schmeatures.html' title='Features Schmeatures'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>17</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-3818216572337889052</id><published>2011-07-06T20:04:00.000+01:00</published><updated>2011-07-06T20:04:18.484+01:00</updated><title type='text'>Updates for 6th July 2011</title><summary type='text'>Work is still outstanding owing to Real Life commitments.  Yeah, it's a pain, but right now the last thing I want to do when I come home in the evening is crank up the editor and look at some code.

As soon as I can start picking things up again you'll be the first to know.</summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/3818216572337889052/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=3818216572337889052' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/3818216572337889052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/3818216572337889052'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/07/updates-for-6th-july-2011.html' title='Updates for 6th July 2011'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8356982184998034445.post-4954735490476446851</id><published>2011-06-27T23:34:00.000+01:00</published><updated>2011-06-27T23:34:29.742+01:00</updated><title type='text'>DirectQ Update - 27th June 2011</title><summary type='text'>The ProQuake match timer and teamscores are in.  I guess that'll make some people happy.  One slightly sticky bit was finding a suitable piece of on-screen real-estate for the match timer; ProQuake itself just overwrites the last two positions in the frag bar but I've shifted it upwards a little so that I can retain them.

Otherwise it's just been minor nips and tucks here and there.  It's </summary><link rel='replies' type='application/atom+xml' href='http://mhquake.blogspot.com/feeds/4954735490476446851/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8356982184998034445&amp;postID=4954735490476446851' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/4954735490476446851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8356982184998034445/posts/default/4954735490476446851'/><link rel='alternate' type='text/html' href='http://mhquake.blogspot.com/2011/06/directq-update-27th-june-2011.html' title='DirectQ Update - 27th June 2011'/><author><name>mhquake</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>9</thr:total></entry></feed>
