„Grafika hibakezelés és tipikus hibák” változatai közötti eltérés
a A <pre> tageket lecseréltem <syntaxhighlight> tagekre |
|||
| 42. sor: | 42. sor: | ||
* Az OpenGL sajnos nem túl típusos, így ha egy függvényt rossz paraméterekkel hívunk meg, akkor az általában nem generál fordítási hibát, hanem szimplán csak nem működik. | * Az OpenGL sajnos nem túl típusos, így ha egy függvényt rossz paraméterekkel hívunk meg, akkor az általában nem generál fordítási hibát, hanem szimplán csak nem működik. | ||
** Az ilyen hibák megtalálása nagyon nehéz, mert csak annyit látsz, a program nem működik, de nem szól, hogy mivel van gondja. | ** Az ilyen hibák megtalálása nagyon nehéz, mert csak annyit látsz, a program nem működik, de nem szól, hogy mivel van gondja. | ||
** Szerencsére az OpenGL készítői gondoltak erre, és az ilyen hibák beállítanak egy flaget amit le lehet kérdezni. Ezt a glGetError() függvénnyel lehet megtenni. A függvény ömagában csak egy számot ad vissza, amit nehéz értelmezni, de itt van egy wrapper, ami emberileg is fogyaszható formába írja ki, hogy mi történt. Ezt persze a beadón nem lehet használni, de az otthoni változatba debuggoláshoz sokat segíthet. | ** Szerencsére az OpenGL készítői gondoltak erre, és az ilyen hibák beállítanak egy flaget amit le lehet kérdezni. Ezt a glGetError() függvénnyel lehet megtenni. A függvény ömagában csak egy számot ad vissza, amit nehéz értelmezni, de itt van egy wrapper, ami emberileg is fogyaszható formába írja ki, hogy mi történt. Ezt persze a beadón nem lehet használni, de az otthoni változatba debuggoláshoz sokat segíthet (nyugodtan formázd át a hibaüzenetet, olyanra, hogy neked tetszen). | ||
< | |||
<br/> <syntaxhighlight lang="c"> | |||
#include <iostream> | #include <iostream> | ||
#include <cstring> | #include <cstring> | ||
| 100. sor: | 101. sor: | ||
} | } | ||
} | } | ||
</ | </syntaxhighlight> <br/> | ||
* A használata: | * A használata: | ||
** A kódba ha leírod, hogy CheckError(); akkor az kiirja, hogy addig volt-e hiba. | ** A kódba ha leírod, hogy CheckError(); akkor az kiirja, hogy addig volt-e hiba. | ||
** Példa: | ** Példa: | ||
< | |||
<br/> <syntaxhighlight lang="c"> | |||
1 void SetProjectionMatrix() { | 1 void SetProjectionMatrix() { | ||
2 CheckError(); | 2 CheckError(); | ||
| 114. sor: | 116. sor: | ||
7 CheckError(); | 7 CheckError(); | ||
8 } | 8 } | ||
</ | </syntaxhighlight> <br/> | ||
* A futtatás eredménye: | * A futtatás eredménye: | ||
<pre> | <pre> | ||
| 130. sor: | 133. sor: | ||
* Szinte biztos, hogy NEM a beadó rossz, csak a kódodba van valamilyen rejtett hiba, ami nem definiált, implementáció függő viselkedést okoz, ami a te gépeden véletlenül pont azt csinálja, amit akartál, hogy csináljon, de egy másik gépen - mint pl. a beadón - már nem. | * Szinte biztos, hogy NEM a beadó rossz, csak a kódodba van valamilyen rejtett hiba, ami nem definiált, implementáció függő viselkedést okoz, ami a te gépeden véletlenül pont azt csinálja, amit akartál, hogy csináljon, de egy másik gépen - mint pl. a beadón - már nem. | ||
* Ilyen hibát c++-ba is tudsz véteni, pl : pow() negatív számokra: | * Ilyen hibát c++-ba is tudsz véteni, pl : pow() negatív számokra: | ||
< | <br/> <syntaxhighlight lang="c"> | ||
pow(-2, 2) == 4; // A kitevő egész, ez ok | pow(-2, 2) == 4; // A kitevő egész, ez ok | ||
pow(-2, 2.1f) = UNDEFINED // A kitevő valós, nem ok. A (-2)^2.1 egy komplex szám. | |||
</ | </syntaxhighlight> <br/> | ||
* Az utóbbi kódra előfordulhat, hogy a pow függvény nálad a komplex eredmény valós részét adja vissza, a beadón viszont NAN-t, mondva, hogy komplex számot nem tud valóssá konvertálni helyesen. | * Az utóbbi kódra előfordulhat, hogy a pow függvény nálad a komplex eredmény valós részét adja vissza, a beadón viszont NAN-t, mondva, hogy komplex számot nem tud valóssá konvertálni helyesen. | ||
* Az OpenGL-be rengeteg ilyen van. És sajnos nincs ezek ellen más ellenszer, mint hogy az általad használt függvények [http://www.talisman.org/opengl-1.1/Reference.html dokumentációját] elolvasod, ahol leírják, hogy az milyen esetben okoz implementáció függő viselkedést. Szerencsére az esetek több mint 90%-ába ilyenkor a függvény generál egy hibát, amit az előbb bemutatott CheckError()-al el lehet kapni, de nem mindig. | * Az OpenGL-be rengeteg ilyen van. És sajnos nincs ezek ellen más ellenszer, mint hogy az általad használt függvények [http://www.talisman.org/opengl-1.1/Reference.html dokumentációját] elolvasod, ahol leírják, hogy az milyen esetben okoz implementáció függő viselkedést. Szerencsére az esetek több mint 90%-ába ilyenkor a függvény generál egy hibát, amit az előbb bemutatott CheckError()-al el lehet kapni, de nem mindig. | ||
[[Category:Infoalap]] | [[Category:Infoalap]] | ||