Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: int --> GLfloat

Sivun loppuun

Meitsi [03.12.2004 15:27:46]

#

Miten tuollainen otsikossa mainittu muunnos onnistuu?

Aruviel [03.12.2004 15:34:03]

#

Eikö se onnistuisi ihan tavallisella tyyppimuunnoksella? En sitten tiedä yhtään, mikä tämä GLfloat on.

int terve = 5;
GLfloat moi = (GLfloat)terve;

Meitsi [03.12.2004 15:34:55]

#

Ok. Se on OpenGL float muuttuja...

Metabolix [03.12.2004 15:44:05]

#

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

tn [03.12.2004 19:28:26]

#

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).

Metabolix [03.12.2004 22:47:39]

#

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.

FooBat [03.12.2004 23:13:27]

#

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.

Createman [04.12.2004 17:37:08]

#

Ja C++-tyylinhän tuo menee seuraavasti:

int terve = 5;
GLfloat moi = static_cast<GLfloat>(terve);

Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta