Re: ciemny monitor

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