我看到很多杂散像素附着在我使用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