呈现文字后出现空白屏幕

时间:2019-08-18 19:26:14

标签: c sdl sdl-ttf

我打开了一个在屏幕上显示两个矩形的窗口,然后使用SDL_TTF在屏幕上显示鼠标位置。

我很难理解的一点是为什么在渲染文本后,两个矩形不显示。

我正在使用SDL_RenderFillRect在屏幕上绘制两个矩形

SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
SDL_RenderFillRect(renderer, rect1);

SDL_SetRenderDrawColor(renderer, 0, 0, 255, 255);
SDL_RenderFillRect(renderer, rect2);

用于呈现文本的代码是

// define string with mouse x, y coords
sprintf(someString, "x: %d, y: %d", mouse.x, mouse.y);
SDL_Point textPos = {10, 10};
WriteText(renderer, font, someString, textPos, (SDL_Color){255, 255, 255, 255});
SDL_Surface *fontSurface = TTF_RenderText_Blended(font, someString, COLOR_BLACK); // create font surface
SDL_Texture *fontTexture = SDL_CreateTextureFromSurface(renderer, fontSurface);  // create the texture

// get clip width and height from fontsurface clip rect
SDL_Rect *fontRect = &fontSurface->clip_rect;
fontRect->x = pos.x;
fontRect->y = pos.y;

SDL_RenderCopy(renderer, fontTexture, NULL, fontRect); // copy text to the renderer
// delete surface and texture
SDL_FreeSurface(fontSurface);
SDL_DestroyTexture(fontTexture);

它显示鼠标在窗口左上角的位置。但这会使其余窗口空白。

为避免这种情况,我的解决方法是在调用SDL_RendererCopy之后(以及在调用SDL_DestroyTexture之前也很奇怪)必须在屏幕上绘制一些东西,例如绘制单点

...
SDL_RenderCopy(renderer, fontTexture, NULL, fontRect); // copy text to the renderer

// why is this needed??
SDL_RenderDrawPoint(renderer, 0, 0);

// delete surface and texture
SDL_FreeSurface(fontSurface);
SDL_DestroyTexture(fontTexture); // have to draw a point before this
...

然后显示在文本之前呈现的两个矩形

如果在调用SDL_RenderCopy时将dstRect设置为NULL,则文本将覆盖整个窗口,但我可以看到在文本下方之前呈现的内容。

为什么在调用SDL_RenderCopy之后停止不显示的渲染内容之前必须画点?

注意:链接到完整的源代码https://pastebin.com/tRSFT0PV

1 个答案:

答案 0 :(得分:0)

这是SDL 2.0.10中的错误。 https://hg.libsdl.org/SDL/rev/6ee12b88beed已修复,此修复程序将随2.0.11一起提供。抱歉!