Ich bin ja mit Delphi nicht so affin, aber es sieht für mich so aus, als ob du "glGetIntegerv" den unitialisierten Wert von "B" übergibst anstatt einen Zeiger auf "B".
Nebenbei zwei Sachen:
"B" ist ein nicht sehr aussagekrätiger Name für eine Variable.
Die Methode an sich ist eine ganz schlechte Idee. Daten zurückzulesen die vom aktuellen Zustand abhängen zum Beispiel mit "glGet*" ist generell schlecht. Das frisst unglaublich viel Performance im Treiber.
Registriert: Mi Aug 14, 2013 21:17 Beiträge: 588
Programmiersprache: C++
B ist vom Typ PGLint, also ein Zeiger auf eine Variable vom Typ GLint - die du aber nirgendwo erzeugst. Dein Zeiger zeigt also irgendwo ins Nirvana. So müsste es gehen:
Jetzt habe ich aber wirklich all meine Delphi-Kenntnisse ausgepackt, die ich hier so vom Mitlesen erlangt habe... Aber OpenglerF hat natürlich recht. Es wäre prinzipiell schneller, wenn sich dein Programm den Status von GL_FRONT_FACE selbst merken würde.
_________________ So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)
Registriert: Mi Aug 14, 2013 21:17 Beiträge: 588
Programmiersprache: C++
Zeile 7: Du änderst eine mit const deklarierte "Variable" (also eigentlich Konstante)? Ist das richtig so?
_________________ So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)
Registriert: Mi Aug 14, 2013 21:17 Beiträge: 588
Programmiersprache: C++
Müsste glGet nicht auch GL_CW bzw. GL_CCW statt GL_TRUE liefern? Das hab ich ohne Nachdenken einfach so abgeschrieben.
_________________ So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)
Registriert: Di Apr 29, 2008 18:56 Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,
er liefert nix falsches, du erwartest nur das falsche, siehe hier So wäre es richtig:
Code:
procedure SwapFrontFace;
var
FrontFace: GLenum;
begin
glGetIntegerv(GL_FRONT_FACE, @FrontFace);
if (FrontFace = GL_CCW) then
glFrontFace(GL_CW)
else
glFrontFace(GL_CCW);
end;
Wie die anderen beiden schon gesagt haben geht das zwar, schneller wäre es aber sich den Wert im Programm zu merken. Da man das aber im Normalfall nur sehr selten aufruft, würde ich das denke ich auch so machen. Wenn ich es aber doch über ne Variable im Programm machen würde, dann würde ich die aber auch als var deklarieren und nicht als const mit irgendwelchen wilden Compiler-Defines. Am Ende bringt die das const keinen Vorteil. Vlt wird es sogar langsamer weil der Compiler es als Konstante interpretiert und entsprechend optimiert.
Mitglieder in diesem Forum: 0 Mitglieder und 6 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.