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.