Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: SDL_TTF fontit ja taustaväri

pulis [03.12.2008 21:11:45]

#

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.

Metabolix [04.12.2008 02:03:54]

#

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().

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta