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

Aktuelle Zeit: Mi Mai 08, 2024 08:15

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



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: GL_FRONT_FACE auslesen
BeitragVerfasst: Do Jan 02, 2014 21:24 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1278
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Was mache ich falsch, das eine Schutzverletzung kommt ?
Code:
  1. procedure SwapFrontFace;
  2. var
  3.   B: PGLint;
  4. begin
  5.   glGetIntegerv(GL_FRONT_FACE, B);
  6.  
  7.   if (B^ = GL_TRUE) then glFrontFace(GL_CW) else glFrontFace(GL_CCW);
  8. end;    

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: GL_FRONT_FACE auslesen
BeitragVerfasst: Do Jan 02, 2014 21:34 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
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:
  1. "B" ist ein nicht sehr aussagekrätiger Name für eine Variable.
  2. 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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: GL_FRONT_FACE auslesen
BeitragVerfasst: Do Jan 02, 2014 22:04 
Offline
DGL Member
Benutzeravatar

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:
Code:
  1. procedure SwapFrontFace;
  2. var
  3.   B: GLint;
  4. begin
  5.   glGetIntegerv(GL_FRONT_FACE, @B);
  6.   if (B = GL_TRUE) then glFrontFace(GL_CW) else glFrontFace(GL_CCW);
  7. end;

Jetzt habe ich aber wirklich all meine Delphi-Kenntnisse ausgepackt, die ich hier so vom Mitlesen erlangt habe... :wink: 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)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: GL_FRONT_FACE auslesen
BeitragVerfasst: Do Jan 02, 2014 22:07 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1278
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Ich habe es jetzt so gelöst.
Code:
  1. const
  2.   FrontFace: boolean = True;
  3.  
  4. procedure SwapFrontFace;
  5.  
  6. begin
  7.   FrontFace := not FrontFace;
  8.   if FrontFace then glFrontFace(GL_CW) else glFrontFace(GL_CCW);
  9. end;  
  10.  
  11. // beim Rendern
  12. .... 
  13. SwapFrontFace;
  14.  
  15. MatrixModif.SpiegelnX(LocalMatrix);
  16. glUniformMatrix4fv(LocalMatrix_id, 1, False, @LocalMatrix);
  17.  
  18. glDrawArrays(GL_TRIANGLES, 0, anzStandRohrVectoren);
  19.  
  20. SwapFrontFace;
  21. ....  

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: GL_FRONT_FACE auslesen
BeitragVerfasst: Do Jan 02, 2014 22:13 
Offline
DGL Member
Benutzeravatar

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)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: GL_FRONT_FACE auslesen
BeitragVerfasst: Do Jan 02, 2014 22:26 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1278
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Ja, ich ändere die Konstante, dies geht mit entsprechener Compilerschalter.

Deine Lösung mit funktioniert auch nicht, es kommt zwar keine Schutzverletzung, aber er liest was falsches.

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: GL_FRONT_FACE auslesen
BeitragVerfasst: Do Jan 02, 2014 22:30 
Offline
DGL Member
Benutzeravatar

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)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: GL_FRONT_FACE auslesen
BeitragVerfasst: Do Jan 02, 2014 22:38 
Offline
DGL Member
Benutzeravatar

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:
  1. procedure SwapFrontFace;
  2. var
  3.   FrontFace: GLenum;
  4. begin
  5.   glGetIntegerv(GL_FRONT_FACE, @FrontFace);
  6.   if (FrontFace = GL_CCW) then
  7.     glFrontFace(GL_CW)
  8.   else
  9.     glFrontFace(GL_CCW);
  10. 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.

MfG Bergmann

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


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


Wer ist online?

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.

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