compiled gammaramp.dll
Code:

//-------------------------- WDL code -----------------------------
//2005 by LionTs.
//Free for all 3DGS community. Just send me $1000 per one game start.
//Ok, it's my another stupid joke :)
//Correct gamma ramp for FULLSCREEN mode.
// I'm trying to implement gammaramp in windowed mode thru GetDeviceGammaRamp,
// but I think it's useless.
//It's just an example, try to modify formula for gamma ramp arrays,
//You'll see intresting usefull effects.

//////////all code is working, I'm using this stuff in my game project

//function for simple gamma manipulation like overall brightness or color splash
dllfunction set_gamma(var,var,var); //red green blue: 0 - ~3.5, change overall brightness if all are equal
//functions for advansed effects like color inverted vision
dllfunction get_gamma_ramp(&var,&var,&var); //arrays of gamma ramp values: 0-65536
dllfunction set_gamma_ramp(&var,&var,&var); //arrays of gamma ramp values: 0-65536
var gr_red[256];
var gr_green[256];
var gr_blue[256];
var br_gamma=1.0;
//example for overall brightness correction
//PGUP & PGDN change it ingame
starter gamma_correct{
var i=0;
get_gamma_ramp(gr_red,gr_green,gr_blue); //fill arrays with current gamma ramp
while(1){
if (key_any){
if(key_pgup){
br_gamma+=time*0.1;
br_gamma=min(br_gamma,2.0);
}else{
if(key_pgdn){
br_gamma-=time*0.1;
br_gamma=max(br_gamma,0.5);
}
}
i=0;
while(i<256){ //calculate values for gamma ramp
gr_red[i]=pow(i/256.0,1/br_gamma)*65536;
gr_green[i]=pow(i/256.0,1/br_gamma)*65536;
gr_blue[i]=pow(i/256.0,1/br_gamma)*65536;
/*
//try this, for example
gr_red[i]=pow((256.0-i)/256.0,1/br_gamma)*65536;
gr_green[i]=pow((256.0-i)/256.0,1/br_gamma)*65536;
gr_blue[i]=pow((256.0-i)/256.0,1/br_gamma)*65536;
*/
i+=1;
}
set_gamma_ramp(gr_red,gr_green,gr_blue); //commit new gamma ramp
}
wait(1);
}
}//END of GAMMA_CORRECT()
//------------------------ CUT -----------------------------------------
////////////////////////////////////////////////////////////////////////
//This is the C++ code, if You want to play with it,
//compiled with DX9.0 SDK and 3DGS SDK.
typedef struct _tgamma_ramp{
var value[256];
} tgamma_ramp;

DLLFUNC void set_gamma(var ingamma_red,var ingamma_green,var ingamma_blue) {
HRESULT hr;
double gamma_red;
double gamma_green;
double gamma_blue;
D3DGAMMARAMP gamma_ramp;

LPDIRECT3DDEVICE9 pd3ddev=(LPDIRECT3DDEVICE9)draw_begin();
if (FAILED(hr=pd3ddev->TestCooperativeLevel()))
return;
gamma_red = max(_FLOAT(ingamma_red), 0.01);
gamma_green = max(_FLOAT(ingamma_green), 0.01);
gamma_blue = max(_FLOAT(ingamma_blue), 0.01);
for(int i=0; i<256; i++) {
gamma_ramp.red[i] = (unsigned short)(pow(i/256.0, 1/gamma_red)*65536);
gamma_ramp.green[i] = (unsigned short)(pow(i/256.0, 1/gamma_green)*65536);
gamma_ramp.blue[i] = (unsigned short)(pow(i/256.0, 1/gamma_blue)*65536);
}
pd3ddev->SetGammaRamp(0,D3DSGR_CALIBRATE, &gamma_ramp);//D3DSGR_NO_CALIBRATION
}
DLLFUNC void get_gamma_ramp(tgamma_ramp* gamma_ramp_red,tgamma_ramp* gamma_ramp_green,tgamma_ramp* gamma_ramp_blue)
{
HRESULT hr;
D3DGAMMARAMP gamma_ramp;
LPDIRECT3DDEVICE9 pd3ddev=(LPDIRECT3DDEVICE9)draw_begin();
if (FAILED(hr=pd3ddev->TestCooperativeLevel()))
return;
pd3ddev->GetGammaRamp(0,&gamma_ramp);
for(int i=0; i<256; i++){
gamma_ramp_red->value[i]=_VAR(gamma_ramp.red[i]);
gamma_ramp_green->value[i]=_VAR(gamma_ramp.green[i]);
gamma_ramp_blue->value[i]=_VAR(gamma_ramp.blue[i]);
}
}
DLLFUNC void set_gamma_ramp(tgamma_ramp* gamma_ramp_red,tgamma_ramp* gamma_ramp_green,tgamma_ramp* gamma_ramp_blue)
{
HRESULT hr;
D3DGAMMARAMP gamma_ramp;
LPDIRECT3DDEVICE9 pd3ddev=(LPDIRECT3DDEVICE9)draw_begin();
if (FAILED(hr=pd3ddev->TestCooperativeLevel()))
return;
for(int i=0; i<256; i++){
gamma_ramp.red[i]=(unsigned short)_INT(gamma_ramp_red->value[i]);
gamma_ramp.green[i]=(unsigned short)_INT(gamma_ramp_green->value[i]);
gamma_ramp.blue[i]=(unsigned short)_INT(gamma_ramp_blue->value[i]);
}
pd3ddev->SetGammaRamp(0,D3DSGR_CALIBRATE,&gamma_ramp);
}



Last edited by Lion_Ts; 08/16/05 14:32.