我看到很多杂散像素附加到我使用 SDL2 绘制的对象上。添加额外像素的对象是线条、填充矩形和转换为纹理的 TTF 文本。 SDL_RenderFillRect() 函数有两个参数:一个
SDL_Renderer*
和一个 SDL_Rect*
来指定显示矩形的位置。我使用该函数绘制矩形。我不明白我怎么会做错事。每当有杂散像素时,它始终是一个附加到对象的像素。例如,我的矩形将如下所示:
XXXXXXXXXXX
XXXXXXXXXXX
XXXXXXXXXXXX <----stray pixel on the right-bottom
上面跟真图像素数不一样,比例也不一样,但是思路是一样的。有一个额外的附加像素。
我会用线条得到类似的东西。像这样(由 3 行组成):
X <--- stray pixel
XXXXXXXXXXXXXXXXX
X X
X X
对于文本,我会得到这样的东西:
XXXXXXXXX
X
X
X
X <--- stray pixel
杂散像素总是出现在同一个地方。对于文本,它们始终存在。对于线和框,它们只是有时存在。
知道为什么会这样吗?什么样的事情会导致这种情况?
我还没有能够产生一个最小的可重现的例子。但是,我确实至少找到了一种解决方法(以及导致问题的原因的提示),希望它是暂时的。我发现当我用标志
SDL_CreateRenderer()
而不是 SDL_RENDERER_SOFTWARE
调用 SDL_RENDERER_ACCELERATED
时,杂散像素消失了。希望当我在屏幕上绘制更多内容时,我不会发现我的程序运行得非常慢。但是这样做已经完全摆脱了杂散像素。所以,我对此感到非常高兴,至少现在是这样。
如果有人对这个问题有更多的了解,以及为什么我必须使用软件渲染来避免杂散像素,请编辑此答案或添加评论。
这个问题应该在 SDL 2.26 和更新版本中得到解决。 https://github.com/libsdl-org/SDL/issues/7447