Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 渲染文本后的空白屏幕_C_Sdl_Sdl Ttf - Fatal编程技术网

C 渲染文本后的空白屏幕

C 渲染文本后的空白屏幕,c,sdl,sdl-ttf,C,Sdl,Sdl Ttf,我打开了一个窗口,在屏幕上显示两个矩形,然后使用SDL_TTF在屏幕上显示鼠标位置 我很难理解的一点是,为什么在渲染文本之后,两个矩形没有显示出来 我正在使用SDL_RenderFillRect在屏幕上绘制两个矩形 SDL_SetRenderDrawColor(渲染器,255、255、255); SDL_RenderFillRect(渲染器,rect1); SDL_SetRenderDrawColor(渲染器,0、0、255、255); SDL_RenderFillRect(渲染器,rect2)

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

我很难理解的一点是,为什么在渲染文本之后,两个矩形没有显示出来

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

SDL_SetRenderDrawColor(渲染器,255、255、255);
SDL_RenderFillRect(渲染器,rect1);
SDL_SetRenderDrawColor(渲染器,0、0、255、255);
SDL_RenderFillRect(渲染器,rect2);
用于呈现文本的代码是

//使用鼠标x、y坐标定义字符串
sprintf(someString,“x:%d,y:%d”,mouse.x,mouse.y);
SDL_点textPos={10,10};
WriteText(渲染器、字体、someString、textPos,(SDL_颜色){255、255、255});
SDL_Surface*fontSurface=TTF_RenderText_混合(字体,someString,颜色为黑色);//创建字体表面
SDL_纹理*fontTexture=SDL_CreateTextureFromSurface(渲染器,fontSurface);//创建纹理
//从fontsurface clip rect获取剪辑宽度和高度
SDL_-Rect*fontRect=&fontSurface->clip_-Rect;
fontRect->x=位置x;
fontRect->y=位置y;
SDL_RenderCopy(渲染器,fontTexture,NULL,fontRect);//将文本复制到渲染器
//删除表面和纹理
SDL_自由曲面(fontSurface);
SDL_纹理(fontTexture);
它显示鼠标在窗口左上角的位置。但是,这会使窗口的其余部分变为空白

为了防止出现这种情况,我的工作是在调用SDL_RenderCopy后(奇怪的是在调用SDL_DestroyTexture之前)在屏幕上绘制一些东西,例如绘制单点

。。。
SDL_RenderCopy(渲染器,fontTexture,NULL,fontRect);//将文本复制到渲染器
//为什么需要这个??
SDL_渲染器绘制点(渲染器,0,0);
//删除表面和纹理
SDL_自由曲面(fontSurface);
SDL_销毁纹理(fontTexture);//在这之前我必须指出一点
...
然后显示文本之前呈现的两个矩形

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

为什么在调用SDL_RenderCopy以阻止之前渲染的内容不显示后,我必须画一个点


注意:链接到完整的源代码这是SDL2.0.10中的一个错误。它由修复,此修复将随2.0.11一起发布。对不起

这是SDL2.0.10中的一个bug。它由修复,此修复将随2.0.11一起发布。对不起

我在linux中编译了源代码,我更改了字体(我没有Arial),我看不出有什么不同的注释
SDL_RenderDrawPoint
,它总是按照假设工作,文本坐标鼠标+2个矩形(SDL版本2.0.9)看起来像是中引入的错误(这是对另一个问题的修复)。我想应该向SDL bugzilla报告一个bug(如果您不能或不想报告,请在评论中告诉我)。作为一种解决方法,您可以使用另一个SDL渲染器实现(例如opengl)。Intrest我使用gcc在Manjaro Linux虚拟机上编译了这段代码,它运行得很好,不需要
SDL\u RenderDrawPoint
。当使用配置为使用mingw32-gcc.exe编译的Visual Studio代码在Win10上编译时,我有这个错误。两者都使用SDL版本2.0.10,keltar链接的bug应针对该版本进行修复?@DanM否,它在2.0.10中(仅使用direct3d渲染器),但不在例如2.0.9中。我在linux中编译了源代码,我更改了字体(我没有Arial),我看不出有什么不同的注释
SDL_RenderDrawPoint
,它总是按照假设工作,文本坐标鼠标+2个矩形(SDL版本2.0.9)看起来像是中引入的错误(这是对另一个问题的修复)。我想应该向SDL bugzilla报告一个bug(如果您不能或不想报告,请在评论中告诉我)。作为一种解决方法,您可以使用另一个SDL渲染器实现(例如opengl)。Intrest我使用gcc在Manjaro Linux虚拟机上编译了这段代码,它运行得很好,不需要
SDL\u RenderDrawPoint
。当使用配置为使用mingw32-gcc.exe编译的Visual Studio代码在Win10上编译时,我有这个错误。两者都使用SDL版本2.0.10,keltar链接的bug应针对该版本进行修复?@DanM否,它在2.0.10中(仅使用direct3d渲染器),但不在例如2.0.9中。