fonts in SDL & opengl

Started by
3 comments, last by incubator01 19 years, 10 months ago
a) suppose I have an opengl scene (like a rotating object or something like that) and I decide to use SDL_TTF to draw some text over that object, would the rect I blitted the text on be properly restored when I decide so clear the rect with an SDL function? b) I was trying out Nehe lesson 13, text in opengl. I got the Linux/SDL code for it but it seems glx.h is used to load the fonts. thats why I mentioned SDL_TTF above. Now I was wondering if the surface struct returned by TTF_RenderText_Solid() would be usable for the opengl functions used in the tutorial?
Advertisement
You can use SDL_TTF for text but you'll have to convert the SDL_Surface into an opengl texture.
Just blitting wont work.
Then you make some geometrie, use glOrtho for 2d drawing, convert the coordinates of opengl into the standard windows ones and voila, display your text.
I'll tell you what. I'll show you my function for creating the texture with TTF. The drawing and scaling part should be easy. Just remember the width and height of glOrtho, the font width and height and the screen width and height and make a little formula.

bool CreateFromText(char *text, int r, int g, int b, int a){	SDL_Color clr = {r, g, b, a};	SDL_Surface *Text = TTF_RenderText_Solid(font, text, clr);	font_width = Text->w;	font_height = Text->h;	//Next power of two.	width = 1;	while(width < Text->w)	{		width*=2;	}	height = 1;	while(height < Text->h)	{		height*=2;	}	SDL_Surface *TextSurface = SDL_CreateRGBSurface(SDL_SWSURFACE, width, height, 24,		                                            0, 0, 0, 0);	SDL_BlitSurface(Text, 0, TextSurface, 0);	glBindTexture(GL_TEXTURE_2D, tex_id[0]);	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);	glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, TextSurface->w, TextSurface->h,		         0, GL_BGR_EXT, GL_UNSIGNED_BYTE, TextSurface->pixels);	SDL_FreeSurface(TextSurface);		SDL_FreeSurface(Text);	TextSurface = NULL;	Text = NULL;	return true;}


-CProgrammer

[edited by - CProgrammer on May 26, 2004 12:14:28 AM]

[edited by - CProgrammer on May 26, 2004 12:15:33 AM]
cool :D
thanks a lot!
Everytime I reference to Font->h, or Font->w. I get a memory read error???
Douglas Eugene Reisinger II
Projects/Profile Site
?
Where did I ever read font->w?
You''ll have to be more specific and maybe post some code.
-CProgrammer

This topic is closed to new replies.

Advertisement