C++ SDL_UpdateTexture是线程安全的吗?

C++ SDL_UpdateTexture是线程安全的吗?,c++,linux,sdl,C++,Linux,Sdl,我有一个程序可以处理1920x1080大小的纹理,并在多线程环境中通过SDL_UpdateTexture更新纹理。纹理在线程之间“平铺”,因此线程1将更新与线程2不同的区域。例如,t1将更新区域0,0,64,64,t2将更新65,65,128,128 在这种情况下,是否可以在没有任何锁定的情况下使用SDL_UpdateTexture,以便线程可以当前更新纹理?请查看 但是,简单地说:GL不是线程安全的(甚至不是线程感知的)。在Windows上,一次不能在多个线程上激活上下文,因此在不同步线程的

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

在这种情况下,是否可以在没有任何锁定的情况下使用SDL_UpdateTexture,以便线程可以当前更新纹理?

请查看


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

非常感谢。我认为SDL可能会以某种方式在lib内部处理这个问题。然后我将创建另一个线程,负责上传纹理和线程以更新像素数据。谢谢你。@Nidhoegger如果你喜欢冒险,看看Vulkan吧。这不是为了假装,而是为了命令缓冲区等,这使得实现高性能的多线程渲染器变得更加容易。还有,SDL:我计划在某个时候看看vulkan。也许这一点现在达到了:P。谢谢你的提示!你已经有了答案,但是如果你想经常更新纹理-你需要一个流纹理,而不是静态纹理(UpdateTexture是用于静态纹理),对于流纹理,你可以使用LockTexture,然后在不同的线程中更新部分,并在图形线程中解锁纹理。谢谢。是的,流媒体可能会更快。在我的例子中(我做了基准测试),UpdateTexture函数更快(2毫秒比10毫秒)。不过还是要谢谢你的提示!