c++ - 在多个线程之间共享 OpenGL 上下文
问题描述
我正在开发一个有很多场景的 OpenGL 项目。我已经成功实现了运行时切换场景的功能,因此用户可以通过ImGui菜单选择场景名称来切换到另一个场景。发生这种情况时,删除当前场景以清理脏的 OpenGL 内部状态,然后将从工厂模式加载新场景。一切正常,除了窗口会在过渡期间冻结几秒钟,因为卸载/加载场景需要很长时间才能完成。
我现在要做的是创建一个加载屏幕,它将显示在两者之间。卸载/加载场景的任务是使用std::async
和异步调度std::future
的,因此调用者是非阻塞的,并且可以显示我的加载屏幕。但是,由于我在另一个线程的后台创建新场景,该线程无法在主线程中看到 OpenGL 上下文,因此,任何glxxxx()
调用都会导致访问冲突,因此无法创建新场景。
我知道 OpenGL 是一个全局状态机,它不能很好地支持多线程。我还在某处读到它依赖于驱动程序。这个话题的大部分线程都老了,不知道到2021年在OpenGL中使用多线程是否仍然困难。据我所知,加载屏幕和切换场景只是非常基本的功能,很多应用程序都可以这样做,而我相信有很多他们使用OpenGL,为什么这个问题今天仍然没有得到普遍解决?
有谁知道这方面的任何外部库?或者是否有另一种不使用多个线程的解决方法?
解决方案
推荐阅读
- spring-boot - java - 如何在使用JdbcBatchItemWriter的春季批处理中参数为null / 0时跳过更新
- php - 清除货币切换器更改的 WooCommerce 购物车
- .net-core - 如何在第一个项目失败时停止 FluentValidation RuleForEach
- vue.js - 通过 vuejs npm 包提供公共资产
- azure - 如何管理 Cosmos DB 中多次写入的会话令牌?
- javascript - 如何使用反应路由器dom显示详细信息页面
- cordova - Cordova 视频文件上传 Android 10 目标级别 29 不起作用
- android - 调用应用程序相机的 Matrix.org 元素在电视中不起作用
- python - groupby 根据 df2 python 的 bin 查找 df1 的最小值和最大值
- angular - 如何在ngrx中使用dispatch函数触发多个调用