1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
|
SDL_Surface * resource = TTF_RenderText_Solid(m_font, m_text, m_fg);
assert(resource);
int n_w = 1;
while(n_w<resource->w)
n_w*=2;
int n_h = 1;
while(n_h<resource->h)
n_h*=2;
Uint32 rmask, gmask, bmask, amask;
/*Vu qu'on est en 32bit, l'Endian est important...*/
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
rmask = 0xff000000;
gmask = 0x00ff0000;
bmask = 0x0000ff00;
amask = 0x000000ff;
#else
rmask = 0x000000ff;
gmask = 0x0000ff00;
bmask = 0x00ff0000;
amask = 0xff000000;
#endif
SDL_Surface * bg = SDL_CreateRGBSurface(SDL_HWSURFACE, n_w, n_h, 32,rmask, gmask, bmask, amask);
assert(bg);
SDL_FillRect(bg, NULL,SDL_MapRGBA(bg->format, 0, 0, 255, 0));
SDL_Rect rect_text;
rect_text.x = 0;
rect_text.y = 0;
rect_text.w = resource->w;
rect_text.h = resource->h;
SDL_Rect rect_bg;
rect_bg.x = 0;
rect_bg.y = 0;
rect_bg.w = n_w;
rect_bg.h = n_h;
if(SDL_BlitSurface(resource,&rect_text,bg,&rect_bg)!=0)
{
printf("ERREUR de blit\n");
getchar();
}
glGenTextures(1,(GLuint*)&m_texture_id);
// initializes the texture
glBindTexture(GL_TEXTURE_2D, m_texture_id);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
// gets the pixel data from the SDL_Surface
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, n_w, n_h, 0, GL_RGBA, GL_UNSIGNED_BYTE, bg->pixels);
// releases the SDL_Surface, as it isn't useful anymore
SDL_FreeSurface(resource);
SDL_FreeSurface(bg); |
Partager