【问题标题】:Use opengl-command from different thread使用来自不同线程的 opengl-command
【发布时间】:2019-02-24 15:47:27
【问题描述】:

我有两个线程:一个用于 3d 渲染的主线程 (opengl) 和一个用于逻辑的线程。如果我想在渲染线程中创建一个盒子网格,如果订单来自逻辑线程,我应该如何连接线程?

在这种情况下,逻辑线程将使用 opengl-commands,这是不可能的,因为每个 opengl-command 都只能在主线程中执行。我知道我不能在不同的线程上共享 opengl 上下文(这似乎是一个坏主意),那么我应该如何解决这个问题呢?是否存在一些通用设计模式或其他东西?谢谢。

【问题讨论】:

    标签: c++ multithreading opengl


    【解决方案1】:

    您可以实现绘制命令队列。每个绘制命令都包含进行所需 OpenGL 调用所需的任何内容。渲染线程(原子地)清空队列并处理命令的每一帧。任何其他线程随时准备自己的命令并(以原子方式)将它们排入队列。

    绘图命令可以通过虚拟Draw 方法实现为类层次结构。当然这不是一个小改动,而且实施这个系统的代价也不是那么小。

    【讨论】:

      【解决方案2】:

      有多种方法可以解决这个问题。一种是实现一个命令队列,逻辑线程为命令生产者,渲染线程为消费者。

      另一种方法是使用辅助 OpenGL 上下文,该上下文设置为共享主要 OpenGL 上下文数据。您可以在不同的线程中同时使两个上下文成为当前的。对于 OpenGL-3.x 核心版本,您可以将当前设置为没有可绘制对象的上下文。然后,您可以使用辅助上下文来加载新数据、映射缓冲区等。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-30
        • 1970-01-01
        • 1970-01-01
        • 2015-10-13
        • 2019-07-14
        • 1970-01-01
        • 2023-03-06
        相关资源
        最近更新 更多