Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 08:47

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Sa Apr 03, 2004 00:00 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Eigentlich wollte ich dem User in meinem Spiel noch zusätzlich die Möglichkeit geben den Gammawert zu verändern. Dazu benutze ich GetDeviceGammaRamp/SetDeviceGammaRamp und habe als Vorlage für die passenden Funktionen das hier benutzt.
Ausserdem hab ich mir noch ne Funktion geschrieben, die mir angibt ob Gammaramps überhaupt unterstützt werden :

Code:
  1. function IsGammaRampSupported : Boolean;
  2. var
  3.  TmpRamp : TGammaRamp;
  4.  DC      : HDC;
  5. begin
  6. DC := GetDC(0);
  7. Result := GetDeviceGammaRamp(DC, TmpRamp);
  8. ReleaseDC(0, DC);
  9. end;

Diese Funktion liefert mir auch wie erwartet True zurück, also eine Unterstützung von Gammarampen seitens der Hardware. Allerdings spielt es keine Rolle auf welchen Wert ich den Gamma setze (befinde mich natürlich, via ChangeDisplayMode, im Vollbildmodus), das Bild bleibt immer gleich.

Hat da schonmal jemand Erfahrungen mitgemacht und kann mir da weiterhelfen. Glaube mal gelesen zu haben das ATI seit irgend einem 4.x-Treiber Probleme mit GammaRampen hat, aber bin mir da nicht sicher. Und wenn dem so ist, gibts noch ne andere, ähnlich bequeme Möglichkeit für Gammakorrektur, oder muss ich das dann wie einst schon glQuake machen, indem ich dann die Texturen selbst aufhelle bzw. abdunkle?

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Apr 03, 2004 00:17 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Hmm, Tom Nuydens hat auf seiner Seite eine entsprechende Applikation
http://www.delphi3d.net/articles/viewarticle.php?article=gamma.htm
die bei mir (allerdings im Fenstermodus) auf der Ati 9000 mit den Omegatreibern funktioniert.

Alternativ gibt es die Möglichkeit ein bildschirmfüllendes Quad mit einem dunklen/hellen Grauton überzublenden (je nach Blendmodus kann man so das Bild dann heller oder dunkler machen) - das liefert so ziemlich den selben Effekt.

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Apr 03, 2004 08:11 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Danke für den Link, aber Tom machts genauso wie ich, also funzt es auch nicht. Auf dieser Seite scheint meine Befürchtung bestätigt zu werden, denn anscheinend haben ATI in ihrer 4er Catalyst-Reihe ne fehlerhafte Implementierung der GammaRamp-Sache.
Das mit dem Quad ist natürlich im Endeffekt (fast) das Selbe, allerdings hat das ggü. der Hardware-Gammekorrektur den Nachteil das durch ein solch auf den kompletten Schirm geblendetes Quad einiges an Füllrate verbrannt wird.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Apr 04, 2004 21:59 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Für den Fall das es interessiert :
Es geht jetzt. Allerdings hab ich die Funktion zur Berechnung der neuen Gammawerte ändern müssen, die Sache mit der Übergabe des Gammawertes als Byte, wie es unter dem von mir gegebenem Link gezeigt wird war wohl nicht ganz korrekt. Hab mir dann mal den Source vom GL-Port von DukeNukem3D angesehen und dort dann gesehen das es mit Gleitkommawerten gemacht wird. Das funzt jetzt sowohl auf meiner Radeon als auch auf meiner GeForce4.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 22, 2004 17:05 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 16, 2003 15:20
Beiträge: 198
Könntest du vieleicht mal einen Codeschnippsel mit der richtigen Funktion zum setzen des Gamma-Wertes posten ?

_________________
Bevor du definierst, was etwas ist, versichere dich seiner Existenz.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 23, 2004 18:16 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Hab doch ganz am Anfang des Threads diesen Link gepostet. Dort wurden halt Ganzzahlwerte genommen, was nicht mehr funzt. Einfach durch Fließkommawerte ersetzen und fertig.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 23, 2004 18:27 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 16, 2003 15:20
Beiträge: 198
Den Link hatte ich auch gesehen, nur verstehe ich nicht, was denn jetzt durch Fließkomma-Werte ersetzt werden muss (die Word-Variablen ???).
Übrigens, müsste nicht eigentlich durch 256 statt durch 255 dividiert (und multipliziert) werden (Es stehen doch 256*3 Farben zur verfügung) ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 23, 2004 18:32 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Code:
  1.  Tmp.R[I] := Min(255, Round(Floor(255*Power(i/255, Value)))) shl 8;
  2.  Tmp.G[I] := Min(255, Round(Floor(255*Power(i/255, Value)))) shl 8;
  3.  Tmp.B[I] := Min(255, Round(Floor(255*Power(i/255, Value)))) shl 8;

Tmp.R/G/B sind weiterhin Word-Werte.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 23, 2004 18:39 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 16, 2003 15:20
Beiträge: 198
Danke, jetzt funktionierts. Hat es eigentlich irgendeinen tieferen Sinn, dass Words statt (wie in meiner Delphi-Doc angegeben) Bytes verwendet werden (vorrausplanung für 64Bit) ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 23, 2004 18:43 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Ich tippe mal darauf das die mit Delphi kommende Windows-SDK Hilfe entweder veraltet oder fehlerhaft ist. Im MSDN stehts drin dass es Word-Werte sein sollen, aber das hat nix mit 64-Bit zu tun (wieso auch?). Die GammaRamp wird ja über den DAC der Grafikkarte geregelt, und evtl. gabs ganz früher mal DACs die man nur in 256 Stufen einstellen konnte, was bei neuen DACs wohl besser geworden ist.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 23, 2004 18:55 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 16, 2003 15:20
Beiträge: 198
@64 Bit :
Zur Zeit haben Grafikkarten ja eine Farbauflösung von 32 Bit (-> 4Bytes), da in diesem Fall Words verwendet wurden dachte ich es wäre vieleicht angedacht worden Farbauflösungen von 64 Bit (->4 Words) einzuführen, auch wenn ich nicht weiß, wozu das gut sein sollte.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 15 Queries | GZIP : On ]