使用来自不同线程的OpenGL命令
Use opengl-command from different thread
我有两个线程:一个用于3D渲染的主线程(OpenGL),逻辑中一个线程。如果要在渲染线程中创建一个框架,如果订单来自逻辑线程,我应该如何连接线程?
在这种情况下,逻辑线程将使用OpenGL-Commands,这是不可能的,因为每个OpenGl-Command仅应在主线程中登记。我知道我无法通过不同的线程共享OpenGL上下文(这似乎是一个坏主意),那么我应该如何解决这个问题?是否存在某些通用设计模式或其他方式?谢谢。
您可以实现draw命令队列。每个绘制命令都包含进行所需的OpenGL调用所需的任何内容。每个帧渲染线程都清空当前队列并处理命令。任何其他线程都可以随时准备自己的命令,并在下一帧的队列中招募它们。
非常原始的绘制命令可以用虚拟Draw
方法作为类层次结构实现。当然,这根本不是一个很小的变化,但是现代发动机采用了这种方法,当然更先进的版本。如果提交其命令对象的子系统在下一个帧(包括其缓冲区)重新使用它们,则可以有效。因此,每个子模块都会不断准备和更新Draw命令,但仅在应根据某些逻辑进行渲染时才提交。
有多种方法可以解决此问题。一种是实现命令队列,逻辑线程是命令生产者,而渲染线程则是消费者。
另一种方法是利用辅助OpenGL上下文,该上下文是共享主要OpenGL上下文数据的设置。您可以在不同的线程中同时同时使用两个上下文。对于OpenGL-3.x核心,您可以将当前的上下文作为上下文,而无需绘制。然后,您可以使用辅助上下文来加载新数据,地图缓冲区等。
相关文章:
- 黑色纹理,如果图片大小在第二个 OpenGL 线程中> 1 * 1
- E/libEGL:调用没有当前上下文的 OpenGL ES API (每个线程记录一次) - Android/SDL
- 在另一个线程中绘制 OpenGL
- 是多个线程渲染到单个OpenGL上下文线程安全的线程
- OpenGL 在与呈现线程不同的线程中创建和加载 VBO 信息
- 加载的 OpenGL 函数是特定于上下文还是特定于线程?(视窗)
- 在多线程程序中创建OpenGL结构
- 使用来自不同线程的OpenGL命令
- 2个线程 - 一个带有OpenGL窗口的线程,第二个带有WXWIDGETS的窗口
- OpenGL 在第二个线程中,在类中启动
- Ubuntu VirtualBox中的OpenGL多线程示例
- 如何使用SFML 2.2切换OpenGL上下文的线程
- OpenGL多线程,可变处理
- 在渲染以外的另一个线程中初始化 OpenGL 上下文
- Android:从其他线程访问OpenGL
- OpenGL在屏幕外的单独线程与Qt 4.8
- OpenGL 上的多线程渲染
- 在 MFC 对话框和自己的线程上的 OpenGL 控件之间传递消息
- 利用 openGL 的多线程
- 具有共享QGLWidgets的线程OpenGL与Qt 5.1的问题