什么可能导致杂散像素出现在我的 SDL2 程序中?

问题描述 投票:0回答:2

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

杂散像素总是出现在同一个地方。对于文本,它们始终存在。对于线和框,它们只是有时存在。

知道为什么会这样吗?什么样的事情会导致这种情况?

c++ c++11 centos7 sdl-2
2个回答
-1
投票

我还没有能够产生一个最小的可重现的例子。但是,我确实至少找到了一种解决方法(以及导致问题的原因的提示),希望它是暂时的。我发现当我用标志

SDL_CreateRenderer()
而不是
SDL_RENDERER_SOFTWARE
调用
SDL_RENDERER_ACCELERATED
时,杂散像素消失了。希望当我在屏幕上绘制更多内容时,我不会发现我的程序运行得非常慢。但是这样做已经完全摆脱了杂散像素。所以,我对此感到非常高兴,至少现在是这样。

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


-1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.