OpenGL i obsluga błędów

OpenGL i obsluga błędów
Marius.Maximus
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2196
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 ?

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
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:

Kopiuj
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 ;-)

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0
Kopiuj
glBegin();
try
  ...
finally
  glEnd();
end;

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

Wibowit
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: XML Hills
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:

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.