Sislt 12 1 osa Yleist Open GL n
- Slides: 80
Sisältö (1/2) 1. osa Yleistä Open. GL: n arkkitehtuuri Perusteet kappaleiden piirtämisestä Muunnokset ja matriisit Näkyvyyden määrittäminen Kappaleiden tehokas piirtäminen: Listat ja taulukot
Sisältö 2. osa Valaistus Tekstuurit Käyrät ja parametriset pinnat Blending Puskurit ja fragmentit Sumu Virheiden käsittely & laajennukset (2/2)
Yleistä Open. GL: stä (1/2) Open. GL on standardi, (lähes) alustariippumaton ohjelmointirajapinta grafiikkalaitteistolle Standardin määrittelee Architectural Review Board (ARB) Järjestelmäriippuvaisia osia pääasiassa ikkunajärjestelmään liittyviä toiminnot sekä Open. GL: n käyttöönotto(GLX, WGL) Nykyiset versiot 1. 1 -1. 4 Versio 2. 0 tekeillä
Yleistä Open. GL: stä (2/2) Open. GL koostuu kahdesta osasta Itse rajapinta GLU, joka on rajapinnan päälle rakennettu apukirjasto. Sisältää lukuisia usein tarvittuja apufunktioita. Lisäksi GLUT, joka tarjoaa rajapinnan ikkunajärjestelmään. Muissa kirjastoissa myös tukea. mm. Qt, gtk
Open. GL: n arkkitehtuuri (1/3) Open. GL on tilakone Piirtoa ohjataan lukuisten tilojen avulla Kun tila on asetettu se on voimassa kunnes se muutetaan Tilat asetetaan toisistaan riippumattomasti Tilojen keskinäinen vuorovaikutus määrittää lopputuloksen
Open. GL: n arkkitehtuuri (2/3) Open. GL on arkkitehtuuriltaan client-server Hajautettu ratkaisu mahdollinen Palvelin pitää kirjaa kunkin asiakkaan tilatiedoista (ns. GL context) Open. GL voidaan myös nähdä liukuhihnana Toisesta päästä syötetään dataa joka useiden vaiheiden jälkeen päätyy näytön pisteiksi
Open. GL: n arkkitehtuuri (3/3) Open. GL: n ohjaus tapahtuu komennoilla Komennot käsitellään saapumisjärjestyksessä Suoritus ei välttämättä välitöntä Ohjauskomennot annetaan APIn funktiokutsuilla Komennoilla vaikutetaan prosessiin, jolla lopputulos saadaan aikaan, eikä niinkään sitä miltä lopputulos näyttää Ei taetta siitä että lopputulos on täsmälleen sama kahdella eri alustalla
Open. GL rajapintana Open. GL on matalan tason rajapinta. Sen avulla piirretään yksinkertaisia kaksi- ja kolmeulotteisia kappaleita laitteiston näyttöpuskuriin. Piste, jana, polygoni Lisäksi parametrisoidut käyrät ja pinnat. Nämä muunnetaan janoiksi ja polygoneiksi ennen piirtoa Kappale koostuu yhdestä (piste) tai useammasta verteksistä.
Vilkaisu "pellin alle" Alla karkea kaaviokuva Open. GL: n renderöintiprosessista
Open. GL API (1/3) Funktioiden nimeämisestä Rajapinnassa on noin 120 erilaista toimintoa Useimpia voidaan käyttää usean eri funktion kautta käyttäen vaihtelevaa määrää erityyppisiä parametreja. Funktiot nimetty säännönmukaisesti käytetyn parametrityypin ja parametrien lukumäärän mukaan. Funktionimen viimeiset kirjaimet ja numerot kertovat tyypin ja parametrien lukumäärän
Open. GL API (2/3) Alla käytetyt kirjaimet ja niitä vastaavat tyypit Näiden lisäksi määritelty GLvoid
Open. GL API (3/3) Esimerkki: gl. Vertex*() gl. Vertex 2 f(2. 0 f, 3. 0 f) gl. Vertex 3 i(2, 3, 0) gl. Vertex 4 d(4. 0, 1. 0, -0. 5, 2. 0) float v[] = {1. 0 f, 2. 0 f, 3. 0 f}; gl. Vertex 3 fv(v)
GLUT & Open. GL perusteet (1/8) GLUT on järjestelmäriippumaton kirjasto joka huolehtii ikkunajärjestelmästä GLUT: n tarjoama toiminnallisuus Ikkunoiden hallinta. Yksi sovellus voi käyttää useita ikkunoita Callback-perustainen tapahtumankäsittely Fonttien käsittely Valikkojärjestelmä
GLUT & Open. GL perusteet Yksinkertainen esimerkki GLUT: n käyttöönotto glut. Init() glut. Init. Display. Mode() glut. Init. Window. Position() & glut. Init. Window. Size() glut. Create. Window() glut. Main. Loop() Callbackien rekisteröinti (2/8)
GLUT & Open. GL perusteet (3/8) Puskureiden tyhjentäminen gl. Clear() Tyypillisimmät parametrit GL_COLOR_BUFFER_BIT – näyttöpuskuri GL_DEPTH_BUFFER_BIT – z-puskuri gl. Clear. Color() valitsee värin, jolla näyttö tyhjennetään gl. Clear. Depth() asettaa z-arvon jolla z-puskuri tyhjennetään
GLUT & Open. GL perusteet (4/8) Kuinka taata se että komennot on suoritettu gl. Flush() pakottaa aloittamaan komentojen suorituksen gl. Finish() kuten gl. Flush() mutta odottaa kunnes komennot on suoritettu
GLUT & Open. GL perusteet (5/8) Kappaleiden piirtäminen Piste, jana, polygoni Polygonista kuusi erikoistapausta Kolmio, nelikulmio, kolmionauha, kolmioviuhka, nelikulmionauha, nelikulmioviuhka Vain yksinkertaiset polygonit sallittuja
GLUT & Open. GL perusteet (6/8) Kappaleet määritetään gl. Begin() ja gl. End() kutsujen välissä. gl. Begin(): lle annetaan parametriksi halutun kappaleen tyyppi Samanaikaisesti voidaan määrittää useita samantyyppisiä kappaleita gl. Begin() ja gl. End() välissä vain kappaleiden määrittämiseen liittyvät funktiot sallittuja
GLUT & Open. GL perusteet (7/8) Kappaleen verteksit määritetään gl. Vertex*() kutsuilla Verteksi "perii" kutsun aikana voimassa olleen värin, normaalivektorin, tekstuurikoordinaatit sekä reunalipun Näitä voidaan vaihtaa Väri: gl. Color()* tai gl. Index*() Normaalivektori gl. Normal*() Tekstuurikoordinaatit: gl. Tex. Coord*() Reunalippu: gl. Edge. Flag()
GLUT & Open. GL perusteet (8/8)
Tilojen hallintaa Erilaisia asetuksia kolmenlaisia Aina käytössä olevat "on/off"-tyyppiset asetukset "on/off" + parametrit Tiloja säädellään gl. Enable() / gl. Disable()parilla Parametrit asetetaan omilla komennoilla gl. Is. Enabled() & gl. Get*()
Matriisit ja muunnokset (1/8)
Matriisit ja muunnokset (2/8) Matriisin valinta gl. Matrix. Mode() Modelview-matriisin muunnokset Skaalaus: gl. Scale*() Kierto: gl. Rotate*() Siirto: gl. Translate*() "kamera": glu. Look. At() Muunnoksilla muutetaan koordinaatistoa, ei kappaletta
Matriisit ja muunnokset Projektiomatriisi Perspektiiviprojektio gl. Frustum() glu. Perspective() Ortografinen projektio gl. Ortho() glu. Ortho 2 D() (3/8)
Matriisit ja muunnokset Normaali perspektiiviprojektio: (4/8)
Matriisit ja muunnokset Ortografinen projektio (5/8)
Matriisit ja muunnokset Muita matriisin käsittelyfunktioita: gl. Load. Identity() - identtinen matriisi gl. Mult. Matrix() - kerrotaan matriisilla gl. Load. Matrix() - asetetaan matriisi (6/8)
Matriisit ja muunnokset (7/8) Matriisipinot Kullekin matriisityypille on oma pinonsa Hierarkkisille malleille gl. Push. Matrix() - talletetaan nykyinen matriisi pinoon gl. Pop. Matrix() - korvataan nykyinen matriisi pinon huipulla Pinojen koko: Modelview: vähintään 32 Projektio: vähintään 2
Matriisit ja muunnokset (8/8) Koordinaatit skaalataan ikkunan mittoihin sopiviksi Käytössä olevan alueen kokoa ja paikkaa voidaan säätää gl. Viewport() Z-koordinaatit normaalisti välillä 0 -1 Voidaan myös säätää gl. Depth. Range()
Näkyvyyden määrittäminen (1/4) Taakseosoittavien monikulmoiden poistaminen Poistetaan polygonit, jotka ovat "takaperin" tavallisesti takaperin on polygoni jonka verteksit kiertävät vastapäivään gl. Enable(GL_CULL_FACE) Poistetaanko etu- vai takaperin olevat polygonit: gl. Cull. Face() Kumminko päin on takaperin: gl. Front. Face()
Näkyvyyden määrittäminen (2/4) Perspektiivikartioon perustuva leikkaaminen Kaikki kappaleet tai kappaleen osat jotka ovat näkyvyyskartion ulkopuolella leikataan pois On mahdollista määrittää ainakin 6 ylimääräistä tasoa joilla kappaleita leikataan ennen projektiota gl. Enable(GL_CLIP_PLANEi) gl. Clip. Plane()
Näkyvyyden määrittäminen (3/4) Z-puskuri varastoi yhden z-arvon kutakin näyttöpuskurin pikseliä kohti tavallisesti z-arvo kuvaa etäisyyttä "kamerasta", eli suurempi -> kauempana piirrettäessä vain sellainen fragmentti piirretään jonka z on pienempi kuin z-puskurissa ko. pikselin kohdalla oleva arvo aina kun pikseli piirretään, korvataan z-arvo
Näkyvyyden määrittäminen (4/4) gl. Enable(GL_DEPTH_TEST) puskurin toimintatavan valinta: gl. Depth. Func() gl. Clear. Depth() gl. Clear(GL_DEPTH_BUFFER_BIT) Kähden lähekkäisen kappaleen keskinäinen zjärjestys saattaa vaihdella ikävästi gl. Polygon. Offset()
Verteksitaulukot ja listat (1/5) Verteksitaulukko Verteksidata välitetään yhdessä tai useammassa taulukossa Kappaleet voidaan määrittää joko suoraan taulukossa tai erillisen indeksitaulukon avulla Mahdollistaa verteksidatan välittämisen taulukkomuodossa Yksinkertaistaa esimerkiksi tiedostosta luetun datan käsittelyä Indeksointi vähentää muunnoksia
Verteksitaulukot ja listat (2/5) gl. Enable. Client. State() Taulukot välitetään gl*Pointer() komennoilla Color, Index, Edge. Flag, Normal, Tex. Coord, Vertex eli kaikki vertekseihin vaikuttava data voidaan välittää taulukoina taulukot myös mahdollista yhdistää: gl. Interleaved. Arrays() gl. Draw. Arrays() - piirretään kappaleita suoraan aktiivisista taulukoista gl. Draw. Elements() - piirretään kappaleita aktiivisista taulukoista indeksoituna
Verteksitaulukot ja listat (3/5) Listat (Display lists) lista johon koottu Open. GL-komentoja varastoi sekä geometriaa että tilamuutoksia yksinkertaistaa geometrian käsittelyä voi tehostaa suoritusta säilytetään palvelimella tehokas tapa säilyttää kappaleita jotka piirretään useita kertoja 3 D-kiihdytin voi varastoida listan omaan muistiinsa
Verteksitaulukot ja listat (4/5) Listan luominen Pyydetään listalle tunniste gl. Gen. Lists(): llä Annetaan halutut komennot gl. New. List()/gl. End. List() välissä Kaikkia komentoja ei voi tallettaa listaan gl. Get*() Verteksitaulukot Taulukkomuodossa annetusta datasta vain sen hetkiset arvot tallettuvat Listoja voidaan koostaa hierarkkisesti Myös GLU komentoja voidaan tallettaa listaan
Verteksitaulukot ja listat Listan käyttö gl. Call. List() listaa kutsuttaessa komennot suoritetaan talletusjärjestyksessä ei tarvita gl. Begin()/gl. End() Listassa olevat tilanmuunnokset jäävät voimaan! gl. Call. Lists() suorittaa taulukossa annetut listat (5/5)
Valaistus (1/7) Yleistä Lokaali valaistusmalli Valaistus lasketaan verteksiperustaisesti Interpoloidaan muille polygonin pisteille Ei varjoja Malli muodostuu Valonlähteistä Materiaaleista Globaaleista attribuuteista
Valaistus (2/7) Valonlähteet Kolmea tyyppiä: Suunnattu (directional), paikallinen (positional) ja spotti (spotlight) Attribuutit: sijainti/suunta Väritys: yleis- (ambient), diffuusi- (diffuse) ja peilimäinen (specular) -väri ja intensiteetti Vaimennus (attenuation) Spotin leveys (kulma) ja keilan suunta Spot exponent
Valaistus (3/7) Materiaalit Materiaali määrittää miten kappale reagoi valoon Attribuutit Heijastus: yleis- (ambient), diffuusi (diffuse), ja peilimäinen (specular) -väri ja -intensiteetti Kiiltävyys (shininess) Emissio (emission)
Valaistus (4/7) Globaalit attribuutit Globaali yleisvalo (global ambient) Tulkitaanko "kameran" olevan paikallinen vai äärettömän kaukana (local viewer) Valaistaanko takaperoiset polygonit gl. Light. Model()
Valaistus (5/7) Valojen käyttö Open. GL tukee ainakin 8 samanaikaista valonlähdettä gl. Shade. Model() gl. Enable(GL_LIGHTING) Valoja voidaan käyttää toisistaan riippumatta gl. Enable(GL_LIGHTi) Kappaleiden vertekseille määritettävä normaalivektorit
Valaistus (6/7) Valojen parametrien asettaminen: gl. Light*() Suunnattu valonlähde saadaan asettamalla valon sijainnin neljäs koordinaatti = 0 Modelview-matriisi vaikuttaa paikallisiin valoihin. Muunnos suoritetaan samalla kun valonlähteen sijainti asetetaan Paikallisesta valosta saadaan spotti rajoittamalla keilan leveyttä (annetaan keilen leveyden puolikas) Vaimennuskertoimet eivät vaikuta suunnattuihin valonlähteisiin
Valaistus (7/7) Materiaalit gl. Material() voidaan asettaa erikseen polygonin etu- ja takapuolelle myös alpha-arvot voidaan asettaa, ainoastaan diffuusi-termin alphalla vaikutusta emissiotermillä kappale voidaan saada näyttämään valonlähteeltä ("hohtamaan") gl. Color. Material()
Tekstuurit (1/16) Tekstuureilla vähennetään "muovikappale avaruudessa" – efektiä Tekstuuri on joko yksi- tai kaksiulotteinen datataulukko yksittäinen elementti, "tekseli" (texel) koostuu 1 -4 arvosta 6 erilaista esitysmuotoa RGB(A), alpha, luminanssi (+ alpha), intensiteetti
Tekstuurit (2/16) Tekstuurien luominen Luodaan uusi tekstuuriobjekti Luodaan tai luetaan tekstuuridata muistiin Generoidaan tunniste: gl. Gen. Textures() Valmistellaan tekstuuriobjekti Aktivoidaan luotu tekstuuriobjekti: gl. Bind. Texture() Siirretään tekstuuridata Open. GL: n käyttöön: gl. Tex. Image 2 D() Asetetaan parametrit
Tekstuurit (3/16) Mipmaps Etukäteen luotuja eri kokoisia "alitekstuureja" Seuraava pienempi tekstuuri aina 1/4 edellisestä Vähentää tekstuurien "välkettä" kappaleen koon pienentyessä -> parempi kuvanlaatu Muistitarve +33% Luontiin glu. Build 2 DMipmaps()
Tekstuurit (4/16)
Tekstuurit (5/16) Tekstuurin käyttö gl. Enable(GL_TEXTURE_2 D) Aktivoidaan haluttu tekstuuri gl. Bind. Texture() Asetetaan vertekseille tekstuurikoordinaatit gl. Tex. Coord 2 D() Tekstuurikoordinaatit välillä 0 -1 Koordinaatit muunnetaan tekstuurimatriisilla
Tekstuurit (6/16) Mitä tehdä jos tekstuurikoordinaatti on välin 0 -1 ulkopuolella? Voidaan toistaa uudelleen 1. 1 -> 0. 1, jne Voidaan leikata 1. 4 -> 1. 0, -0. 4 -> 0, jne Voidaan valita vapaasti sekä vaaka että pystysuuntaan gl. Tex. Parameter() GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T GL_CLAMP tai GL_REPEAT
Tekstuurit (7/16) Tekstuurikoordinaattien muunnokset Tekstuurikoordinaatit neliulotteisia aivan kuin normaalit koordinaatitkin (s, t, r, q) Tavallisesti r jätetään huomioimatta Tavallisesti q = 1 Tekstuurikoordinaateilla samanlainen 4 x 4 matriisi kuin tavallisillekin koordinaateille Kaikki muunnokset mahdollisia, jopa perspektiivi!
Tekstuurit (8/16) Ongelma: yksi tekseli vastaa vain harvoin yhtä näytön pikseliä Tekstuuria on suodatettava, eli joko "venytettävä" tai "kutistettava" tarpeen mukaan
Tekstuurit (9/16) Suodatustapa voidaan valita Valinta erikseen suurennukselle ja pienennykselle Voidaan valita miten mipmapeja käytetään Kuvan laatu vs. vaadittu laskentateho Vaihtoehdot joko lähimmän tekselin valinta tai interpolointi
Tekstuurit (10/16) Valinta gl. Tex. Parameter()-kutsulla GL_TEXTURE_MAG_FILTER GL_TEXTURE_MIN_FILTER Suurennussuodatin Aina käytössä suurin mipmap Vaihtoehdot GL_NEAREST – valitaan lähin tekseli GL_LINEAR – lasketaan arvo neljästä lähimmästä tekselistä
Tekstuurit (11/16) Pienennyssuodatin Voidaan valita käytetäänkö mipmapeja vai ei Voidaan valita käytetäänkö yhtä vai kahta lähintä mipmapia Vaihtoehdot GL_NEAREST, GL_LINEAR – kuten edellä Käytetään yhtä mipmapia: GL_NEAREST_MIPMAP_(NEAREST | LINEAR) Lasketaan arvo kahden mipmapin arvoista: GL_LINEAR_MIPMAP_(NEAREST | LINEAR)
Tekstuurit (12/16) Tekstuurimoodit (funktiot) Lopputulosta voidaan muokata tekstuurimoodilla Lopputulokseen vaikuttaa kolme tekijää Väri, tekstuuri sekä GL_TEXTURE_ENV_COLOR lopputuloksen tekstuurimoodi käytetyn tekstuurin esitysmuodon määrittämänä neljä erilaista tekstuurimoodia Decal, Replace, Blend, Modulate
Tekstuurit (13/16) Decal Vain GL_RGB ja RGBA sallittuja esitysmuotoja GL_RGB -> tekstuuri sellaisenaan GL_RGBA -> osittainen läpinäkyvyys Replace Korvaa esitysmuodosta riippuen joko näyttöpuskurin väri-, alpha- tai molemmat arvot
Tekstuurit (14/16) Modulate Kertoo tekstuurin ja näyttöpuskurin väri- ja/tai alpha-arvot keskenään Tekstuuri + valaistus Blend Sekoittaa GL_TEXTURE_ENV_COLOR värin ja näyttöpuskurin värin tekstuurin arvoilla painotettuna
Tekstuurit (15/16) Kehittyneempiä tekniikoita Multitexturing Useita “päällekäisiä” tekstuureita mm. ns. “lightmapping” Tekstuurien priorisointi & ns. "resident textures" Tärkeää kiihdyttimiä käytettäessä Texture proxy Tekstuurikoordinaattien automaattinen generointi mm. environment mapping
Tekstuurit (16/16)
Käyrät ja pinnat (1/4)
Käyrät ja pinnat (2/4) Open. GL ei sellaisenaan tue em. kappaleita Ne on muutettava janoiksi ja polygoneiksi ennen piirtämistä Open. GL: n evaluaattorit Perustana Bezier-käyrät ja pinnat Soveltuvat: mm. B-Spline, NURBS-pinnat
Käyrät ja pinnat (3/4) Evaluaattoreiden käyttö Määritetään ohjauspisteet halutuille evaluaattoreille: gl. Map*f() Otetaan halutut evaluaattorit käyttöön: gl. Enable(GL_MAP? _*) Evaluoidaan: gl. Eval. Coord*() Helpompi tapa: Luodaan tasavälinen "portaikko": gl. Map. Grid*() Evaluoidaan halutulla askelvälillä: gl. Eval. Mesh*()
Käyrät ja pinnat (4/4) Evaluointi mahdollista myös tekstuurikoordinaateille, normaalivektoreille, värille Samanaikaisesti mahdollista evaluoida yhtä tai useampaa muuttujaa GLU-kirjaston NURBS-toiminnot evaluaattoreita monipuolisempia
Blending (1/4) keino yhdistää kaksi tai useampaa kuvaa tai kuvan osaa "sekoittamalla" niiden pikselit yhdistää näyttöpuskurin pikselin ja liukuhihnalta tulevan fragmentin halutulla funktiolla Alphakomponentti funktio: Rs. Cs + Rd. Cd Piirtojärjestyksellä on siis merkitystä
Blending (2/4) gl. Enable(GL_BLEND) Kertoimet määrittävä funktio: gl. Blend. Func() tavallisin tapaus: gl. Blend. Func(GL_ONE, GL_ZERO) + gl. Blend. Func(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); "static lightmaps": gl. Blend. Func(GL_ONE, GL_ZERO) + gl. Blend. Func(GL_DST_COLOR, GL_ZERO);
Blending (3/4)
Blending (4/4) Z-puskuri aiheuttaa ongelman Läpinäkyvät pinnat estävät takana olevien pintojen piirtämisen Ratkaisu: Läpinäkyville pinnoille sallitaan vain luku zpuskurista gl. Depth. Mask()
Puskurit (1/5) Kuvan muodostava tieto talletetaan puskureihin Näyttöpuskurit (color buffer) Vähintään yksi puskuri Stereokuvatuki mahdollinen (kaksi puskuria) Kaksoispuskurointituki mahdollinen Mahdollisesti lisäpuskureita (auxiliary buffer) z-puskuri Stencil buffer Accumulation buffer
Puskurit (2/5) Toteutuksesta riippuen kaikki puskurit eivät välttämättä ole käytettävissä Stencil buffer Käytetään rajoittamaan piirtoa pikselin tarkkuudella Accumulation buffer Sisältää väridataa Käytetään lopullisen kuvan koostamiseen Esim. Antialiasing
Puskurit Fragmenttioperaatiot: Scissor test Alpha test Stencil test Depth test Blending Looginen operaatio (3/5)
Puskurit (4/5) Scissor test Näytöltä voidaan rajata neliskulmainen alue jonka ulkopuolelle ei piirretä gl. Enable(GL_SCISSOR_TEST) gl. Scissor() Alpha test Fragmentti voidaan hylätä sen alpha-arvon perusteella gl. Enable(GL_ALPHA_TEST) gl. Alpha. Func()
Puskurit (5/5) Stencil test Fragmentti voidaan hylätä stencil bufferin arvon perusteella gl. Enable(GL_STENCIL_TEST) gl. Stencil. Func() & gl. Stencil. Op() Looginen operaatio Bitittäinen operaatio gl. Enable(GL_COLOR_LOGIC_OP); gl. Logic. Op()
Kuvanlaatu Suoritusnopeus vs. kuvanlaatu – kompromissi gl. Hint() Vaikutus toteutusriippuvainen Kappaleiden antialiasointi, tekstuurien perspektiivikorjaus, sumu Kolme vaihtoehtoa GL_NICEST – paras kuvanlaatu GL_FASTEST – nopein suoritus GL_DONT_CARE – ei väliä
Sumu (1/2) Sumun avulla saadaan kauempana olevat kappaleet "hämärtymään" Soveltuu näkyvyyden rajoittamiseen gl. Enable(GL_FOG) gl. Fog*() Lineaarinen tai eksponentiaalinen parametrit: Lineaarinen: alku- ja loppuetäisyys Exponentiaalinen: tiheys
Sumu (2/2)
Open. GL Laajennukset Lista ajurin tukemista laajennuksista: gl. Get. String(GL_EXTENSIONS) Nimien alussa kaksi lyhennettä Laajennuksen tyyppi: GL, GLU, GLX, WGL. . . Mikä taho vastaa laajennuksesta: ARB – ARB: n hyväksymä laajennus EXT – useamman toimittajan hyväksymä laajennus INTEL, SGI, NV, WIN. . toimittajakohtaisia Laajennusten käyttöönotto alustakohtaista
Virheiden käsittely Viimeisin virhekoodi: gl. Get. Error() Kutsun jälkeen virhekoodi nollataan Ei virhettä viimeisimmän gl. Get. Error() kursun jälkeen: GL_NO_ERROR Virhekoodi merkkijonona: glu. Get. Error. String()
- 영국 beis
- Direktrisa parabole
- Mezopotámie časová osa
- Ccmis coer
- Osa stran trojúhelníku
- Yhteiskuntavastuun osa-alueet
- Osa úsečky zápis
- Vertikalni osa
- Sõnar
- Osa potajnica
- Eesti regivärsi algriimi osa
- Osa simetrije
- Osaposa
- Ylityörajat
- Osa obyčajná
- Osa 2015 4
- Osa obiettivi specifici di apprendimento
- Osakryl osa 23nm
- Mats traat
- Osa icc
- Rovnoramenný lichoběžník konstrukce
- Osa stran trojúhelníku
- Osa morska
- Ox osa
- Osa silové soustavy graficky
- Heldena taperson
- Apcisna osa
- Kinesiikka
- Osa-aikaty�
- Osa uksw
- Leetumine
- Osa safety course
- Osa paraboly
- Nerovnice číselná osa
- Osa classification
- Interalveolární osa
- Osa grncarica
- Kestävyysharjoittelun osa-alueet
- Arconic hampton
- Zemská osa nemění svůj
- Webadi osa
- Rovnoramenný trojúhelník
- Webadi osa
- Adjetivos terminados en sivo
- Mitä psykologia tutkii
- Www.ekologia.pl
- Bicultural palabra raiz
- Sleep apnea kaiser
- Osa vs ohs
- Osa mayor orientacion
- Osakollen
- Obvod obsah lichoběžníku
- Lapsen motorinen kehitys ikäkausittain
- öökuninganna aaria
- Osa úsečky
- Milline tarkvarasüsteem on opsüsteemi tuuma osa?
- Osakryl osa s20
- Elektrická osa srdeční určení
- Gli osa devono predisporre idonee procedure
- Osa x a y
- Přemyslovci časová osa
- Koordinaatteljestiku veerandid
- Koordinaatteljestiku osa
- Osa x a y
- Hmyz
- It is the do's and don'ts of online communication
- Open hearts open hands
- Notc symbol
- Tungsten replicator
- If you were grammar
- Principle hot air oven
- Vzw marlise
- Open gl
- Open mosix
- Unfreezer for deep freeze 7
- Ibm open horizon
- Il client enrollment
- Apache hadoop open source
- Liceo linguistico virgilio mantova open day
- Open grid service infrastructure
- Open book structure