OpenGL i obsluga błędów

0

W jaki sposób podejść do problemu obsługi błędów korzystając w delphi z OpenGL ?

Czasami nie zamknięte glBegin()/glEnd() potrafią nieźle namieszać.

Czy można Jakoś włączyć aby każda funkcja OpenGL jak nie wykona się prawidłowo to żeby był wyjątek ?
Albo żeby sie to jakoś logowało ?

Oczywiście można to zrobić za pomocą Assert:
przy każdym opengl poleceniu wpisać
assert( glGetError() = GL_NO_ERROR);

Ale czy da sie to zrobić globalnie ? Aby zawsze coś sie działa jak funkcja sie nie poprawnie wykona ?

0

Nie sądzę, nie widzę też potrzeby sprawdzania każdego wywołania OpenGL. To nie DirectX, tu jak czegoś nie skaszanisz to raczej wszystko się powodzi.
glBegin/glEnd dobrze sobie parować robiąc dodatkowe wcięcia w kodzie:

glBegin(GL_COŚTAM);
  glVertex3f(...);
  glVertex3f(...);
  glVertex3f(...);
glEnd();

podobnie przy transformacjach z glPushMatrix/glPopmatrix.

OpenGL ma ogólną tendencję do olewania po cichu błędów (jak to w specyfikacji piszą, “silently fail”) a nie sypania wyjątków: to założenie projektowe ;-)

0
glBegin();
try
  ...
finally
  glEnd();
end;

nawet jak to będzie wewnątrz funkcji a zamiast ... dasz exit to i tak glEnd() się wywoła.

0

OpenGL API jest robione pod C, a w C raczej nie ma wyjątków.

Jeśli chcesz czyścić błędy (tzn flagę błędów) to musisz to robić w pętli:

while (glGetError() != GL_NO_ERROR) {};

1 użytkowników online, w tym zalogowanych: 0, gości: 1