gpt4 book ai didi

c++ - 使用来自不同线程的 opengl-command

转载 作者:行者123 更新时间:2023-11-27 22:35:27 25 4
gpt4 key购买 nike

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

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

最佳答案

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

可以将非常原始的绘制命令实现为具有虚拟 Draw 方法的类层次结构。当然,这根本不是一个小变化,但现代引擎采用了这种方法,当然是它的更高级版本。如果提交命令对象的子系统在下一帧中重新使用它们,包括它们的缓冲区,则效率会更高。因此每个子模块不断地准备和更新绘制命令,但仅在根据某些逻辑应该渲染时才提交。

关于c++ - 使用来自不同线程的 opengl-command,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54853602/

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