This is an on-going issue, many people have this problem, yet, literally for years, Nvidia has not done anything to remedy the situation...
As many of you probably know, getting a game to keep your calibrated colours in fullscreen can be a chore if the game/video driver does not implement it properly. Many high budget (and low) are increasingly giving widescreen/monitor support, but the notion of colour profiles has yet to be popularized. Simply put, the developers do not see it as a big concern. But I am betting that many gamers with calibrated colours cannot stand their full screen games being reset to default colours like I do! Many triple-A titles like Dawn of War 2, ArmA, Dragon Age, etc currently do NOT support preserving colour profiles.
This problem can be universally fixed for all software if the problem was addressed on the driver/video level. Unfortunately, Nvidia has been shrugging the problem off as if it is not a big deal:
Basically, whoever has custom calibrated colors for their monitors, lose the colors when a fullscreen game is launched; colors are reverted back to their default mode, making the game look rather disgusting. In the past, this was also a problem under desktop, but that has been fixed.
Custom calibrated color profiles are made with hardware devices such as color calibrators, giving the monitor accurate color. Then, this profile is loaded under the OS. But games launched in fullscreen overrides the profile.
Nvidia has been ignoring/sidelining this problem for far too long. Many of us use custom colors, and to not support custom colors in fullscreen games is ridiculous! Below, I will be posting a few workarounds for this big problem.
1) Direct Hardware-level force (ATI ONLY) If you are an ATI user, there is a very easy fix for this. Use PowerStrip, load up the color profile, and enable the setting "Write directly to palette DAC". This setting under PowerStrip allows it to bypass the driver/OS altogether and write directly to the hardware. An effective method to force calibrated colors in fullscreen games. However, Nvidia has locked out this ability. EnTech, the developer behind PowerStrip explains:
3) Color Clutch (the author of this tool on this forum somewhere)
CC is a tool to force calibrated colours in DX games through dll injections. This works for MOST games. However, this is a rather intrusive way, injecting dlls may get you kicked/banned from Steam, etc (no word if this affects VAC). It is also a bit laborious, each game needs to be set up manually, and you must launch the game through a *.bat file. This can cause problems with content-distrubtion services like Steam, where you have to launch the game through the Steam application.
the author describes the problem in an email HERE and HERE
This tool works by constantly checking and reverting back the profile if it reverts back to one other then the assigned profile. The biggest problem is that this is a "soft" solution, and games/drivers that are set to override the color profile will override then. Therefore, MCW works for a very small amount of games.
I found the author describing the problem in an email:
I do not see why Nvidia is not fixing this properly. When and how can we get Nvidia to properly implement fullscreen custom color support? Please?
As many of you probably know, getting a game to keep your calibrated colours in fullscreen can be a chore if the game/video driver does not implement it properly. Many high budget (and low) are increasingly giving widescreen/monitor support, but the notion of colour profiles has yet to be popularized. Simply put, the developers do not see it as a big concern. But I am betting that many gamers with calibrated colours cannot stand their full screen games being reset to default colours like I do! Many triple-A titles like Dawn of War 2, ArmA, Dragon Age, etc currently do NOT support preserving colour profiles.
This problem can be universally fixed for all software if the problem was addressed on the driver/video level. Unfortunately, Nvidia has been shrugging the problem off as if it is not a big deal:
Nvidia said:Thank you for the update and I apologize for the confusion.
After the doing further research, I found that NVIDIA does not control or have any function to control the color settings while playing games in full screen mode. Since, these features are application specific it is controlled via the applications. Therefore, please use the games setup if applicable.
Basically, whoever has custom calibrated colors for their monitors, lose the colors when a fullscreen game is launched; colors are reverted back to their default mode, making the game look rather disgusting. In the past, this was also a problem under desktop, but that has been fixed.
Custom calibrated color profiles are made with hardware devices such as color calibrators, giving the monitor accurate color. Then, this profile is loaded under the OS. But games launched in fullscreen overrides the profile.
Nvidia has been ignoring/sidelining this problem for far too long. Many of us use custom colors, and to not support custom colors in fullscreen games is ridiculous! Below, I will be posting a few workarounds for this big problem.
1) Direct Hardware-level force (ATI ONLY) If you are an ATI user, there is a very easy fix for this. Use PowerStrip, load up the color profile, and enable the setting "Write directly to palette DAC". This setting under PowerStrip allows it to bypass the driver/OS altogether and write directly to the hardware. An effective method to force calibrated colors in fullscreen games. However, Nvidia has locked out this ability. EnTech, the developer behind PowerStrip explains:
2) Borderless windowed mode. This mode has a few names; "borderless windowed mode," "frameless windowed mode" or "fullscreen windowed mode". It runs the game in fullscreen native resolution mode, without the OS borders, giving the game a "full screen" look. And since the game is running windowed, the color profiles are kept. There are two ways to do this, one is to enable it in games that natively support it. The problem with this is that an extremely few number of games support this feature. Second, with third party applications such as Shiftwindow and Gamers Window Relocator. It works well, however, not all games support windowed mode, it is laborious, must be manually set for each game, and just flat out does not work (even when its working). For example, the game will be removed of its borders, but the taskbar will remain on top of the game.Write directly to palette DAC" is an EnTech expression that predates NVidia, and essentially refers to going around the OS and the display driver, and writing directly to the hardware. NVidia does not approve of this method, and starting with the Geforce8 no longer shares hardware register data with EnTech.
3) Color Clutch (the author of this tool on this forum somewhere)
CC is a tool to force calibrated colours in DX games through dll injections. This works for MOST games. However, this is a rather intrusive way, injecting dlls may get you kicked/banned from Steam, etc (no word if this affects VAC). It is also a bit laborious, each game needs to be set up manually, and you must launch the game through a *.bat file. This can cause problems with content-distrubtion services like Steam, where you have to launch the game through the Steam application.
the author describes the problem in an email HERE and HERE
4) Monitor Calibration WizardAnyway, the problem is, at least on the DirectX front, not a problem of what a game doesn't do, but rather a problem of what a game does do. Full-screen Direct3D applications do not inherently screw up color calibration. The problem occurs when a specific function is called--in Direct3D9 and earlier, this is SetGammeRamp(), and in later versions it was moved to the DXGI and renamed SetGammaControl() (simply referred to as SGR()/SGC() from here on). These are the functions that cause loss of color calibration. While I can't say with 100% accuracy whether the problem itself lies in Microsoft's design of the API or the implementation by the various graphics card vendors (nVIDIA/ATi/Intel), with the problem occurring on several vendors cards I would assume it is behaving exactly how Microsoft designed it.
It's even more ambiguous when you look at the documentation. There is actually a flag that can be passed to the function, D3DSGR_CALIBRATE, which "If a gamma calibrator is installed, the ramp will be modified before being sent to the device to account for the system and monitor response curves." However, upon testing, I found that this either doesn't work as expected (at least on my 5850), or works exactly as expected but the "gamma calibrator" doesn't include installed monitor profiles and therefore is seemingly useless anyway. If it doesn't include the "curves" of monitor profiles, what does it refer to then?
The reasons for even calling such a function to begin with are dubious. Originally, it seems this was used by developers to "fade out" or "fade in" a scene, or provide some basic color filtering, which was not very easy to do efficiently back in the day. This doesn't seem to be in practice in any game made in the last ~5 years that I've played, judging from my experience playing them both with and without Color Clutch in use (explained later).
More recently, games seem to use it in a different fashion--to provide users who have no such monitor calibration some in-game adjustment. Ultimately, developers want the game to look the same way to the end user that it looked to them, and setting gamma ramps is a quick, though incomplete and incorrect fix for this. A better way would allow users to set brightness, contrast, and gamma using a shader, which is what I believe some of the newer games are doing. For instance, I recently purchased BF:BC2, and it has brightness and contrast (no gamma) adjustments which thankfully never call SGC().
The easy fix for those who want full screen gaming while holding on to their monitor calibration is to simply not call the function. Unfortunately, most games call SGR()/SGC() no matter what, even if there have been no adjustments to the gamma in the settings. That was why I wrote Color Clutch. The theory behind it is simple--prevent the games from calling these functions, and your color calibration will survive. There aren't a whole lot of good ways to do this, so I took what I thought was the best way; injecting a DLL into the process, and then, whenever it tries to call SGR()/SGC(), instead it calls my "bogus" function with the same parameters. The only difference between the real function and mine is that my function doesn't actually do anything.
As for current plans regarding Color Clutch, I'm working on support for some older versions of DirextX (specifically 6, which I think is the first version to include a SGR() function, and 7). This is made difficult by the complete lack of documentation pertaining to these old APIs, but I should eventually be able to get something out that works. OpenGL, though, has no apparent analog to SGR()/SGC(), so I don't believe I can do anything there, and I'm not entirely sure how, why, or even if some users are losing calibration on OGL games.
Sorry about the long post, but I thought it was better to be thorough than lacking.
This tool works by constantly checking and reverting back the profile if it reverts back to one other then the assigned profile. The biggest problem is that this is a "soft" solution, and games/drivers that are set to override the color profile will override then. Therefore, MCW works for a very small amount of games.
I found the author describing the problem in an email:
As you can see, all of these workarounds are not perfect. The only absolutely "perfect" solution only exists on ATI cards, where users can directly access the hardware to force color profiles. This is not possible on Nvidia. Please feel free to add on your own workaround/solutions! I will update the original post.MCW uses some Windows API (application programming interface) to adjust the colors, basically a couple functions to set the gamma ramp lookup table. It works well within Windows, and a number of games (specifically OpenGL based games). However, support within Direct3D games become dependent on the video drivers to "care" about this lookup table and to carry the settings over into what is rendered through Direct3D. Support in that regard has typically been kept, but it does get broken from time to time by the video card driver developers.
The other issue is that the video card drivers themselves have their own color correction support built in, and often that correction takes precedence over the Windows gamma ramp tables. I have an option in MCW to "apply fix to override driver level color correction", which attempts to workaround some video card driver implementations. It does this by setting the gamma ramp table twice, with two different profiles. Oddly, that has worked decent as a workaround for the video card driver implementations, but may do nothing to help in your case.
In the long run, new methods other than the gamma ramp table may be needed to be used to support games. I haven't dug into it too much, but it may be possible to modify the Direct3D drawing surface being used by a game (unless Windows security prevents it). Otherwise, I would be looking at utilizing the APIs available in each video card driver. I know ATI does a good job of providing a programming interface to their drivers, so I wouldn't expect it to be difficult to get things working well on an ATI based video card. I haven't looked at nVidia yet, but I would imagine they have something similar available. Of course, going that route also means you have to build against a number of video card manufactures' programming interfaces (APIs), and support multiple versions and changes to those APIs, which gets to be a pain. This is why I think it might be better to bring pressure on the video card developers to keep proper support for the Windows gamma ramp API, so existing software doesn't break.
Back when Vista came out, Microsoft broke support for the gamma ramp API, requiring application to ask for permission before it could be used. This basically broken all the calibration software out there that wasn't written for Vista, and virtually all the OpenGL based games (as far as color correction built into the games). Later, Microsoft backed down on the security so everything worked as it did before. Some of the video card manufactures also built in workarounds into the video card drivers because of how slow Microsoft was in dealing with it.
There's no universal fix, but there are generally workarounds. I am a gamer myself, so I would certainly attempt to get things working within games if I can.
I do not see why Nvidia is not fixing this properly. When and how can we get Nvidia to properly implement fullscreen custom color support? Please?