Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2005.10.16;
Скачать: [xml.tar.bz2];

Вниз

Как пользоваться SetGammaRamp   Найти похожие ветки [D3D8]

 
ГеорГ   (2005-06-05 03:54) [0]

Делаю так:

procedure Gamma;
var
NewGamma: TD3DGammaRamp;
begin
D3DDevice8.GetGammaRamp(NewGamma);
D3DDevice8.SetGammaRamp(0, NewGamma);
end;

То есть даже ничего не меняю, но экран чернеет и все! Точно не виснет, и точно видеокарта поддерживает гамму...
Скажите пожалуйста!


 
XProger ©   (2005-06-05 04:51) [1]

D3DDevice8.SetGammaRamp(DDSGR_CALIBRATE, NewGamma);
И вообще, что обе функции в качестве результата возвращают?


 
ГеорГ   (2005-06-05 05:47) [2]

Пробовал передавать флаги 0 и 1 - одинаково. А функции ничего не возвращают, это процедуры! Что же может быть?


 
ГеорГ   (2005-06-05 05:51) [3]

Кстати, пробовал на двух видеокартах: на Радионе 8500 и Гефорсе 4 Ti 4200


 
ГеорГ   (2005-06-05 18:59) [4]

Ну подкиньте пример!


 
lyeh ©   (2005-06-06 13:01) [5]

Метод из нашего движка:

procedure RS_SetGammaRamp(Value: Single);

 procedure Process(var Entry: Word; Value: Integer);
 begin
   if (Value < 0) then
     Value := 0
   else
     if (Value > 65535) then
       Value := 65535;

   Entry := Value;
 end;

var
 I: Byte;
 NewValue: Integer;
 Gamma: TD3DGammaRamp;
begin
 NewValue := Round(255 * Value);

 for I := 0 to 255 do
 begin
   Process(Gamma.green[I], I * NewValue);
   Process(Gamma.blue[I], I * NewValue);
   Process(Gamma.red[I], I * NewValue);
 end;

 with RS do
   D3DDevice8.SetGammaRamp(Byte((D3DCaps8.Caps2 and D3DCAPS2_CANCALIBRATEGAMMA) = D3DCAPS2_CANCALIBRATEGAMMA), Gamma);
end;

D3DDevice8 - IDirect3DDevice8
D3DCaps8 - TD3DCaps8


 
lyeh ©   (2005-06-06 13:19) [6]

То со старого, а здесь еще и с проверкой

function RS_SetGammaRamp(Value: Single): Boolean;

 procedure Process(var Entry: Word; Value: Integer);
 begin
   if (Value < 0) then
     Value := 0
   else
     if (Value > 65535) then
       Value := 65535;

   Entry := Value;
 end;

var
 I: Byte;
 J: Integer;
 NewValue: Integer;
 Gamma: TD3DGammaRamp;
begin
 with RS do
 begin
   Result := ((D3DCaps8.Caps2 and D3DCAPS2_FULLSCREENGAMMA) = D3DCAPS2_FULLSCREENGAMMA);
   if (not Result) then
     Exit;

   NewValue := Round(255 * Value);

   for I := 0 to 255 do
   begin
     J := I * NewValue;
     if (J < 0) then
       J := 0
     else
       if (J > 65535) then
         J := 65535;

     Process(Gamma.green[I], J);
     Process(Gamma.blue[I], J);
     Process(Gamma.red[I], J);
   end;

   D3DDevice8.SetGammaRamp(Byte((D3DCaps8.Caps2 and D3DCAPS2_CANCALIBRATEGAMMA) = D3DCAPS2_CANCALIBRATEGAMMA), Gamma);
 end;  
end;


 
lyeh ©   (2005-06-06 13:23) [7]

Кстати, только сейчас заметил :)
Надо так:

убрать метод Process

Gamma.green[I] := J;
Gamma.blue[I] := J;
Gamma.red[I] := J;


 
ГеорГ   (2005-06-06 19:37) [8]

так работает


 
Sapersky   (2005-06-07 11:24) [9]

Т.е., получается, цвета нужно задавать в диапазоне 0..65535. А GetGammaRamp возвращает 0..255.
Ну, мелкософт, @#$%^&! :)

Кстати, более "правильная" формула гаммы из FastLIB (хотя на D3D ещё не пробовал):

Gamma.red[0] := 0; Gamma.green[0] := 0; Gamma.blue[0] := 0;
y:=1 / Value; // Value = 1 - норма
for I := 1 to 255 do begin
 J := Round(65535 * Exp( y * Ln(i/255) ) );
ну и далее как в [6,7]


 
lyeh ©   (2005-06-07 14:54) [10]

2 Sapersky

> Ну, мелкософт, @#$%^&! :)

А то! :)



Страницы: 1 вся ветка

Форум: "Игры";
Текущий архив: 2005.10.16;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.039 c
1-1127354970
DmiSb
2005-09-22 06:09
2005.10.16
Каким образом можно отобразить псевдографику ?


9-1117733503
Валера
2005-06-02 21:31
2005.10.16
Взрыв на OpenGL


14-1127393797
boriskb
2005-09-22 16:56
2005.10.16
mp3 плейер не хотите на дармовщину?


2-1127322319
logan
2005-09-21 21:05
2005.10.16
Открытие файла...


2-1125850871
Lower_
2005-09-04 20:21
2005.10.16
Stringgrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский