SDL_UpdateTexture 是线程安全的吗?

Posted

技术标签:

【中文标题】SDL_UpdateTexture 是线程安全的吗?【英文标题】:Is SDL_UpdateTexture threadsafe? 【发布时间】:2018-08-20 13:52:19 【问题描述】:

我有一个程序可以处理大小为 1920x1080 的纹理,并在多线程环境中通过 SDL_UpdateTexture 更新纹理。纹理在线程之间“平铺”,因此线程 1 将更新与线程 2 不同的区域。例如,t1 将更新区域 0,0,64,64t2 将更新 65, 65, 128, 128

这种情况下SDL_UpdateTexture可以不用加锁,让线程并发更新纹理吗?

【问题讨论】:

你已经有了答案,但是如果你想经常更新纹理——你需要一个流式纹理,而不是静态的(而 UpdateTexture 是用于静态纹理的),并且对于流式纹理你可以使用 LockTexture,然后在不同线程中更新零件,并在图形线程中解锁纹理。 谢谢。是的,流媒体可能会更快。就我而言(我做了基准测试),UpdateTexture 函数更快(2ms vs 10ms)。不过还是谢谢你的提示! 【参考方案1】:

看看

Multithreaded Rendering on OpenGL

但是,简单地说:GL 不是线程安全的(甚至不是线程感知的)。在 Windows 上,您一次不能在多个线程上激活上下文,因此如果不同步线程(这违背了多线程的目的),您将无法更新纹理。我敢打赌,在 Linux 上也是如此。

【讨论】:

非常感谢。我认为 SDL 可能会以某种方式处理库内部的问题。但接下来我将创建另一个线程,负责上传纹理和更新像素数据的线程。谢谢。 @Nidhoegger 如果你喜欢冒险,看看 Vulkan。这不是为了伪装,而是命令缓冲区等使实现高性能多线程渲染器变得更加容易。此外,使用 SDL:developer.tizen.org/development/guides/native-application/… 我打算在某个时候看看 vulkan。也许现在已经达到了这一点:P。感谢您的提示!

以上是关于SDL_UpdateTexture 是线程安全的吗?的主要内容,如果未能解决你的问题,请参考以下文章

java是线程安全的吗

lua引擎本身是线程安全的吗

列表是线程安全的吗?

原子增加和比较是线程安全的吗

这段代码是线程安全的吗?

这个函数是线程安全的吗?