title: Force system with nVidia Optimus to use the real GPU for my application?
body: <p>I want my application to always run using the real gpu on nVidia Optimus laptops.</p>
  
  <p>From "Enabling High Performance Graphics Rendering on Optimus Systems", (<a href="http://developer.download.nvidia.com/devzone/devcenter/gamegraphics/files/OptimusRenderingPolicies.pdf">http://developer.download.nvidia.com/devzone/devcenter/gamegraphics/files/OptimusRenderingPolicies.pdf</a>):</p>
  
  <blockquote>
    <p>Global Variable NvOptimusEnablement (new in Driver  Release 302)
    Starting with the Release 302 drivers, application developers can
    direct the Optimus  driver at runtime to use the High Performance
    Graphics to render any application–even  those applications for which
    there is no existing application profile. They can do this by 
    exporting a global variable named NvOptimusEnablement. The Optimus
    driver looks for  the existence and value of the export. Only the LSB
    of the DWORD matters at this time. A  value of 0x00000001 indicates
    that rendering should be performed using High  Performance Graphics. A
    value of 0x00000000 indicates that this method should be  ignored. 
    Example Usage:</p>
  </blockquote>
  
  <pre><code>extern "C" {   _declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001; }
  </code></pre>
  
  <p>The problem is that I want to do this using Delphi. From what I've read Delphi does not support export of variables even though some hacks exists. I did try a few of them but couldn't make it work.</p>
  
  <p>In the same nvidia document I read that forcing the proper GPU can be accomplished via linking statically to one of a handful listed dlls. But I don't want to link to dlls I'm not using. (Why the opengl.dll is not one of them is beyond me.) A simple exported variable seems much cleaner.</p>