Pitäisi saada SDL_Surface muutettua openGL-tekstuuriksi. Se vaan jostain syystä kaatuu ennen kuin ehtii kunnolla alkamaankaan. Koodia ongelmakohdalta:
EDIT: löytyy tuosta alhaalta.
Tämän jälkeen kummallekaan kuvalle ei tehdä yhtään mitään. 24-bittisiä 128*128 .bmp ja .png tiedostoja olen kokeillut. Sisällytettyksessä kokeiltu opengl+sdl+lisäkirjastoja, opengl+sdl ja sdl+sdl_opengl. Muuten koodi on devpakin mukainen. Pistän vielä mainin tähän, kaikilla kun ei ole devpakkia.
int main(int argc, char *argv[]){ SDL_Event event; float theta = 0.0f; SDL_Init(SDL_INIT_VIDEO); SDL_SetVideoMode(800, 600, 0, SDL_OPENGL | SDL_HWSURFACE | SDL_NOFRAME); glViewport(0, 0, 800, 600); glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClearDepth(1.0); glDepthFunc(GL_LESS); glEnable(GL_DEPTH_TEST); glShadeModel(GL_SMOOTH); glMatrixMode(GL_PROJECTION); glMatrixMode(GL_MODELVIEW); GLuint texture1; SDL_Surface *kuva; glGenTextures(1, &texture1); glBindTexture(GL_TEXTURE_2D, texture1); kuva = SDL_LoadBMP("TestSquare2.bmp"); MySDL_glTexImage2D(kuva); SDL_FreeSurface(kuva); int done; for(done = 0; !done;){ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glTranslatef(0.0f,0.0f,0.0f); //glRotatef(theta, 0.0f, 0.0f, 1.0f); SDL_GL_SwapBuffers(); SDL_PollEvent(&event); if(event.key.keysym.sym == SDLK_ESCAPE) done = 1; } SDL_Quit(); return(0); }
Mikä koodissa on vialla?
Toimiiko kuitenkin jos jätät tekstuurikoodit pois?
Toimii. Pelkkä Metabolixin funktion kutsun pois jättäminen riittää. Muillakin netistä etsityillä funktioilla kaatuu.
Tarkistapa, saatko kuvan edes ladattua. Muistaakseni olet (tai joku muu on) ennenkin täällä mokaillut tuollaisen kanssa. Saisi kehittyä ihan omaksi rutiiniksi, että osaisi tarkistaa tuollaiset perusasiat.
if (!kuva) { printf("Lataus meni pieleen!\n"); abort(); }
Edit. Lisäsin pienen virheenkäsittelyohjeen koodivinkkiin. En jaksa moneen kertaan samoja pulmia ratkoa.
Nyt hävettää, en laittanut polkuun kansiota, jossa kuva on. Tällä hetkellä tekstuuri on täyttä valkoista, vaikka pitäisi olla sellainen kirjava kuva.
glBindTexture(GL_TEXTURE_2D, texture1); glBegin(GL_TRIANGLES); glTexCoord2f(0.0f, 1.0f); glVertex2f(0.0f, 0.5f); glTexCoord2f(1.0f, 1.0f); glVertex2f(0.5f, 0.5f); glTexCoord2f(1.0f, 0.0f); glVertex2f(0.5f, 0.0f); glEnd();
Tuollaiset on ennen puskurien vaihtoa.
EDIT: texture1:n pitäisi olla kunnossa saman testin perusteella.
glEnable(GL_TEXTURE_2D);
Suosittelen jonkin oppaan hyödyntämistä.
Kokeilin tuollakin. Ei toimi.
Aihe on jo aika vanha, joten et voi enää vastata siihen.