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:
function IsGammaRampSupported :Boolean;
var
TmpRamp : TGammaRamp;
DC : HDC;
begin
DC := GetDC(0);
Result := GetDeviceGammaRamp(DC, TmpRamp);
ReleaseDC(0, DC);
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?
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.
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.
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.
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.
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) ?
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) ?
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.
@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.
Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste
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.