GMA945 : driver changes flavor in SCR mode

I have an OpenGL screensaver that works great on most vendor-specific drivers. The one exception is the GMA945/950 cards. I know that folks have a lot of issues with these drivers, but I’m wondering if anyone has a solution to this particular issue.

Since a screensaver (SCR) is just an EXE file, I can run the file as an EXE.
In this case it works great: can do full-screen animation at 30-60fps on the GMA950. Yay!

But what’s weird, is that when the SCR is launched by the OS (in this case Win7 Pro 32 bit) the OpenGL driver seems to go wonky : when I try to set up a pixelFormat, all I get back are generic (non-hardware accelerated) ones that are missing many features too (such as pbuffers not being supported).

This happens both when the screensaver is running with -P (control panel preview mode) as well as full-screen.

It’s very weird: if the user double-clicks the EXE, it works great. When the EXE is renamed to an SCR and launched by the OS, the driver stops working properly.

Any ideas? What could the OS be doing differently when running a SCR file?

p.s. I’m seeing this on a dell mini 10v with GMA945, driver version 8.15.10.1930.

Well I heard a few years ago that Intel (or maybe Microsoft) disables hardware acceleration on screensaver when an Intel video card is used … Reason was to avoid crashes and problems brought by the instability of Intel video hardware …
Sound like this is still the case.

For a workaround, playing on the letter casing seem to work :
http://en.wikibooks.org/wiki/Blender_3D:_Noob_to_Pro/Making_exe#Intel_screensaver_bug
http://www.reallyslick.com/faq.html#6
http://www.intel.com/support/graphics/sb/CS-004684.htm

Thank you!!! That’s really an amazing kludge that Intel put in. I’ve been pulling my hair out over this issue. Amazing.

So I’ve tried it out: renamed the file from MyScreensaver.scr to MyScreensaver.sCr :

  • in the control panel : works!

  • when launched from the control panel’s “Preview” button: works!

  • however, when the OS launches the saver after N minute timeout: doesn’t work (still get the non-hardware-accelerated drivers).

So somehow the OS still knows. Any ideas? could there be another place where it looks for the “SCR” or “scr” and figures out “it’s a screensaver”?

I think i’ve figured it out. Not only must the SCR file be named .sCr, but the path to this file (stored in HKCU/ControlPanel/Desktop/SCRNSAVE.EXE must also not be named SCR or .scr. The trick is that windows seems to prefer using the short filename (8.3 format) which of course is all upper case.