Mitenhän kannattaisi ladata todella iso kuva OpenGL (c++)ohjelmaan näytettäväksi vain osa kerrallaan ja vieritettäväksi, kun kuvakoko on suunnilleen 640 x 2000 tai jopa isompi? Ja värejäkin riittää. Jo itse kuva vie useita megatavuja BMP muodossa.
Kannattaako vaihtaa johonkin toiseen muotoon ja ladatako tekstuuriksi vai lukea jotenkin suoraan näytölle reaaliajassa? Pientä peliä yrittelen väsätä.
Kyllä se on syytä tavalla tai toisella muistiin ladata mikäli siirtymisessä ei ole taukoja. Tiedostomuotoa rajoittavat lähinnä se, saako kuvan siitä ladattua, ja pelin levitysvaiheessa patentit. PCX on suhteellisen hyvä vaihtoehto, koska se on yleensä BMPtä pienempi. En taas OpenGL:ää tunne, joten en voi siihen ottaa kantaa, mutta useimmat syteemit varmasti säilyttävät kuvia muistissa Bitmappeina tai vastaavina, jottei kuvan purkaminen vie aikaa ohjelman käyttövaiheessa. Tekstuuri voi olla ihan hyvä ratkaisu.
En tiedä mitä auttaa mutta jossen tekee resurssi tiedoston kuvan lataamista varten. Ja silloin kuva data voidaan lukea osoitteesta BMP.BmBits. Ellet ole jo niin tehnyt.
Tekstuurit on tavallisesti neliön muotoisia. Ehkä uusimmat näytönohjaimet tukevat muita kokoja (tai sitten vanhatkin), mutta itse en muita muotoja ole koskaan käyttänyt. Kuva-formaattina voit käyttää mitä tahansa kunhan teet sille latausfunktiot. Oma OpenGL-kirjasto tukee ainakin bmp, jpg ja alpha-kanavoitua png muotoa.
Vanhemmat näytönohjaimet eivät taida ymmärtää noin isokokoisten tekstuurien päälle. Voit tietysti pilkkoa kuvan sopivan kokoisiin osiin ja ladata sen paloina. Sitten vain teksturoit vierekkäiset suorakaiteet ladatuilla isomman kuvan osasilla.
Tein juuri testiohjelman, joka lataa ~ 640 x 2000 kokoisen bitmapin kokonaan tekstuuriksi. Onnistuu mipmapattuna tekstuurina. Meni omalla koneella ( 700 Mhz, GeForce 2MX ) noin 4 sekuntia kuvan lataamiseen. Teksturoidun suorakaiteen liikutuskin sujui kohtuullisen hyvin. Miten käy sitten hitaammilla koneilla... Voi olla, että firebugin ajatus toimii vielä paremmin. Pitänee kokeilla.
Aihe on jo aika vanha, joten et voi enää vastata siihen.