【问题标题】:Does wglMakeCurrent, drawing, and multithreading cause a race?wglMakeCurrent、绘图和多线程会导致竞争吗?
【发布时间】:2017-12-26 21:21:11
【问题描述】:

如果我有两个 opengl 渲染线程,每个线程都有一个设置其上下文的模式,以固定的帧速率进行绘制。会有比赛吗?

我担心会发生以下情况:

  1. 线程 1 调用 wglMakeCurrent
  2. 线程 2 调用 wglMakeCurrent
  3. 线程 2 绘制
  4. 线程 1 绘制

两个线程依次利用第二个线程的上下文。

我是否应该在设置渲染上下文时使用锁,并绘制以确保操作不会干扰其他渲染线程?

【问题讨论】:

标签: multithreading winapi opengl


【解决方案1】:

只要每个线程都有自己的上下文,就可以安全地在两个线程中绘制。

仅当您想在线程之间共享单个上下文时,您必须确保该上下文一次仅在单个线程中是当前的。

wglMakeCurrent()documentation设置规则:

一个线程可以有一个当前渲染上下文。一个进程可以通过多线程的方式拥有多个渲染上下文。

线程必须在调用任何 OpenGL 函数之前设置当前渲染上下文。否则,所有 OpenGL 调用都会被忽略。

渲染上下文一次只能在一个线程中使用。您不能将渲染上下文设为当前多个线程。

应用程序可以执行多线程绘图,方法是使不同的渲染上下文当前用于不同的线程,为每个线程提供自己的渲染上下文和设备上下文。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 2021-09-03
  • 2014-02-21
  • 1970-01-01
  • 1970-01-01
  • 2011-12-20
相关资源
最近更新 更多