是什么原因导致我的SDL2程序中出现杂散像素



我看到很多杂散像素附着在我使用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_RENDERER_SOFTWARE而不是SDL_RENDERER_ACCELERATED调用SDL_CreateRenderer()时,我发现杂散像素消失了。希望当我在屏幕上画更多的东西时,我不会发现我的程序运行得太慢。但这样做已经完全消除了杂散像素。所以,我对此感到非常高兴,至少目前是这样。

如果有人对这个问题有更多的了解,以及为什么我必须使用软件渲染来避免像素漂移,请编辑这个答案或添加评论。

这个问题应该在SDL 2.26及更新版本中解决。https://github.com/libsdl-org/SDL/issues/7447

相关内容

最新更新