I’ve decided to get over my issues with distribution and use Java for my first indie title after all. To that end I’ve been familiarizing myself with LWJGL. I found a couple of runtime bugs on my system (Win98).
First, when in windowed mode (as I am most of the time when testing), bringing a background window to the foreground causes the borders of the LWJGL app window to disappear, but the client area remains on top. All kinds of funkiness goes on before I can get things back to normal. I bleieve this issue can be solved by scrolling down to line 388 of native/win32/org_lwjgl_opengl_Window.cpp and adding this right after the if/else block:
windowflags |= (WS_CLIPCHILDREN | WS_CLIPSIBLINGS);
Technically the CLIPCHILDREN bit isn’t needed, as it’s the siblings we’re worried about. However, if the day ever comes where you allow child windows it will be there.
The next thing is minor but irritating. After exiting a fullscreen app, a ghost is left in the Windows task bar. This is the same thing that happens with Quake 2. There’s two fixes for that (one I know for sure works, the other I’m fairly certain).
Fix 1: in the same file as above, on line 214 in the closeWindow function, add this before the call to DestroyWindow:
ShowWindow(SW_HIDE);
This will eliminate the ghost for sure. As for the second way to fix it, I’ve never had any ghosts in the task bar in my own fullscreen C/C++ ogl apps. The thing that LWJGL has in common with Quake 2 but not with my code is that the windows are created with the WS_VISIBLE style and then ShowWindow is called. You only need do one or the other (preferably ShowWindow). When ShowWindow is called the WS_VISIBLE style is not needed and can be removed. WS_VISIBLE causes the window to be displayed as soon as it is created without the need for calling ShowWindow. Even if it doesn’t fix the problem (which it should), it’s redundant.
I would test these fixes myself, but I’m having some compile issues. After I setup my project, got my eax.h problems sorted (I have two different versions - one from MS and one some different folks, and the LWJGL code expects the MS version as in _EAXLISTERNERFOO->dwFlags instead of _EAXLISTENERFOO->ulFlags), I discovered that LWJGL is using some Win32 code my linker can’t find. Looks like it’s a platform SDK version problem. Anyway, I’m not going to mess with it anymore right now as I don’t feel like downloading the platform SDK.
However, I’ll be happy if you guys to drop these two lines in 