glGetError: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
(Hinweise)
K (Kategorisierung)
 
Zeile 10: Zeile 10:
  
 
== Delphi-Spezifikation ==
 
== Delphi-Spezifikation ==
  '''Function''' glGetError : GLenum;
+
  '''function''' glGetError : GLenum;
  
 
== Beschreibung ==  
 
== Beschreibung ==  
 
'''glGetError''' liefert den Wert des Error-Flags.  
 
'''glGetError''' liefert den Wert des Error-Flags.  
Jeder bemerkbare Fehler hat OpenGL-Intern einen numerischen Wert und einen symbolischen Namen.<br>
+
Jeder bemerkbare Fehler hat OpenGL-intern einen numerischen Wert und einen symbolischen Namen.
Wenn ein OpenGL-Fehler auftritt wird das Error-Flag auf den dafür vorgesehen Wert gesetzt.<br>
+
Wenn ein OpenGL-Fehler auftritt, wird das Error-Flag auf den dafür vorgesehen Wert gesetzt.
Sobald dies geschehen ist, werden keine anderen OpenGL-Fehler mehr registriert bis '''glGetError''' aufgerufen wird. <br>
+
Sobald dies geschehen ist, werden keine anderen OpenGL-Fehler mehr registriert bis '''glGetError''' aufgerufen wird.
 
(Das heißt, es wird immer nur der Fehler zurückgegeben, der zuerst auftrat.)
 
(Das heißt, es wird immer nur der Fehler zurückgegeben, der zuerst auftrat.)
  
 
Durch den Aufruf von '''glGetError''' wird der Fehlercode zurückgegeben, und das  
 
Durch den Aufruf von '''glGetError''' wird der Fehlercode zurückgegeben, und das  
Error-Flag wieder auf '''GL_NO_ERROR''' gesetzt.<br>
+
Error-Flag wieder auf '''GL_NO_ERROR''' gesetzt.
Wenn ein Aufruf von '''glGetError''' '''GL_NO_ERROR''' zurückgibt, bedeutet dies, dass kein registrierbarer Fehler seit dem letzten Aufruf von '''glGetError'''(bzw. seit dem die GL initialisiert wurde) aufgetreten ist.
+
 
 +
Wenn ein Aufruf von '''glGetError''' '''GL_NO_ERROR''' zurückgibt, bedeutet dies, dass kein registrierbarer Fehler seit dem letzten Aufruf von '''glGetError''' (bzw. seit dem die GL initialisiert wurde) aufgetreten ist.
 +
 
 +
 
  
 
===Verteilte Implementationen===
 
===Verteilte Implementationen===
  
Bei verteilten Implementationen, kann es mehrere Error_Flags geben. Sobald eins dieser Flags einen Fehler registriert hat, wird, bei einem Aufruf von '''glGetError''', der Wert dieses Flags zurück geliefert und das entsprechende Flag auf '''GL_NO_ERROR''' gesetzt. <br>
+
Bei verteilten Implementationen kann es mehrere Error-Flags geben. Sobald eins dieser Flags einen Fehler registriert hat, wird, bei einem Aufruf von '''glGetError''', der Wert dieses Flags zurück geliefert und das entsprechende Flag auf '''GL_NO_ERROR''' gesetzt.
 +
 
 
Wenn mehrere Flags einen Fehler registriert haben, liefert und löscht '''glGetError''' den Wert eines zufällig ausgewählten Flags. Aus diesem Grund sollte man '''glGetError''' in einer Schleife solange abrufen bis '''GL_NO_ERROR''' zurückgegeben wird.
 
Wenn mehrere Flags einen Fehler registriert haben, liefert und löscht '''glGetError''' den Wert eines zufällig ausgewählten Flags. Aus diesem Grund sollte man '''glGetError''' in einer Schleife solange abrufen bis '''GL_NO_ERROR''' zurückgegeben wird.
 +
 +
  
 
===Fehlerwerte===
 
===Fehlerwerte===
Zeile 39: Zeile 45:
 
'''GL_INVALID_ENUM'''
 
'''GL_INVALID_ENUM'''
 
:Ein nicht akzeptierter Wert wurde einem numerischen Argument übergeben.
 
:Ein nicht akzeptierter Wert wurde einem numerischen Argument übergeben.
:Der fehlerhafte Befehl wird nicht ausgeführt und hat, abgesehen vom Setzen des Error_Flags keine weiteren Seiteneffekte.
+
:Der fehlerhafte Befehl wird nicht ausgeführt und hat abgesehen vom Setzen des Error-Flags keine weiteren Nebeneffekte.
  
 
'''GL_INVALID_VALUE'''
 
'''GL_INVALID_VALUE'''
 
:Ein numerisches Argument ist außerhalb des vorgesehenen Intervalls. (out of range)
 
:Ein numerisches Argument ist außerhalb des vorgesehenen Intervalls. (out of range)
:Der fehlerhafte Befehl wird nicht ausgeführt und hat, abgesehen vom Setzen des Error_Flags keine weiteren Seiteneffekte.
+
:Der fehlerhafte Befehl wird nicht ausgeführt und hat abgesehen vom Setzen des Error-Flags keine weiteren Nebeneffekte.
  
 
'''GL_INVALID_OPERATION'''
 
'''GL_INVALID_OPERATION'''
 
:Der spezielle Befehl ist im momentanen Zustand von OpenGl nicht zulässig.
 
:Der spezielle Befehl ist im momentanen Zustand von OpenGl nicht zulässig.
:Der fehlerhafte Befehl wird nicht ausgeführt und hat, abgesehen vom Setzen des Error_Flags keine weiteren Seiteneffekte.
+
:Der fehlerhafte Befehl wird nicht ausgeführt und hat abgesehen vom Setzen des Error-Flags keine weiteren Nebeneffekte.
  
 
'''GL_STACK_OVERFLOW'''
 
'''GL_STACK_OVERFLOW'''
 
:Der entsprechende Befehl würde zum Überlaufen des Stacks führen. (Overflow)
 
:Der entsprechende Befehl würde zum Überlaufen des Stacks führen. (Overflow)
:Der fehlerhafte Befehl wird nicht ausgeführt und hat, abgesehen vom Setzen des Error_Flags keine weiteren Seiteneffekte.
+
:Der fehlerhafte Befehl wird nicht ausgeführt und hat abgesehen vom Setzen des Error-Flags keine weiteren Nebeneffekte.
 
:(Dieser Fehler tritt vor allem dann auf, wenn es mehr Aufrufe von  [[glPushMatrix]] als von [[glPopMatrix]] gibt.)
 
:(Dieser Fehler tritt vor allem dann auf, wenn es mehr Aufrufe von  [[glPushMatrix]] als von [[glPopMatrix]] gibt.)
  
 
'''GL_STACK_UNDERFLOW'''  
 
'''GL_STACK_UNDERFLOW'''  
 
:Der entsprechende Befehl würde zum Unterlaufen des Stacks führen. (Underflow)
 
:Der entsprechende Befehl würde zum Unterlaufen des Stacks führen. (Underflow)
:Der fehlerhafte Befehl wird nicht ausgeführt und hat, abgesehen vom Setzen des Error_Flags keine weiteren Seiteneffekte.
+
:Der fehlerhafte Befehl wird nicht ausgeführt und hat abgesehen vom Setzen des Error-Flags keine weiteren Nebeneffekte.
 
:(Dieser Fehler tritt vor allem dann auf, wenn es mehr Aufrufe von [[glPopMatrix]] als von [[glPushMatrix]] gibt.)
 
:(Dieser Fehler tritt vor allem dann auf, wenn es mehr Aufrufe von [[glPopMatrix]] als von [[glPushMatrix]] gibt.)
  
Zeile 66: Zeile 72:
 
Wenn ein Error-Flag gesetzt wird, ist nur im Falle '''GL_OUT_OF_MEMORY''' das Ergebnis der OpenGL undefiniert. In allen anderen Fällen wird der fehlerauslösende Befehl ignoriert und hat damit keine Auswirkungen auf den Status der GL oder den Inhalt des [[Framebuffer|Framebuffers]].
 
Wenn ein Error-Flag gesetzt wird, ist nur im Falle '''GL_OUT_OF_MEMORY''' das Ergebnis der OpenGL undefiniert. In allen anderen Fällen wird der fehlerauslösende Befehl ignoriert und hat damit keine Auswirkungen auf den Status der GL oder den Inhalt des [[Framebuffer|Framebuffers]].
  
Da glGetError selbst nicht innerhalb von glBegin/glEnd Blöcken aufgerufen werden kann, gilt bei an sich fehlerfreien Programmen:
+
Da '''glGetError''' selbst nicht innerhalb von glBegin/glEnd-Blöcken aufgerufen werden kann, gilt bei an sich fehlerfreien Programmen:
 
  glBegin(...);
 
  glBegin(...);
 
   err := glGetError(); // darf hier nicht aufgerufen werden, liefert aber GL_NO_ERROR zurück. Direkt danach wird intern GL_INVALID_OPERATION gesetzt.
 
   err := glGetError(); // darf hier nicht aufgerufen werden, liefert aber GL_NO_ERROR zurück. Direkt danach wird intern GL_INVALID_OPERATION gesetzt.
Zeile 72: Zeile 78:
 
  err := glGetError(); // kann wieder aufgerufen werden und gibt jetzt GL_INVALID_OPERATION zurück
 
  err := glGetError(); // kann wieder aufgerufen werden und gibt jetzt GL_INVALID_OPERATION zurück
  
GL_INVALID_OPERATION wird natürlich auch dann zurück geliefert, wenn glGetError innerhalb des glBegin/glEnd Blocks ein '''zweites''' mal gerufen wird.
+
'''GL_INVALID_OPERATION''' wird natürlich auch dann zurück geliefert, wenn '''glGetError''' innerhalb des glBegin/glEnd-Blocks ein '''zweites''' mal gerufen wird.
 +
 
 +
 
  
 
== Fehlermeldungen ==
 
== Fehlermeldungen ==
'''GL_INVALID_OPERATION''' wird generiert wenn '''glGetError''' innerhalb eines  
+
'''GL_INVALID_OPERATION''' wird generiert, wenn '''glGetError''' innerhalb eines [[glBegin]]-[[glEnd]]-Blocks aufgerufen wird.
[[glBegin]]-[[glEnd]] Blocks aufgerufen wird.
 
  
  
  
 
==  Zugehörige Wertrückgaben ==
 
==  Zugehörige Wertrückgaben ==
'''glGetError''' liefert ihnen den Wert des Fehlers zurück, der als erstes, seit dem letzen Aufruf von '''glGetError''', aufgetreten ist.
+
'''glGetError''' liefert den Wert des Fehlers zurück, der als erstes, seit dem letzen Aufruf von '''glGetError''', aufgetreten ist.
  
  
Zeile 87: Zeile 94:
 
== Siehe auch ==
 
== Siehe auch ==
 
andere Wertrückgabefunktionen: [[glGet]]
 
andere Wertrückgabefunktionen: [[glGet]]
 
  
 
[[Kategorie:GL|GetError]]
 
[[Kategorie:GL|GetError]]
[[Kategorie:GL1.0]]
+
[[Kategorie:GL1.0|GetError]]

Aktuelle Version vom 11. Juli 2011, 10:34 Uhr

glGetError

Name

glGetError - liefert Informationen über OpenGL-Fehler.



Delphi-Spezifikation

function glGetError : GLenum;

Beschreibung

glGetError liefert den Wert des Error-Flags. Jeder bemerkbare Fehler hat OpenGL-intern einen numerischen Wert und einen symbolischen Namen. Wenn ein OpenGL-Fehler auftritt, wird das Error-Flag auf den dafür vorgesehen Wert gesetzt. Sobald dies geschehen ist, werden keine anderen OpenGL-Fehler mehr registriert bis glGetError aufgerufen wird. (Das heißt, es wird immer nur der Fehler zurückgegeben, der zuerst auftrat.)

Durch den Aufruf von glGetError wird der Fehlercode zurückgegeben, und das Error-Flag wieder auf GL_NO_ERROR gesetzt.

Wenn ein Aufruf von glGetError GL_NO_ERROR zurückgibt, bedeutet dies, dass kein registrierbarer Fehler seit dem letzten Aufruf von glGetError (bzw. seit dem die GL initialisiert wurde) aufgetreten ist.


Verteilte Implementationen

Bei verteilten Implementationen kann es mehrere Error-Flags geben. Sobald eins dieser Flags einen Fehler registriert hat, wird, bei einem Aufruf von glGetError, der Wert dieses Flags zurück geliefert und das entsprechende Flag auf GL_NO_ERROR gesetzt.

Wenn mehrere Flags einen Fehler registriert haben, liefert und löscht glGetError den Wert eines zufällig ausgewählten Flags. Aus diesem Grund sollte man glGetError in einer Schleife solange abrufen bis GL_NO_ERROR zurückgegeben wird.


Fehlerwerte

Der Initialisierungszustand des Error-Flags ist GL_NO_ERROR.

In der aktuellen OpenGL Version sind folgende Fehler definiert:

GL_NO_ERROR

Kein Fehler ist aufgetreten.
Der Wert dieser symbolischen Konstante ist garantiert immer 0.

GL_INVALID_ENUM

Ein nicht akzeptierter Wert wurde einem numerischen Argument übergeben.
Der fehlerhafte Befehl wird nicht ausgeführt und hat abgesehen vom Setzen des Error-Flags keine weiteren Nebeneffekte.

GL_INVALID_VALUE

Ein numerisches Argument ist außerhalb des vorgesehenen Intervalls. (out of range)
Der fehlerhafte Befehl wird nicht ausgeführt und hat abgesehen vom Setzen des Error-Flags keine weiteren Nebeneffekte.

GL_INVALID_OPERATION

Der spezielle Befehl ist im momentanen Zustand von OpenGl nicht zulässig.
Der fehlerhafte Befehl wird nicht ausgeführt und hat abgesehen vom Setzen des Error-Flags keine weiteren Nebeneffekte.

GL_STACK_OVERFLOW

Der entsprechende Befehl würde zum Überlaufen des Stacks führen. (Overflow)
Der fehlerhafte Befehl wird nicht ausgeführt und hat abgesehen vom Setzen des Error-Flags keine weiteren Nebeneffekte.
(Dieser Fehler tritt vor allem dann auf, wenn es mehr Aufrufe von glPushMatrix als von glPopMatrix gibt.)

GL_STACK_UNDERFLOW

Der entsprechende Befehl würde zum Unterlaufen des Stacks führen. (Underflow)
Der fehlerhafte Befehl wird nicht ausgeführt und hat abgesehen vom Setzen des Error-Flags keine weiteren Nebeneffekte.
(Dieser Fehler tritt vor allem dann auf, wenn es mehr Aufrufe von glPopMatrix als von glPushMatrix gibt.)

GL_OUT_OF_MEMORY

Es existiert nicht genug Speicher um den Befehl auszuführen.
Der Status von OpenGL ist nach dem Auftrten dieses Fehlers undefiniert (abgesehen von den Error-Flags).

Hinweise

Wenn ein Error-Flag gesetzt wird, ist nur im Falle GL_OUT_OF_MEMORY das Ergebnis der OpenGL undefiniert. In allen anderen Fällen wird der fehlerauslösende Befehl ignoriert und hat damit keine Auswirkungen auf den Status der GL oder den Inhalt des Framebuffers.

Da glGetError selbst nicht innerhalb von glBegin/glEnd-Blöcken aufgerufen werden kann, gilt bei an sich fehlerfreien Programmen:

glBegin(...);
  err := glGetError(); // darf hier nicht aufgerufen werden, liefert aber GL_NO_ERROR zurück. Direkt danach wird intern GL_INVALID_OPERATION gesetzt.
glEnd();
err := glGetError(); // kann wieder aufgerufen werden und gibt jetzt GL_INVALID_OPERATION zurück

GL_INVALID_OPERATION wird natürlich auch dann zurück geliefert, wenn glGetError innerhalb des glBegin/glEnd-Blocks ein zweites mal gerufen wird.


Fehlermeldungen

GL_INVALID_OPERATION wird generiert, wenn glGetError innerhalb eines glBegin-glEnd-Blocks aufgerufen wird.


Zugehörige Wertrückgaben

glGetError liefert den Wert des Fehlers zurück, der als erstes, seit dem letzen Aufruf von glGetError, aufgetreten ist.


Siehe auch

andere Wertrückgabefunktionen: glGet