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

2024-03-14

我发现使用 SDL2 绘制的对象上附加了很多杂散像素。添加额外像素的对象包括线条、填充矩形以及转换为纹理的 TTF 文本。这SDL_RenderFillRect() https://wiki.libsdl.org/SDL_RenderFillRect函数有两个参数:一个SDL_Renderer* and an 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。希望当我在屏幕上绘制更多内容时,我不会发现程序运行速度超慢。但这样做已经完全摆脱了杂散像素。所以,我对此感到非常高兴,至少现在是这样。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是什么导致我的 SDL2 程序中出现杂散像素? 的相关文章

  • 如何使用按位运算根据另外两个字节来分配一个字节的特定位? (根据蒙版进行位混合)

    我有3个字节 一个字节决定了第 3 个字节的哪些位需要更改 1 表示位需要更改 0 表示不应发生更改 第 2 个字节决定变化的位分配为 1 还是 0 第三个字节是发生变化的地方 有没有办法使用按位运算符来实现此目的 如果是这样 怎么办 一个
  • 如何在 C# 中将 IEnumerable 转换为 Enum?

    我已将多个字符串解析为枚举标志 但看不到将它们合并为单个枚举位字段的巧妙方法 我使用的方法循环遍历字符串值 然后 将值转换为 Enum 对象 如下所示 Flags public enum MyEnum None 0 First 1 Seco
  • 将 Azure Blob 与 Azure 网站连接

    我正在尝试将 Azure 网站连接到 Azure blob 我打算在容器中托管一些文件 然后从我的网站获取它们 我从本教程开始 http azure microsoft com en us documentation articles we
  • 为什么shared_ptr删除器必须是可复制构造的?

    在 C 11 中std shared ptr有四个构造函数 可以传递删除器对象d类型的D 这些构造函数的签名如下 template
  • 使用 OpenFileDialog 选择文件和文件夹

    我做了很多研究来找到这个问题的合适答案 但我失败了 我可以在这里和其他论坛上看到多个问题 但没有明确的答案带来明确的解决方案 我希望 OpenFileDialog 为我选择一个 多个文件 并允许我也选择文件夹 例如 A 多个文件或多个文件夹
  • C# 中的嵌套正则表达式替换

    我不太擅长正则表达式 但我了解基础知识 我试图弄清楚如何根据匹配中的某个值进行条件替换 例如 假设我有一些嵌套的字符串结构 如下所示 id value id and value are space delimited id will nev
  • 如何检测并突出显示鼠标悬停时的矩形

    我在 C net 中创建了一个 Windows 应用程序控件 以图形模式显示一些对象 为此 我根据列表中的项目数量创建了一个矩形 并使用 Control OnPaint 事件将其绘制在控件上 现在 如果鼠标悬停在该矩形上 我想突出显示该矩形
  • C++变量声明和初始化规则

    考虑以下声明和初始化类型变量的方法C C c1 C c2 c2 C C c3 C C c4 C 所有这些是否完全等同 或者其中一些可以根据确切的定义而有所不同C 假设它有公共默认值和复制构造函数 这些意味着 C c1 default con
  • C# 中是否有相当于 php array_merge 的函数

    如果不是 创建它的最佳方法是什么 注意 合并不仅仅是附加 它融合了相同的键 此功能存在于 List 元素上 在 C 中 数组是固定宽度的项 因此在不创建新数组的情况下无法修改大小 然而 列表却是另一回事 你可以做 List
  • C++ 获取两个分隔符字符串之间的字符串

    C C 中是否有任何内置函数可以在两个分隔符字符串之间获取字符串 我的输入看起来像 STARTDELIMITER 0 192 168 1 18 STOPDELIMITER 我的输出应该是 0 192 168 1 18 提前致谢 你可以这样做
  • CommandBehavior.SequentialAccess 是否有任何性能提升?

    我意识到我总是按照索引返回的顺序读取字段 使用常量 所以据我所知 我的代码已经与 CommandBehavior SequentialAccess 兼容 如果我打开它会有什么好处吗 DataReader 已经是只向前 只读 这才是真正的性能
  • 如何分配二维数组? [复制]

    这个问题在这里已经有答案了 我需要创建一个二维数组 目前我将其创建为int a 100 100 但我需要使用动态分配内存malloc在C语言中 我用了代码 include
  • 如何在 .net 表单应用程序的消息框中创建自定义按钮?

    我正在尝试在表单应用程序上使用 NET Compact Framework 3 5 实现自定义消息框 确定 取消 我如何实施它 如果您正在寻找带有 确定 和 取消 按钮的消息框 您可以使用 MessageBox Show this Mess
  • 为什么指向 int 的指针会转换为 void* 而指向函数的指针会转换为 bool?

    C 标准草案 N3337 对指针转换有以下规定 4 10 指针转换 2 指向的指针 类型的右值cv T 在哪里T是一个对象类型 可以转换为 指向的指针 类型的右值cv void 将 指针转换为cv T 到 指向cv void 指向类型对象的
  • 连接到 Wikipedia API 的 WebRequest

    这可能是一个可悲的简单问题 但我似乎无法格式化帖子网络请求 响应以从维基百科API http en wikipedia org wiki Wikipedia API 如果有人可以帮助我查看我的问题 我已在下面发布了我的代码 string p
  • 让 clang-tidy 修复头文件

    我正在将当前使用 gcc 编译的项目移至 clang 并有一堆 gcc 没有生成的警告 Winconsistent missing override clang tidy致力于修复这些错误 cpp文件 但是它不触及hpp文件 因为在数据库中
  • 尝试返回 IQueryable 时发生转换错误

    我有一个查询应该返回IQueryable
  • 如何显式调用其 conversion-type-id 包含占位符说明符的转换函数

    struct A operator auto return 0 int main A a a operator auto 1 a operator int 2 GCC https godbolt org z 3jdaK9接受 2 是显式调用
  • 将计时器添加到 Windows 窗体应用程序

    我想添加一个计时器而不是倒计时 它会在什么时候自动开始 表单加载 开始时间应为 45 分钟 一旦结束 即达到 0 分钟时 表单应终止并显示一条消息 我怎样才能做到这一点 语言 最好是C 更详细一点 private void Form1 Lo
  • 如何在类库中添加配置文件,后跟 .NET Core 1.1 的连接字符串

    我正在开发 n 层应用程序 其中有数据访问层 它独立于任何其他应用程序 我已经为 NET Core 1 1 创建了类库 我可以看到依赖项文件夹 但看不到任何配置 JSON 文件 我想知道 我可以在类库项目中添加 AppSetting JSO

随机推荐