tämä koodinpätkä on haettu netistä jostain,
se käyttää SDL_TTF fonttikirjastoa ja luo openGL tekstuurin siitä..
tekstuurin taustaväri on ikävästi aina musta,
miten taustaväri muutetaan valkoiseksi?
lopuksi koodia ...
struct fontit_tekstuuri{ // tänne tallennetaan tekstuuri ja sen koko GLuint tekstuuri; int w,h; }; fontit_tekstuuri fontit::string_to_texture (std::string i) { if (font==NULL) setsize ("data/FrakturBT.ttf", 128); // funktio joka lataa fontin muistiin SDL_Color omablue = { 0x00, 0x00, 0xff, 0 }; // tekstin väri SDL_Surface *teksti, *teksti_copy; char * ii; // muutetaan std::string char muotoon ii = new char [i.size()+1]; strcpy (ii, i.c_str()); teksti = TTF_RenderText_Blended(font, ii, omablue); delete[] ii; fontit_tekstuuri temppi; // fontit_tekstuuri esitelty ylhäällä temppi.w=teksti->w; temppi.h=teksti->h; // loppu on meitsille hepreaa... mutta toimii, teksti_copy = SDL_CreateRGBSurface(0, teksti->w, teksti->h, 32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000); SDL_BlitSurface(teksti, 0,teksti_copy, 0); /* Create The Texture */ glGenTextures( 1, &temppi.tekstuuri ); /* Typical Texture Generation Using Data From The Bitmap */ glBindTexture( GL_TEXTURE_2D, temppi.tekstuuri ); /* Generate The Texture */ glTexImage2D(GL_TEXTURE_2D, 0, 4, teksti->w, teksti->h, 0, GL_BGRA, GL_UNSIGNED_BYTE, teksti_copy->pixels ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); if ( teksti ) SDL_FreeSurface( teksti ); if ( teksti_copy ) SDL_FreeSurface( teksti_copy ); return temppi; }
Mod. lisäsi kooditagit, lisää ensi kerralla itse.
Mieluisamman taustavärin saat, kun täytät teksti_copy-pinnan haluamallasi värillä ennen tekstin kopioimista sinne. Voit käyttää vaikkapa SDL_FillRect-funktiota, ja värin saat SDL_MapRGBA-funktiolla.
Koko tuo ii-kikkailu on turha, voit antaa sen paikalla parametrina suoraan arvon i.c_str().
Aihe on jo aika vanha, joten et voi enää vastata siihen.