土壤中的多线程支撑用于OpenGL
multi-threading support in soil for opengl
我的问题是,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 内运行时,它会给我错误
项目2.exe中0x592527FF (msvcr110d.dll) 处未处理的异常: 0xC0000005:访问违规读取位置0x00000000。
我希望能够对它进行线程处理,以便它可以在菜单屏幕或初始屏幕或类似内容期间加载。所以我的问题是,如果 SOIL 不是线程安全的,那么一个体面的解决方案是运行一个线程来运行菜单/启动画面/任何东西,以便允许纹理在主线程中加载?
OpenGL is THREAD BOUND!这意味着您可以一次从单个线程调用 GL 上下文。(感谢日期狼的指正)如果上面提到的方法使用 GL 方法,我想它是这样做的,那么除非您在单独的 GL 上下文中执行此操作,否则它将无法工作。如果你想采用多线程的方式,你可以创建共享上下文 - 每个上下文都在单独的线程中。然后,在主线程中渲染,同时在另一个线程中加载纹理。我不确定它在性能方面有多大,但无论如何您都可以尝试一下。
相关文章:
- OpenGL - 在 NDC 中计算位置适用于着色器,但不适用于'regular'程序
- opencl openGL互操作内核参数用于读取 写入
- OpenGL ArcBall用于旋转网格
- OpenGL纹理不适用于分辨率大于1x1的情况
- glReadPixel不适用于在OpenGL ES 1.0上获得深度
- OpenGL渲染不适用于Linux Machine(Windows Renders)---可能与CMAKE脚本有关(请参
- 用于在许多Qopenglwidget中显示的FBO渲染的全局OpenGL上下文
- QT 4.x/5.x和OpenGL用于桌面GUI应用程序:选择哪种模块
- OpenGL?中用于渲染的平面图像的高效传输
- 将相机变换应用于 OpenGL
- 纹理不适用于 OpenGL
- 如何将片段着色器应用于OpenGL中的一个对象
- .用于 OpenGL 着色器的 HLSL 文件
- 土壤中的多线程支撑用于OpenGL
- 为法线提供三角形条带和用于 OpenGL Gouraud 着色的扇形
- Ifstream 不适用于 OpenGL/freeglut
- 用于OpenGL调用的c++11包装器
- 用于OpenGL对象的RAII包装器
- 用于OpenGL的重塑函数
- glGenerateMipmap 不适用于 OpenGL 中的 3D 纹理