如果我在 Raylib 中不使用线程加载纹理,它可以正常工作:
INFO: FILEIO: [assets/spades/5_spades.png] File loaded successfully
INFO: IMAGE: Data loaded successfully (112x176 | R8G8B8 | 1 mipmaps)
INFO: TEXTURE: [ID 46] Texture loaded successfully (112x176 | R8G8B8 | 1 mipmaps)
如果我调用该函数在线程内加载纹理,则会失败:
INFO: FILEIO: [assets/spades/7_spades.png] File loaded successfully
INFO: IMAGE: Data loaded successfully (112x176 | R8G8B8 | 1 mipmaps)
WARNING: TEXTURE: Failed to load texture
但它没有说明为什么加载纹理失败。
我已在此处发布了源代码: https: //github.com/imekon/RaylibThreading
Raylib 是 OpenGL 的包装器,底层 OpenGL 上下文不支持同时从多个线程访问。
您需要在第二个线程中将图像加载到内存中
Image
,然后在主线程中使用它创建纹理。LoadImage
LoadTextureFromImage
纹理存储在 GPU 内存中,只能由 Raylib 中的主线程创建,而图像存储在 RAM 中,可以由任何线程创建和销毁。(如果您在线程之间共享图像,则仍然需要同步)