Autor: piotrek marczak (origin_at_wp.pl)
Data: Mon 29 Apr 2002 - 13:32:16 MET DST
> Pytanie do programistów - jaki kawałek kodu może w Quake3 powodować
> zmianę? Może są jakieś polecenie OpenGL, które Quake3 wywołuje i
> rozjaśniają obraz??? Mógłbym wtedy sobie sam napisać jakiś mały
> programik, który chodziłby w tle.
>
> TIA
>
> pzdr.
> Sliwtan
Witam
Jest rozszerzenie OpenGL do obslugi Gammy monitora, ale nie wszystkie karty
je obsluguja. Gamme mozna prosto poprawic poprzez funkcje API windowzy:
GetDeviceGammaRamp(hDC, gamma_old);
SetDeviceGammaRamp(hDC, gamma_new);
gamma_new powinna byc zmodyfikowana wersja gamma_old, oczywiscie.
specyfikacje tych funkcji znajdziesz w standardowych helpie VC++. Chyba
najprosciej bedzie wykorzystac C++ Buildera i napisac prosty graficzny
programik ze sliderami do regulowania gammy, instalujacy sie w tray-u.
Builder w wersji 3.0 jest darmowy i wystarczajacy.
Jakby co, oto kawalek kodu z mojego silnika 3d:
// Obsługa gammy monitora (hardware'owo oczywiście)
// poprzez funkcje API wina, a nie rozszerzenia openGl-a
#ifndef GAMMA_INC
#define GAMMA_NIC
#include <windows.h>
#include <memory.h>
typedef struct gammargb
{
short r,g,b;
};
typedef gammargb gamma_ramp[256];
class c_gamma_control
{
public:
c_gamma_control()
{
gamma_save();
memcpy(gamma_new, gamma_saved, 256*sizeof(short)*3);
};
~c_gamma_control(){};
void gamma_save()
{
GetDeviceGammaRamp(hDC, gamma_saved);
};
void gamma_change(short val)
{
for(int i=0;i<256;i++)
{
gamma_new[i].r=val << 8;
gamma_new[i].g=val << 8;
gamma_new[i].b=val << 8;
}
SetDeviceGammaRamp(hDC, gamma_new);
};
void gamma_change(short new_r,short new_g,short new_b)
{
for(int i=0;i<256;i++)
{
gamma_new[i].r=new_r << 8;
gamma_new[i].g=new_g << 8;
gamma_new[i].b=new_b << 8;
}
SetDeviceGammaRamp(hDC, gamma_new);
};
void gamma_restore()
{
SetDeviceGammaRamp(hDC, gamma_saved);
};
private:
gamma_ramp gamma_new, gamma_saved;
};
To archiwum zostało wygenerowane przez hypermail 2.1.7 : Wed 19 May 2004 - 00:44:16 MET DST