Miten tuollainen otsikossa mainittu muunnos onnistuu?
Eikö se onnistuisi ihan tavallisella tyyppimuunnoksella? En sitten tiedä yhtään, mikä tämä GLfloat on.
int terve = 5; GLfloat moi = (GLfloat)terve;
Ok. Se on OpenGL float muuttuja...
offtopic: Minusta nuo GL-muuttujat ovat aivan älyttömiä. Miksi antaa muuttujalle uusi tyyppi vain siksi, että ohjelmassa käytetään OpenGL:ää? Ei kääntäjä valita, vaikka se olisi tavallinenkin float-muuttuja, kun GLfloat on määritelty jommalla kummalla näistä:
typedef float GLfloat; #define GLfloat float
Metabolix kirjoitti:
Minusta nuo GL-muuttujat ovat aivan älyttömiä. Miksi antaa muuttujalle uusi tyyppi vain siksi, että ohjelmassa käytetään OpenGL:ää?
Olen itsekkin ihmetellyt täysin samaa juttua. Jostain syystä useat muutkin kirjastot käyttävät samaa menettelyä. Olisikohan syynä ylläpidettävyys: floatin voi vaihtaa myöhemmin vaikkapa doubleksi tekemättä mitään muutoksia koodiin (kirjaston tai sitä käyttävien ohjelmien).
No mutta eihän koodistakaan tarvitse (yleensä, jos kestää pari varoitusta type-castien puuttumisesta) muuttaa kuin se yksi kohta, jossa muuttujansa määrittelee (jos kirjoittaa määrittelyt selkeästi yhteen paikkaan eikä sinne tänne). Ja jos se float muutetaan doubleksi, niin tuskin sen GL-nimikään on enää GLfloat, taitaisi siihenkin tulla GLdouble.
tn kirjoitti:
Metabolix kirjoitti:
Minusta nuo GL-muuttujat ovat aivan älyttömiä. Miksi antaa muuttujalle uusi tyyppi vain siksi, että ohjelmassa käytetään OpenGL:ää?
Olen itsekkin ihmetellyt täysin samaa juttua. Jostain syystä useat muutkin kirjastot käyttävät samaa menettelyä. Olisikohan syynä ylläpidettävyys: floatin voi vaihtaa myöhemmin vaikkapa doubleksi tekemättä mitään muutoksia koodiin (kirjaston tai sitä käyttävien ohjelmien).
Syynä on todennäköisesti se, että perustietotyypit kuten float, int ja long ovat eri arkkitehtuureissa eri pituisia. Käyttämällä GLfloat tyyppiä varmistetaan, että käytössä on 32 bittinen liukuluku kaikilla arkkitehtuureilla. Tyypit kuten GLfloat parantavat siis koodin portattavuutta.
Ja C++-tyylinhän tuo menee seuraavasti:
int terve = 5; GLfloat moi = static_cast<GLfloat>(terve);
Aihe on jo aika vanha, joten et voi enää vastata siihen.