使用其他图形时使用SDL_ttf绘制文本

时间:2013-04-16 17:39:03

标签: c++ sdl codeblocks sdl-ttf sdl-image

我正在使用SDL制作这个游戏,我需要能够显示变量和信息等文本。问题是我无法渲染任何文本,而SDL_OPENGL是一个参数 SDL_SetVideoMode()。

它完美无缺,但我无法渲染任何图形。 显然,我需要两者,而不是为文本绘制图像。

TL; DR我需要在不删除SDL_OPENGL的情况下绘制文本 SDL_SetVideoMode(SCREEN_WIDTH,SCREEN_HEIGHT,32,SDL_SWSURFACE | SDL_OPENGL);

如果有帮助,我正在使用C ++和code :: blocks。还需要其他任何信息吗?

1 个答案:

答案 0 :(得分:0)

所以经过一些工作后,我想出了如何自己解决它,我只是转换了表面,就像我用常规图片一样。这是我使用的功能,如果其他人感兴趣或有类似的问题。

GLuint importText(const std::string &text,int font_size,const __int8 red,const __int8 green,const __int8 blue){
SDL_Color font_color = {blue,green,red};
TTF_Font* font=TTF_OpenFont("Font.ttf",font_size);
SDL_Surface *image = TTF_RenderText_Blended(font,text.c_str(),font_color);
SDL_DisplayFormatAlpha(image);
unsigned object(0);
glGenTextures(1,&object);
glBindTexture(GL_TEXTURE_2D, object);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, 0,GL_RGBA,image->w,image->h,0,GL_RGBA,GL_UNSIGNED_BYTE,image->pixels);
texture_height=image->h; texture_width=image->w;
SDL_FreeSurface(image);
TTF_CloseFont(font);
return object;}