winex11: Reject too bright gamma ramps
André Hentschel
nerv at dawncrow.de
Tue Aug 23 16:16:26 CDT 2011
Fixes GODS:Lands of Infinity / http://bugs.winehq.org/show_bug.cgi?id=28146
---
dlls/gdi32/tests/dc.c | 7 +++++++
dlls/winex11.drv/xvidmode.c | 5 +++++
2 files changed, 12 insertions(+), 0 deletions(-)
diff --git a/dlls/gdi32/tests/dc.c b/dlls/gdi32/tests/dc.c
index 0bc218c..9f26f41 100644
--- a/dlls/gdi32/tests/dc.c
+++ b/dlls/gdi32/tests/dc.c
@@ -644,6 +644,13 @@ static void test_gamma(void)
ret = SetDeviceGammaRamp(hdc, &ramp);
ok(ret, "SetDeviceGammaRamp failed\n");
+ /* try a bright gamma ramp */
+ ramp[0][0] = 0;
+ ramp[0][1] = 0x7FFF;
+ for (i = 2; i < 256; i++) ramp[0][i] = 0xFFFF;
+ ret = SetDeviceGammaRamp(hdc, &ramp);
+ ok(!ret, "SetDeviceGammaRamp succeeded\n");
+
/* cleanup: set old ramp again */
ret = SetDeviceGammaRamp(hdc, &oldramp);
ok(ret, "SetDeviceGammaRamp failed\n");
diff --git a/dlls/winex11.drv/xvidmode.c b/dlls/winex11.drv/xvidmode.c
index a342da3..195b2f2 100644
--- a/dlls/winex11.drv/xvidmode.c
+++ b/dlls/winex11.drv/xvidmode.c
@@ -339,6 +339,11 @@ static BOOL ComputeGammaFromRamp(WORD ramp[256], float *gamma)
ERR("ramp not uniform (max=%f, min=%f, avg=%f), rejected\n", g_max, g_min, g_avg);
return FALSE;
}
+ /* check that the gamma is not too bright */
+ if (g_avg < 0.2) {
+ ERR("too bright gamma ( %5.3f), rejected\n", g_avg);
+ return FALSE;
+ }
/* ok, now we're pretty sure we can set the desired gamma ramp,
* so go for it */
*gamma = 1/g_avg;
--
Best Regards, André Hentschel
More information about the wine-patches
mailing list