我打开了一个在屏幕上显示两个矩形的窗口,然后使用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
答案 0 :(得分:0)
这是SDL 2.0.10中的错误。 https://hg.libsdl.org/SDL/rev/6ee12b88beed已修复,此修复程序将随2.0.11一起提供。抱歉!