mirror of
https://github.com/Stichting-MINIX-Research-Foundation/pkgsrc-ng.git
synced 2025-09-08 11:52:55 -04:00
108 lines
3.2 KiB
Plaintext
108 lines
3.2 KiB
Plaintext
$NetBSD: patch-ab,v 1.1.1.1 2010/03/09 23:20:01 snj Exp $
|
|
|
|
ed46d97c106471672c571eebd51dedc0508e1225 upstream.
|
|
|
|
[PATCH] Query size of X11 gamma ramp
|
|
|
|
It seems since Xorg 7.4, the size of the gamma ramp is no longer 256
|
|
in all cases. So we will need to query the gamma size and use the
|
|
appropriate size when calling into the X11 API. Quake assumes a 256
|
|
valued gamma ramp througout the code, so we need to scale the ramp
|
|
passed down via VID_SetGammaRamp accordingly.
|
|
|
|
--- common/gl_vidlinuxglx.c.orig 2009-07-04 22:43:49.000000000 -0700
|
|
+++ common/gl_vidlinuxglx.c 2010-03-08 19:30:56.000000000 -0800
|
|
@@ -463,7 +463,8 @@ HandleEvents(void)
|
|
}
|
|
|
|
void (*VID_SetGammaRamp)(unsigned short ramp[3][256]);
|
|
-static unsigned short saved_gamma_ramp[3][256];
|
|
+static unsigned short *x11_gamma_ramp;
|
|
+static int x11_gamma_size;
|
|
|
|
void
|
|
signal_handler(int sig)
|
|
@@ -471,7 +472,10 @@ signal_handler(int sig)
|
|
printf("Received signal %d, exiting...\n", sig);
|
|
XAutoRepeatOn(x_disp);
|
|
if (VID_SetGammaRamp)
|
|
- VID_SetGammaRamp(saved_gamma_ramp);
|
|
+ XF86VidModeSetGammaRamp(x_disp, scrnum, x11_gamma_size,
|
|
+ x11_gamma_ramp,
|
|
+ x11_gamma_ramp + x11_gamma_size,
|
|
+ x11_gamma_ramp + x11_gamma_size * 2);
|
|
XCloseDisplay(x_disp);
|
|
Sys_Quit();
|
|
}
|
|
@@ -589,10 +593,25 @@ CheckMultiTextureExtensions(void)
|
|
static void
|
|
VID_SetXF86GammaRamp(unsigned short ramp[3][256])
|
|
{
|
|
+ int i;
|
|
+ unsigned short *r, *g, *b;
|
|
+
|
|
if (!x_disp)
|
|
Sys_Error("%s: x_disp == NULL!", __func__);
|
|
|
|
- XF86VidModeSetGammaRamp(x_disp, scrnum, 256, ramp[0], ramp[1], ramp[2]);
|
|
+ /*
|
|
+ * Need to scale the gamma ramp to the hardware size
|
|
+ */
|
|
+ r = Hunk_TempAlloc(3 * x11_gamma_size * sizeof(unsigned short));
|
|
+ g = r + x11_gamma_size;
|
|
+ b = r + x11_gamma_size * 2;
|
|
+ for (i = 0; i < x11_gamma_size; i++) {
|
|
+ r[i] = ramp[0][i * 256 / x11_gamma_size];
|
|
+ g[i] = ramp[1][i * 256 / x11_gamma_size];
|
|
+ b[i] = ramp[2][i * 256 / x11_gamma_size];
|
|
+ }
|
|
+
|
|
+ XF86VidModeSetGammaRamp(x_disp, scrnum, x11_gamma_size, r, g, b);
|
|
}
|
|
|
|
/*
|
|
@@ -604,10 +623,23 @@ VID_SetXF86GammaRamp(unsigned short ramp
|
|
static void
|
|
Gamma_Init()
|
|
{
|
|
- if (XF86VidModeGetGammaRamp(x_disp, scrnum, 256,
|
|
- saved_gamma_ramp[0],
|
|
- saved_gamma_ramp[1],
|
|
- saved_gamma_ramp[2]))
|
|
+ Bool ret;
|
|
+ int size;
|
|
+
|
|
+ ret = XF86VidModeGetGammaRampSize(x_disp, scrnum, &x11_gamma_size);
|
|
+ if (!ret|| !x11_gamma_size) {
|
|
+ VID_SetGammaRamp = NULL;
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ size = 3 * x11_gamma_size * sizeof(unsigned short);
|
|
+ x11_gamma_ramp = Hunk_AllocName(size, "x11_gamma_ramp");
|
|
+
|
|
+ ret = XF86VidModeGetGammaRamp(x_disp, scrnum, x11_gamma_size,
|
|
+ x11_gamma_ramp,
|
|
+ x11_gamma_ramp + x11_gamma_size,
|
|
+ x11_gamma_ramp + x11_gamma_size * 2);
|
|
+ if (ret)
|
|
VID_SetGammaRamp = VID_SetXF86GammaRamp;
|
|
else
|
|
VID_SetGammaRamp = NULL;
|
|
@@ -993,9 +1025,12 @@ VID_Init(unsigned char *palette)
|
|
void
|
|
VID_Shutdown(void)
|
|
{
|
|
- if (VID_SetGammaRamp)
|
|
- VID_SetGammaRamp(saved_gamma_ramp);
|
|
-
|
|
+ if (VID_SetGammaRamp) {
|
|
+ XF86VidModeSetGammaRamp(x_disp, scrnum, x11_gamma_size,
|
|
+ x11_gamma_ramp,
|
|
+ x11_gamma_ramp + x11_gamma_size,
|
|
+ x11_gamma_ramp + x11_gamma_size * 2);
|
|
+ }
|
|
if (x_disp != NULL) {
|
|
if (ctx != NULL)
|
|
glXDestroyContext(x_disp, ctx);
|