Главная страница
    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.046 c
3-1125899780
Комар
2005-09-05 09:56
2005.10.16
Как можно отправлять на сервер только измененные данные


1-1127820657
ZeroDivide
2005-09-27 15:30
2005.10.16
О самоуничтожении объекта.


14-1126609315
INeedYourHelp
2005-09-13 15:01
2005.10.16
Лицензионная Delphi 7 studio enterprise


14-1127818421
Monk
2005-09-27 14:53
2005.10.16
InfoPower


1-1127510917
Студент:(
2005-09-24 01:28
2005.10.16
Вычисление С в степени N с минимальным количеством умножений





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский