Yritin pilkkoa SDL_Surfacea ja tehdä siitä OpenGL-tekstuurien arrayta, mutta tekstuurit näkyvät vain mustina palikoina. Mikä on vialla?
GLuint fontti[31]; SDL_Surface *fontit=IMG_Load("font.png"); SDL_Surface *temp=IMG_Load("t.png"); glGenTextures(30,fontti); int i; for(i=0;i<30;i++) { SDL_Rect mista; mista.x=i*64; mista.y=0; mista.w=64; mista.h=64; SDL_Rect minne; minne.x=0; minne.y=0; SDL_BlitSurface(fontit,&mista,temp,&minne); glBindTexture(GL_TEXTURE_2D,fontti[i]); glTexImage2D(GL_TEXTURE_2D, 0, 3, temp->w, temp->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, temp->pixels); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_NEAREST); }
(Mod. Edit. Käytähän välejä, ettei leiska hajoa.)
No tuossahan ei noin ylipäätään ole mitään järkeä, sillä kannattaa tehdä funktio, joka piirtää koko tekstin SDL_Surfacelle noita kirjaimia käyttäen. Sitten lataat sen valmiin tekstin OpenGL:lle ja piirrät.
Ja mikä oli tuon t.png:n idea?
Mutta minun tarvii pyäritellä ja käännellä yksittäisiä kirjaimia ohjelmassani... ja t.png:n laitoin tuonne, kun luulin, että vika johtuisi siitä ettei temp-surfacella ole oikeita attribuutteja...
Tutustu SDL_CreateRGBSurfaceen.
Kokeilin jo aikaisemmin tuolla, ei toiminut...
Olisiko ongelmasi siinä, että minne-alueen leveys ja korkeus voivat olla mitä vain, kun et erikseen niitä alusta? Kun kuitenkin haluat piirtää koko sen alueen, jonka olet mista-laatikkoon valinnut, voit jättää koko minne-parametrin antamatta ja antaa tilalle NULL-osoittimen. Sopivat parametrit SDL_CreateRGBSurface-funktiolle voit luntata aihetta sivuavasta koodivinkistäni.
Kokeilin määritellä leveyden ja korkeuden, eikä mikään näyttänyt erilaiselta ohjelman suorituksessa. Ei auttanut sekään että laitoin NULLin funktion neljänneksi parametriksi. (Ja kuten sanoin jo, kokeilin jo aikaisemmin SDL_CreateRGBSurface-funktiolla) Itse epäilen että jokin on vialla noissa kolmessa OpenGL-funktiossa, mutta en keksi mikä.
On aika outoa määritellä glTexImage2D:lle, että värissä on kolme komponenttia mutta että formaatti olisi kuitenkin muka RGBA. Korjaapa tuo ja tarkista, että ladattujen kuvien formaatti on oikea.
Kokeilin, ei toiminut, ja päätin pilkkoa kuvat valmiiksi erillisiin kuvatiedostoihin. :)
EDIT:HAHAA! Ongelma olikin että minulta puuttuikin seuraavat OpenGL:n funktiot:
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND);
Aihe on jo aika vanha, joten et voi enää vastata siihen.