gpt4 book ai didi

c++ - opengl 土壤中的多线程支持

转载 作者:太空宇宙 更新时间:2023-11-04 11:47:55 24 4
gpt4 key购买 nike

我的问题是,SOIL(简单的 opengl 图像库)线程兼容吗?

因为当我运行以下代码时:

Texture = SOIL_load_OGL_texture (
loc.c_str(),
SOIL_LOAD_AUTO,
SOIL_CREATE_NEW_ID,
SOIL_FLAG_POWER_OF_TWO
| SOIL_FLAG_MIPMAPS
| SOIL_FLAG_MULTIPLY_ALPHA
| SOIL_FLAG_COMPRESS_TO_DXT
| SOIL_FLAG_DDS_LOAD_DIRECT
| SOIL_FLAG_INVERT_Y
);

(为了加载纹理)

在线程外它工作正常,但是在 std::thread 内运行时它给我错误

Unhandled exception at 0x592527FF (msvcr110d.dll) in Project2.exe: 0xC0000005: Access violation reading location 0x00000000.

我希望能够对其进行线程化,以便它可以在菜单屏幕、闪屏或类似的东西期间加载。所以我的问题是,如果 SOIL 不是线程安全的,那么一个体面的解决方案是运行一个线程来运行菜单/启动画面/任何东西,以便允许纹理在主线程中加载?

最佳答案

OpenGL isTHREAD BOUND!这意味着您可以一次从单个线程调用 GL 上下文。(感谢 datenwolf 的更正)如果上述方法使用 GL 方法,我想它确实如此,那么它赢了除非你在单独的 GL 上下文中执行它,否则它不会工作。如果你想采用多线程方式,你可以创建共享上下文 - 每个都在单独的线程中。然后你在主线程中渲染,同时在另一个线程中加载纹理。我是不确定它对性能有多大影响,但无论如何您都可以尝试一下。

关于c++ - opengl 土壤中的多线程支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19341704/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com